RHCE课程-初级部分3


1.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

p_w_picpath


   谁告诉我用哪个用户登陆,主机名字是什么,现在在哪个目录?

       user: root    主机名:rhel5    目录:/root
   cd 命令 是改变用户所在目录的命令

p_w_picpath

   我现在所在的是什么目录?
       根目录



   如果我想切换会我的家目录有什么方法?

       总结下
       cd      
回当前用户家目录
       cd ~  
也是回当前用户家目录
       cd -    回上一次所在的目录
       还有两种方法
       cd /root  
使用绝对路径
       cd root    使用相对路径

p_w_picpath


   复习:


   1、用户主目录有哪两种?  /root and /home/username
   2、常用的配置文件存放在哪个目录?  /etc
   3、内核引导目录是哪个?   /boot

   用了这个命令了吗?ls -a,是不是里面有两个目录很奇怪,一个是.,一个是..
       .   代表当前目录
       ..  代表上一级目录

p_w_picpath

   如果我用cd ..这个命令会切换到哪个目录?OK就是/,应为root的上级目录就是/,~那个位置都知道是代表个人主目录(类似于 Windows 的 C:\Document and Settings\XXXX\)

p_w_picpath

   但是怎么才能让他显示当前的完整路径呢?可以更改环境变量来实现当前状态

p_w_picpath

   vi /etc/bashrc,修改这一行后面大写的W,改成小写的w就可以了,保存退出。
       u 就是当前用户,h就是主机名字,w 就是当前目录

p_w_picpath

   要查看修改结果,我们需要关闭终端,重新打开终端就可以看见效果了,修改后就成了这种效果

p_w_picpath



   现在讲讲ls命令


       ls-a  显示所有文件包括隐藏文件
       ls-l  以长列表方式显示文件

     

        LINUX里只要文件名前有一个点的就是隐藏文件


   
   这是我在相同目录用两个命令的效果


p_w_picpath

   这是长列表方式显示文件

p_w_picpath

   用ls –l以长模式察看文件的详细信息
   包含当前目录的硬盘使用空间、文件类型、文件权限、硬连接数、文件拥有者、文件所属组、文件大小、更动时间、文件名。
   一共10个位置,大家都可以自己数下
   前面p_w_picpath 代表文件的种类和权限
   第一个"-"是什么意思?第一个"-"位置是代表文件类型的。

   在linux中,所有东西都被当成文件。


   文件权限前的第一个字母用来标识文件类型:

       -:一般文件
       d:目录文件
       b:块设备文件
       c:字符设备文件
       l:链接文件
       p:人工管道

   

   第一个位置代表文件类型了,那么剩下的9个呢?

       234位代表文件所有者的权限。
       567位代表文件所属组的权限。
       89 10 代表其他用户的权限。
   文件的前面10位的含义大家都了解了吗?
       r 是读的意思
       W 是写的意思
       X 是执行的意思

p_w_picpath

文件的硬连接数

   

   知识点:

                   硬连接就像一个文件有多个文件名,
                   软连接就是产生一个新文件,这个文件指向另一个文件的位置,

                   硬连接必须在同一文件系统中,而软连接可以跨文件系统.


p_w_picpath前面是文件的所属用户,后面是文件的所属组。


p_w_picpath文件大小,一般是块为单位,一个块约等于1K


p_w_picpath文件最后一次更改时间


p_w_picpath文件名字


   我想看以长列表方式看/root目录, 该用什么命令?
   ls -l  /root

p_w_picpath

   上图是看不到/root 目录的长列表,你在文件名那里找不到/root
   根本不会看目录。 所以我们需要加一个d 参数, ls -ld /root

p_w_picpath

   注意,在打命令和目录的时候,你们一定要用TAB键来补全,这样比较轻松,也能检查命令是否正确。如果不能补全就证明你的命令有问题
   用命令补全,TAB,他会自动加上最后那个/符号,证明这是个目录,如果后面没有/的话,这个可能是目录,也可能是文件

p_w_picpath

   其实还有两种方法可以查看root的长列表,你们在思考下,运用我们刚才学会的知识好好思考下
   我们刚才说过 ls 是查看目录内的文件,如果我在/里看的话就能看见root了
   ls -l 就可以了,也可以用ll命令。

p_w_picpath

   还有一种 就是 我们刚才提到的. 和..
   在/root 目录用 ls -a,其中的.也就是root了。也就达到我的要求了。

p_w_picpath



   用file检查文件类型
   由于linux中的文件名中没有扩展名,所以可能需要用file来查看文件类型

200811021225602419281.jpg

   上一个是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里面表示不同的文件.

200811021225603500140.jpg

   大家都知道,一个用户,可以加入多个组。但是这个用户建立的文件默认属于哪个组呢?默认创建的文件的组是所有者的主用户组GID。

200811021225603932062.jpg

   这是/etc/passwd,里面有两个500,第一个500,是redhat这个用户的UID,第二个500是这个用户的主用户组ID叫GID,用户建立的文件所属组就是这个文件定义的.


   删除文件

        名称:rm
        使用权限:所有使用者
        使用方式:rm [options] name...
        说明:删除档案及目录。
        参数:
               -i 删除前逐一询问确认。
               -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
               -r 将目录及以下之档案亦逐一删除。


    使用rm命令要小心。因为一旦文件被删除,它是不能被恢复的。为了防止这种情况的发生,可以使用i选项来逐个确认要删除的文件。

200811021225604743812.jpg

   范例:
       删除所有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

200811021225605403578.jpg



2.文件权限(重点)

   文件权限
       对于每一个文件,Linux都提供了一套文件权限系统。
       对于每一类用户,权限系统又分别提供他们三种权限

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

   文件权限系统,将操作文件的用户都分成三类
       文件的拥有者(u)
       文件所属组的成员(g)
       其他用户(o)
   所属用户
   每一个文件都有一个拥有者。文件的拥有者可以改变文件的权限。所有的用户都有一个唯一的ID号(UID)
   用户的名字与标识都放在/etc/passwd里面


   下面接着将讲几个简单的命令

   

   创建用户:useradd

   添加一个叫amy的用户,amy是你想要创建的用户名.命令运行成功,是不会有任何提示的.

200811031225717328140.jpg

   然后用passwd 改变这个用户的密码。

200811031225717404296.jpg

   注意;如果你passwd命令后面不跟用户名的话,他就会改变当前用户的密码。
   刚才的两个命令我们就创建了一个普通用户,并修改了他的密码


   删除用户:userdel

   语  法:userdel [-r][用户帐号]
   userdel可删除用户帐号与相关的文件。

200811031225717641734.jpg

   若不加参数,则仅删除用户帐号,且不删除相关文件。就像下面这样

200811031225717517656.jpg

   参  数:

         -f  删除用户登入目录以及目录中所有文件。


   现在我们用su - amy命令切换到刚才建立的目录

200811031225718036328.jpg

   谁能告诉中间那 - 符号有什么意义?
   中间那个 - 符号的意思完整切换到amy用户。所谓的完整就是连着所有变量一起切换.
   很重要的细节,大家不要忘记,不然你切换用户会出现莫名其妙的问题
   对于“-”;切换的效果是看不出来的,在那里能体现到这一点?
   好嘛,我再在这花点时间,先是完整切换到一般用户,然后不用- 切换回root。再用useradd新建一个用户试试。

200811031225718273531.jpg

   提示:bash:useradd: command not found
   这就是为什么要求你们完整切换,明白了吗?

   

   上面你们都知道文件权限,和文件所有者还有所属组了,那么怎么改变文件权限呢?


   chmod  文件权限 文件名字

       只有root用户可以用chown来改变文件的拥有者。
       语法:chown   用户名  文件名


   建立文件用touch 命令,

   大家建立一个文件
   名字叫;51cto
   权限: u=rwx   g=rx  o=rx
   touch 命令大家都会吧?
   建立好了,用长列表方式查看,

200811031225718518031.jpg

   改变文件权限有两种方法:
       一种是用字母表示,
           比如: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所有

200811031225719319515.jpg


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

200811031225719460171.jpg

   root用户也可以使用 #chown 用户名:组名  文件名
   一般普通用户的用户ID与组ID的值大于等于500,而系统用户ID与组ID小于500。(详情请查看/etc/login.defs配置文件)


   查询当前Linux版本:uname -a

200811031225717816718.jpg



   大家都知道,我们创建一个用户的时候,会自动创建用户主目录,会分配UID,还有密码策略,是怎么规定的吗?

   就是在login.defs这个文件里面
   打开这个文件vim /etc/login.defs

200811041225776404201.jpg

   下面这行看见了吗?

200811041225776663418.jpg

   意思是建立用户的时候同时也在规定的这个目录建立邮件目录。
   默认不显示行号,可以使用:set nu命令显示行号。

200811041225777279773.jpg

   第17行,意思是密码有效期
   第18行,是密码最小更改时间,单位是天。为0,就是没有限制,随时可以更改。
   第19行,是安全密码的最小位数
   第20行,是密码过期前几天提醒用户,默认是7天。

200811041225777389226.jpg

   第25行 新建用户的最小UID是500
   第26行 新建用户的最大UID是60000

200811041225777588615.jpg

   同理,你们就该知道GID的意思了吧, 31和32行就是最小到最大的GID

200811041225777694114.jpg

   每个用户都有一个对应的UID,正常情况下,服务器里不会有两个相同的UID。


   PS:在强行改变/etc/passwd的情况是可以出现两个用户有相同的UID

   下面我们做个实验,先建立一个用户redhat,然后完整切换到这个用户,在家目录里创建一个文件file,把权限改成所有者可写,其他用户什么权限都没有.

200811041225778592484.jpg

   在这,再讲一个命令。
       cp 源文件 目标地点新文件名字
       复制一个文件到其他地方
       用这个命令 把你们刚才建立的文件拷贝到根下面

200811041225779292885.jpg

   直接用 cp -p 参数重新复制一次
       -p 参数的意思是保持原文件的权限和属性不变

200811041225780038662.jpg

   大家仔细看下我的操作
   看下我CP的时候加了 -p和没有加,两个文件的区别
   一般CP都会把新生成的文件的所有者改成使用命令的用户及用户组。如果加 -p 就不会改变。


   下面切换成 redhat 用户,然后用 vim /file和 vim /file1

   vim /file1

200811041225780471456.jpg

   证明我们是有权限给里面写东西的,注意最下面的

200811041225780580955.jpg

   然后 vim file

200811041225780726908.jpg

   redhat用户对这个文件是没有权限更改的,因为redhat用户对file是没有写入权限

200811041225780912375.jpg

   好了,进入重点。
   现在我们删除redhat 用户

200811041225781118577.jpg

   再新建redhat 用户,切换到redhat用户,你们说现在我可以编辑/file1吗?不能

200811041225781351372.jpg

   第二次建的redhat用户不能再编辑/file1文件

200811041225784555681.jpg

   现在我们看看file1的所有者

200811041225784728950.jpg

   由于没有了刚才的redhat用户,所以用户所有者及组变成了刚才redhat的UID:500。
   这是刚才的效果

200811041225784900586.jpg

   再看下现在的

200811041225784994133.jpg

   两个redhat用户名字一样,但是UID不一样。他们的权限也不一样.这样你们应该就知道UID的用处了
   主要这个实验步骤比较多,但是都不难


   PS:有种极端的情况:如果这个redhat是UID最后一位用户,就是在它UID后没有比它大的UID用户,当此用户被删除后再重新建一个同名的用户时,新建的用户有它同样的UID。如下peter用户一样:

200811041225786312763.jpg

   新建的peter用户对/test文件两样有权限编辑

200811041225786423013.jpg

   

   我们继续看刚才那个文件哈

   46行,是否给新建立的用户建立家目录。
   50行,给用户建立的家目录的权限掩码。

200811041225786772042.jpg



   目录的初始权限是777

   文件的初始权限是666
       然后用初始权限减去权限掩码得到的就是新建文件或者目录的权限
   可以用umask命令查看当前用户的权限掩码
       普通用户的掩码是0002
       root的掩码是0022

200811041225787316570.jpg

       新建目录的权限就是777-022=755
       新建文件的权根就是666-022=644
   用户家目录的掩码是077
       用户家目录的权根就是777-077=700

   

   就是下面这种效果

200811041225786914369.jpg

   


   最后一项,意思在建立一个用户的时候也建立相应的组。

200811041225787725208.jpg

   记住我们刚才讲的是login.defs这个文件的内容:新建用户的配置文件

200811041225787836363.jpg

#################################################################

本文出自 “王乾De技术Blog[爱生活..” 博客,请务必保留此出处http://redking.blog.51cto.com/27212/108793