RHCE课程-初级部分3、LINUX的文件及文件夹的组织结构
Linux的文件及文件夹的组织结构成一个倒立置的树形结构。并以 / (slash)分隔。
重要的文件目录

用户主目录: /root,/home/username
用户可执行程序目录: /bin, /usr/bin, /usr/local/bin
系统可执行程序: /sbin, /usr/sbin, /usr/local/sbin
挂载点: /media, /mnt
常用的配置文件目录: /etc
临时文件目录: /tmp
内核及引导目录: /boot
服务器目录: /var
系统信息目录: /proc, /sys
共享库目录: /lib, /usr/lib, /usr/local/lib
image
 谁告诉我用哪个用户登陆,主机名字是什么,现在在哪个目录?
user: root 主机名:rhel5 目录:/root
 
cd 命令 是改变用户所在目录的命令
image
我现在所在的是什么目录?
根目录
 
如果我想切换会我的家目录有什么方法?
总结下
cd     
回当前用户家目录
cd ~  
也是回当前用户家目录
cd -    回上一次所在的目录
还有两种方法
cd /root  
使用绝对路径
cd root    使用相对路径
image 
 
复习:
1、用户主目录有哪两种?  /root and /home/username
2、常用的配置文件存放在哪个目录?  /etc
3、内核引导目录是哪个?   /boot

用了这个命令了吗?ls -a,是不是里面有两个目录很奇怪,一个是.,一个是..
.   代表当前目录
..  代表上一级目录
image
如果我用cd ..这个命令会切换到哪个目录?OK 就是/,应为root 的上级目录就是 /,~ 那个位置都知道是代表个人主目录(类似于 Windows 的 C:\Document and Settings\XXXX\)
image
但是怎么才能让他显示当前的完整路径呢?可以更改环境变量来实现当前状态
image
vi /etc/bashrc,修改这一行后面大写的W,改成小写的w就可以了,保存退出。
u 就是当前用户,h 就是主机名字,w 就是当前目录
image
要查看修改结果,我们需要关闭终端,重新打开终端就可以看见效果了,修改后就成了这种效果
image
现在讲讲ls 命令
ls -a 显示所有文件 包括隐藏文件
ls -l  以长列表方式显示文件
LINUX里只要文件名前有一个点的就是隐藏文件
这是我在相同目录用两个命令的效果
image
这是长列表方式显示文件
image
 
用ls –l以长模式察看文件的详细信息
包含当前目录的硬盘使用空间、文件类型、文件权限、硬连接数、文件拥有者、文件所属组、文件大小、更动时间、文件名。
一共10个位置,大家都可以自己数下
前面image 代表文件的种类和权限
第一个"-"是什么意思?第一个"-"位置是代表文件类型的。
 
在linux中,所有东西都被当成文件。
文件权限前的第一个字母用来标识文件类型:
-:一般文件
d:目录文件
b:块设备文件
c:字符设备文件
l:链接文件
p:人工管道
 
第一个位置代表文件类型了,那么剩下的9个呢?
234位代表文件所有者的权限。
567位代表文件所属组的权限。
89 10 代表其他用户的权限。
 
文件的前面10位的含义大家都了解了吗? 
r 是读的意思
W 是写的意思
X 是执行的意思 
 
image文件的硬连接数
知识点:
硬连接就像一个文件有多个文件名,
软连接就是产生一个新文件,这个文件指向另一个文件的位置,
硬连接必须在同一文件系统中,而软连接可以跨文件系统.
image 前面是文件的所属用户,后面是文件的所属组。
image 文件大小,一般是块为单位,一个块约等于1K
image 文件最后一次更改时间
image 文件名字
我想看以长列表方式看/root目录,该用什么命令?
ls -l /root
image
上图是看不到/root 目录的长列表,你在文件名那里找不到/root
根本不会看目录。所以我们需要加一个d 参数,ls -ld /root
image
注意,在打命令和目录的时候,你们一定要用TAB键来补全 ,这样比较轻松,也能检查命令是否正确。如果不能补全就证明你的命令有问题
 用命令补全,TAB,他会自动加上最后那个/符号,证明这是个目录,如果后面没有/ 的话,这个可能是目录,也可能是文件
image
其实还有两种方法可以查看root的长列表,你们在思考下,运用我们刚才学会的知识好好思考下
我们刚才说过 ls 是查看目录内的文件,如果我在/ 里看的话就能看见root了
ls -l 就可以了,也可以用ll命令。
image
还有一种 就是 我们刚才提到的.和..
在/root 目录用 ls -a,其中的.也就是root了。也就达到我的要求了。
image


用file检查文件类型
由于linux中的文件名中没有扩展名,所以可能需要用file来查看文件类型
上一个是ASCII的TEXT文本文件,第二个是目录,这个命令基本就这样了,功能不是很强 
 
新建文件
名称:touch 
使用权限:所有使用者
使用方式: 
touch [-acfm] 
[-r reference-file] [--file=reference-file] 
[-t MMDDhhmm[[CC]YY][.ss]] 
[-d time] [--date=time] [--time={atime,access,use,mtime,modify}] 
[--no-create] [--help] [--version] 
file1 [file2 ...] 
说明: 
touch 指令改变档案的时间记录。 ls -l 可以显示档案的时间记录。 
参数: 
a 改变档案的读取时间记录。 
m 改变档案的修改时间记录。 
c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。 
f 不使用,是为了与其他 unix 系统的相容性而保留。 
r 使用参考档的时间记录,与 --file 的效果一样。 
d 设定时间与日期,可以使用各种不同的格式。 
t 设定档案的时间记录,格式与 date 指令相同。 
--no-create 不会建立新档案。 
--help 列出指令格式。 
--version 列出版本讯息。 

范例: 
最简单的使用方式,将档案的时候记录改为现在的时间。若档案不存在,系统会建立一个新的档案。 
touch file 
touch file1 file2

将 file 的时间记录改为 5 月 6 日 18 点 3 分,公元两千年。
时间的格式可以参考 date 指令,至少需输入 MMDDHHmm ,就是月日时与分。 
touch -c -t 05061803 file 
touch -c -t 050618032000 file
将 file 的时间记录改变成与 referencefile 一样。 
touch -r referencefile file
将 file 的时间记录改成 5 月 6 日 18 点 3 分,公元两千年。
时间可以使用 am, pm 或是 24 小时的格式,日期可以使用其他格式如 6 May 2000。
====================================================
touch -d 和 date -s 的用法相同。
如果没有指定日期,默认为系统日期
touch -d 18:03 file 
touch -d "18:03" file 
touch -d "6:03pm" file

如果没有指定时间,默认为 00:00:00
touch -d 20000506 file 
touch -d "05/06/2000" file 
touch -d "20000506" file
touch -d "6:03pm 05/06/2000" file 
touch -d "20000506 18:03" file 
touch -d "20000506 18:03:00" file
 
问题:
LINUX的文件名最多支持多少字符?
LINUX 文件名字的长度最大是256个字符.
通常由字母、数字、“.”(点号)、“_”(下划线)和 “-”(减号)组成.
强调: LINUX文件名字和命令都是严格区分大小写的。51Cto 51cTo 51CTO 都是LINUX里面表示不同的文件.
大家都知道,一个用户,可以加入多个组。但是这个用户建立的文件默认属于哪个组呢?默认创建的文件的组是所有者的主用户组GID。
这是/etc/passwd,里面有两个500,第一个500,是redhat这个用户的UID,第二个500是这个用户的主用户组ID叫GID,用户建立的文件所属组就是这个文件定义的. 
 
删除文件
名称:rm
使用权限:所有使用者
使用方式:rm [options] name...
说明:删除档案及目录。
参数:
-i 删除前逐一询问确认。
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-r 将目录及以下之档案亦逐一删除。
使用rm命令要小心。因为一旦文件被删除,它是不能被恢复的。为了防止这种情况的发生,可以使用i选项来逐个确认要删除的文件。

范例:
删除所有C语言程式档;删除前逐一询问确认 :
rm -i *.c
将 Finished 子目录及子目录中所有档案删除 :
rm -r Finished
快速删除log日志
rm  -f  *1001.log *1002.log *1003.log *1004.log

重命名(移动 )文件
名称:cp
使用权限:所有使用者
使用方式:
cp [options] source dest
cp [options] source... directory

说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录。
把计
-a 尽可能将档案状态、权限等资料都照原状予以复制。
-r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。
-f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。
范例:
将档案 aaa 复制(已存在),并命名为 bbb :
cp aaa bbb
将所有的C语言程式拷贝至 Finished 子目录中 :
cp *.c Finished
 
我们把51cto文件复制到/home/michael目录下,并改名为blog51cto
 
 
RHCE课程-初级部分3、文件权限(重点)
 
文件权限
对于每一个文件,Linux都提供了一套文件权限系统。
对于每一类用户,权限系统又分别提供他们三种权限

读(r) :用户是否有权力读文件的内容
写(w) :用户是否有权利改变文件的内容
执行(x) :用户是否有权利执行文件

文件权限系统,将操作文件的用户都分成三类
文件的拥有者(u)
文件所属组的成员(g)
其他用户(o)
 
所属用户
每一个文件都有一个拥有者。文件的拥有者可以改变文件的权限。所有的用户都有一个唯一的ID号(UID)
用户的名字与标识都放在/etc/passwd里面
 
下面接着将讲几个简单的命令
创建用户:useradd 
添加一个叫amy的用户,amy是你想要创建的用户名.命令运行成功,是不会有任何提示的.
然后用passwd 改变这个用户的密码。
注意;如果你passwd命令后面不跟用户名的话,他就会改变当前用户的密码。
刚才的两个命令我们就创建了一个普通用户,并修改了他的密码
 
删除用户:userdel
语  法:userdel [-r][用户帐号]
userdel可删除用户帐号与相关的文件。
若不加参数,则仅删除用户帐号,而不删除相关文件。就像下面这样
参  数:
  -f  删除用户登入目录以及目录中所有文件。
 
现在我们用su - amy命令切换到刚才建立的目录
谁能告诉中间那 - 符号有什么意义? 
中间那个 - 符号的意思完整切换到amy用户。所谓的完整就是连着所有变量一起切换.
很重要的细节,大家不要忘记,不然你切换用户会出现莫名其妙的问题
 
对于“-”;切换的效果是看不出来的,在那里能体现到这一点?
好嘛,我再在这花点时间,先是完整切换到一般用户,然后不用- 切换回root。再用useradd新建一个用户试试。
提示:bash:useradd: command not found
这就是为什么要求你们完整切换,明白了吗?
 
上面你们都知道文件权限,和文件所有者还有所属组了,那么怎么改变文件权限呢?
chmod  文件权限 文件名字
只有root用户可以用chown来改变文件的拥有者。
语法:chown   用户名  文件名
建立文件用touch 命令,
大家建立一个文件
名字叫;51cto
权限: u=rwx   g=rx  o=rx 
touch 命令大家都会吧?
建立好了,用长列表方式查看,
 
改变文件权限有两种方法:
一种是用字母表示,
比如:u+rwx g+rwx  o+rwx,
也可以用减号u-rwx g-rwx o-rwx
由于时间关系和大家都有基础,用字母我就提下。 一般都是用数字,这个才是重点    
第二种chmod后可以用三个数字来表示用户权限
第一位代表文件拥有者权限
第二位代表文件所属组成员权限
第三位代表其他用户权限
一个文件权限分成U,G,O三部分。每部分又分为R,W,X三种权限。那么我们用三组数字来表示,三种用户的权限。
4(读)
2(写)
1(执行) 
用数字表示,比如 777  
如果是7,就证明他有那三种权限,如果是5就证明那个位置的用户只有4和1的权限,也就是没有2,写的权限。
大家把刚才那个51cto的文件改成amy所有

所属组
每一个文件只能属于一个指定的组。所有的用户组也都有一个唯一的ID号(GID)
用户的组名与组标识都放在/etc/group里面
文件的拥有者与root用户,可以用chgrp来改变文件所属的组
语法:chgrp 组名  文件名
然后在把刚才那个的所有组也改成amy组

root用户也可以使用 #chown 用户名:组名  文件名
一般普通用户的用户ID与组ID的值大于等于500,而系统用户ID与组ID小于500。(详情请查看/etc/login.defs配置文件)
 
查询当前Linux版本:uname -a
 
大家都知道,我们创建一个用户的时候,会自动创建用户主目录,会分配UID,还有密码策略,是怎么规定的吗? 
就是在login.defs这个文件里面
打开这个文件vim /etc/login.defs
下面这行看见了吗?
意思是建立用户的时候同时也在规定的这个目录建立邮件目录。
 
默认不显示行号,可以使用:set nu命令显示行号。
 
第17行,意思是密码有效期
第18行,是密码最小更改时间,单位是天。为0,就是没有限制,随时可以更改。
第19行,是安全密码的最小位数
第20行,是密码过期前几天提醒用户,默认是7天。
 
第25行 意思是新建用户的最小UID是500 
第26行 新建拥护的最大UID是60000 
同理,你们就该知道GID的意思了吧,31和32行就是最小到最大的GID 
每个用户都有一个对应的UID,正常情况下,服务器里不会有两个相同的UID。
PS:在强行改变/etc/passwd的情况是可以出现两个用户有相同的UID  
 
下面我们做个实验,先建立一个用户redhat,然后完整切换到这个用户,在家目录里创建一个文件file,把权限改成所有者可写,其他用户什么权限都没有.
 
在这,再讲一个命令。
cp 源文件 目标地点新文件名字
复制一个文件到其他地方
用这个命令 把你们刚才建立的文件拷贝到根下面
直接用 cp -p 参数重新复制一次
-p 参数的意思是保持原文件的权限和属性不变
大家仔细看下我的操作
看下我CP的时候加了 -p和没有加,两个文件的区别
一般CP都会把新生成的文件的所有者改成使用命令的用户及用户组。如果加 -p 就不会改变。
 
下面切换成 redhat 用户,然后用 vim /file和 vim /file1
vim /file1
证明我们是有权限给里面写东西的,注意最下面的
然后 vim file
redhat用户对这个文件是没有权限更改的,因为redhat用户对file是没有写入权限
 
好了,进入重点。
现在我们删除redhat 用户
再新建redhat 用户,切换到redhat用户,你们说现在我可以编辑/file1吗?不能
第二次建的redhat用户不能再编辑/file1文件
现在我们看看file1的所有者
由于没有了刚才的redhat用户,所以用户所有者及组变成了刚才redhat的UID:500。
这是刚才的效果
再看下现在的
两个redhat用户名字一样,但是UID不一样。他们的权限也不一样.这样你们应该就知道UID的用处了
主要这个实验步骤比较多,但是都不难
PS:有种极端的情况:如果这个redhat是UID最后一位用户,就是在它UID后没有比它大的UID用户,当此用户被删除后再重新建一个同名的用户时,新建的用户有它同样的UID。如下peter用户一样:
新建的peter用户对/test文件两样有权限编辑
 
我们继续看刚才那个文件哈
46行,是否给新建立的用户建立家目录。
50行,给用户建立的家目录的权限掩码。
目录的初始权限是777
文件的初始权限是666 
然后用初始权限减去权限掩码得到的就是新建文件或者目录的权限
可以用umask命令查看当前用户的权限掩码
普通用户的掩码是0002 
root的掩码是0022 
新建目录的权限就是777-022=755
新建文件的权根就是666-022=644
 
用户家目录的掩码是077 
用户家目录的权根就是777-077=700
就是下面这种效果
 
最后一项,意思在建立一个用户的时候也建立相应的组。
 
记住我们刚才讲的是login.defs这个文件的内容:新建用户的配置文件
 
#################################################################
PS:并以此文纪念首次使用Windows Live Writer客户端在51CTO写博客,以前老用maxthon写,最近写前两个笔记时老是IE死机,差不多每写一稿要死机3-4次,郁闷,写得差不多了只能重写,再次郁闷。
我看看Windows Live Writer上传后的效果哈!HOHO
看了后在Windows Live Writer中不能设置标签、文章分类及版权声明,不知道是我不知道还是本来就是这样的,要自己在网页改。好像51cto的水印也没有了,555
再次郁闷的是我上传后我的IE又不幸死机了,郁闷进行中!
 
用Windows Live Writer客户端在51CTO写博客