鸟哥linux私房菜 基础篇 笔记3

绝对路径与相对路径:

  • 绝对路径:路径的写法『一定由根目录 / 写起』,例如: /usr/share/doc 这个目录。
  • 相对路径:路径的写法『不是由 / 写起』,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: 『cd ../man』这就是相对路径的写法啦!
  • 常用的目录『符号』代表的意义:
    •  
      .     代表此层目录 
      ..    代表上层目录 
      ~     代表自己的家目录 
      ~user 代表到 user 这个人的家目录
        

  • 目录与路径的几个常用的指令:
    • cd     变换目录
    • pwd    显示目前的目录
    • mkdir 建立一个新目录
    • rmdir 删除一个里面是空的空目录

  • mkdir
    语法
    [root @test /root ]# mkdir [-mp] [目录名称] 
    参数说明: 
    -m :设定档案的权限喔!直接设定,不需要看 umask 这个内容的脸色! 
    -p :帮助你直接将上面的目录递归建立起来! 
    范例: 
    [root @test /root]# cd tmp 
    [root @test /tmp]# mkdir test<==建立名称为 test 的目录 
    [root @test /tmp]# mkdir -p test1/test2/test3/test4 <==直接建立 test2...等上层目录 
    [root @test /tmp]# mkdir -m 711 testqq  <==建立权限为 711 的目录! 
    [root @test /tmp]# ll test* 
    drwxrwxr-x    2 test    test        4096 Feb  6 20:47 test/ 
    drwxrwxr-x    3 test    test        4096 Feb  6 20:48 test1/ 
    drwx--x--x    2 test    test        4096 Feb  6 20:48 testqq/

  • rmdir
    语法
    [root @test /root ]# rmdir [-p] [目录名称] 
    参数说明: 
    -p :将上层的目录也删除吧! 
    范例: 
    [root @test /root]# rmdir test<==删除名称为 test 的目录 
    [root @test tmp]# ll 
    drwxrwxr-x    3 test    test        4096 Feb  6 20:48 test1/ 
    [root @test tmp]# rmdir test1 
    rmdir: `test1': Directory not empty 
    [root @test tmp]# rmdir -p test1/test2/test3/test4 
    [root @test tmp]$ ll
    说明 
    如果想要建立删除旧有的目录时,就使用 rmdir 吧!例如将刚刚建立的 test 杀掉,使用 rmdir test 即可!请注意呦!目录需要一层一层的删除才行!而且被删除的目录里面必定不能还有其它的目录或档案!那如果要将所有目录下的东西都杀掉呢?!这个时候就必须使用 rm -rf test 啰!不过,还是使用 rmdir 比较不危险!不过,你也可以尝试以 -p 的参数加入,来删除上层的目录喔! 

  • 环境变量 PATH
  • 下达 echo $PATH , echo 有『显示、印出』的意思,而 PATH 前面加的 $ 表示后面接的是变量,所以即会显示出目前的 PATH 了! 
     
    [root@test root]# echo $PATH 
    /sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin

增加环境变量:

  • PATH=”$PATH”:/root



档案与目录管理:

档案与目录的管理上,不外乎『显示属性』、『拷贝』、『删除档案』及『移动档案或目录』等等


ls 显示文件名称、属性等 
cp 拷贝档案或目录 
rm 删除档案或目录 
mv 移动档案或目录 


  • cp
    语法
    [root @test /root ]# cp [-drsu] [来源档] [目的档] 
    参数说明: 
    -d     :在进行 copy 的时候,如果是 copy 到 link 档案,若不加任何参数,则预设情况中会将 link 到的源文件 
           copy 到目的地,若加 -d 时,则 link 档案可原封不动的将 link 这个快捷方式其拷贝到目的地! 
    -r     :可以进行目录的 copy 呦! 
    -s          :做成连结档,而不 copy 之意!与 ln 指令相同功能! 
    -u, --update:如果来源档比较新,或者是没有目的档,那么才会进行 copy 的动作!可用于备份的动作中! 
    范例: 
    [root @test /root]# cp    .bashrc bashrc      <==将 .bashrc 拷贝成 bashrc 这个档案! 
    [root @test /root]# cp -r /bin /tmp/bin        <==这个功能就好玩啦!这是用来 copy 整个目录的参数! 
    [root @test /root]# cp -s .bashrc bashrc         <==将 .bashrc 建立一个连结档,档名为 bashrc 
    [root @test /root]# cp -u /home/.bashrc .bashrc  <==先检查 /home/.bashrc 是否与 .bashrc 不同,如果不同的话就开始 copy 一份!如果相同则不做任何动作!
    说明 
    这个指令会常用到的呦!因为我们得常常需要 copy 资料呀!所以需要了解一下喔!如果你有些很大档案的需要备份,偏偏这个档案的更新率很低,那么每次备份都需要在 copy 一份吗?看来是不需要了!你可以使用『cp -u 来源档 目的档』来备份呦!如此一来,当档案被改变过后,才会进行 copy 的动作! 
      

  • rm
    语法
    [root @test /root ]# rm [-fir] [檔名] 
    参数说明: 
    -i     :提供使用者确认(这是默认值) 
    -r     :循环,就是一直杀掉,直到没有东西为止的意思 
    -f     :force ,就是强力杀掉啦! 
    范例: 
    [root @test /root]# cp .bashrc bashrc<==建立一个新档案, bashrc 
    [root @test /root]# rm bashrc           <==会显示如下的提示: 
    rm: remove `bashrc'? 
    [root @test /root]# mkdir testing 
    [root @test /root]# cp .bashrc testing 
    [root @test /root]# rmdir testing 
    rmdir: `testing': Directory not empty   <==由于 testing 里面有 .bashrc ,所以砍不掉! 
    [root @test /root]# rm -rf testing      <==持续删除该目录下的所有档案与目录
    说明 
    这是移除的指令,相当于 dos 下的 del 指令!这里要注意的是,通常在 Linux 系统下,为了怕档案被误杀,所以都已经有 -i 这个参数, -i 是指每个档案被杀掉之前都会让使用者确认一次,以预防误杀档案!而如果要连目录下的东西都一起杀掉的话,例如子目录里面还有子目录时,那就要使用 -rf 这个参数了!不过,使用『 rm -rf 』这个指令之前,请千万注意了,因为,该目录或档案『肯定』会被 root 杀掉!因为系统不会再次询问你是否要砍掉呦! 所以那是个超级严重的指令下达呦!得特别注意!不过,如果你确定该目录不要了,那么使用 rm -rf 来循环杀掉是不错的方式! 


  • mv
    语法
    [root @test /root ]# mv [-u] [来源档] [目的档] 
    参数说明: 
    -u   :同样的,为 update 的简写,当来源档比目的档还新的时后才会动作! 
    范例: 
    [root @test /root]# cp .bashrc bashrc 
    [root @test /root]# mv bashrc bashrc.old 
    [root @test /root]# mv bashrc bashrc2 /tmp<==将 bashrc 与 bashrc2 移动到 /tmp 这个目录下!请注意,最后一个才是最终的目标,其它的都是 SOURCE
    说明 
    这是搬移的意思!当你要移动档案或目录的时后,呵呵!这个指令就很重要啦!同样的,你也可以使用 -u ( update )才测试新旧档案,看看是否需要搬移啰!另外一个用途就是『变更档名!』,我们可以很轻易的使用 mv 来变更一的档案的档名呢! 
      

  • basename    就是取最后一个文件名或者目录名
    语法
    [root @test /root ]# basename [目录] 
    参数说明: 
    范例: 
    [root @test /root]# basename /usr/local/etc 
    etc 
    这个指令会将后面的[目录]仅撷取出最后面的那个目录或档案, 
    以上面的例子来看, /usr/local/etc 不论 etc 是目录或档案, 
    他都会被撷取出来,因为他是最后一个出现的咚咚!
    说明 
    这个指令颇有点意思~他可以将一个目录或档案的最后一个咚咚秀出来!所以,未来如果你有要使用变量,并且取出最后一个数据(不论是档案还是目录),那么使用这个玩意儿就对啦! ^_^ 


  • dirname    与basename相反,取最后一个文件名或者目录名的前面部分
    语法
    [root @test /root ]# dirname [目录] 
    参数说明: 
    范例: 
    [root @test /root]# dirname /usr/local/etc 
    /usr/local 
    恰恰与 basename 相反,他仅是秀出来前面的『目录』部分喔!
    说明 
    这个指令恰恰与 basename 相反的啦!呵呵!很好玩吧!这部份也最常用在我们第三部分要讲的 Shell 的学习中喔!用最多的地方应该是 scripts 啦!用这两个宝贝蛋来撷取部分数据的内容!有用的很!
      




观看档案内容:cat, tac, more, less, head, tail, nl

最常使用的显示档案内容的指令可以说是 cat 与 more 及 less 了

如果我们要查看一个很大型的档案(好几百MB时),但是我们只需要后端的几行字而已,那么该如何是好?呵呵!用 tail 呀,此外, tac 这个指令也可以达到!


cat  由第一行开始显示档案内容 
tac  从最后一行开始显示,可以看出 tac 是 cat 的倒着写! 
more 一页一页的显示档案内容 
less 与 more 类似,但是比 more 更好的是,他可以往前翻页! 
head 只看头几行 
tail 只看尾巴几行 
nl   显示的时候,顺道输出 行号! 
od   以二进制的方式读取档案内容!


  • more
    语法
    [root @test /root ]# more [檔名] 
    参数说明: 
    范例: 
    [root @test /root]# more ~/.bashrc  <==一页一页的显示档案内容 
    [root @test /]# ls -al | more  <==一页一页的将 ls 的内容显示出来
    说明 
    more 真是个很有用的指令!我好喜欢呦!当你的档案太大的时后,那么使用 cat 将没有办法看清楚!这个时候你可以使用 more 来做动作!more 也可以用来做为管线的同时执行之用!例如你在执行 find 这个寻找的指令时,可以同时使用 |more ,则搜寻结果可以一页一页的列出呦!关于管线( pipe )的用法我们在 bash shell 的地方再来谈!


  • less
    语法
    [root @test /root ]# less [檔名]  
    参数说明:  
    范例:  
    [root @test /root]# less ~/.bashrc 
    说明 
    less 的用法比起 more 又更加的有弹性,怎么说呢?在 more 的时候,我们并没有办法向前面翻,只能往后面看,但若使用了 less 时,呵呵!就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件,您瞧,是不是更容易使用来观看一个档案的内容了呢!? 
      
    more 与 less 的用途与用法真的是很广啦!首先,你可以在 more 与 less 的画面中进行『搜寻』的工作!如何进行呢?我们以 less 来说明好了,如果你想要知道 /etc/man.config 这个档案里面有没有一个叫做 GER 的大写字眼,那么可以: 








连结档的介绍

ln命令

如果直接用ln passwd passwd-hard 是硬链接

如果使用ln -s passwd passwd-hard 是符号链接


硬链接不能跨分区 符号链接可以




档案与目录权限

由于 Linux 还可以设定其它的系统安全属性,使用 chattr 来设定,而以 lsattr 来查看,最重要的属性就是可以设定其不可修改的特性!让连档案的拥有者都不能进行修改!这个属性可是相当重要的,尤其是在安全机制上面( security )!

chown 改变档案的拥有人 
chgrp 改变档案的所属群组 
chmod 改变档案的可写、可读、可执行等属性 
umask 改变预设的建立档案或目录时的属性 
chattr 改变档案的特殊属性 
lsattr 显示档案的特殊属性!


  • chown
    语法
    [root @test /root ]# chown [-R] user:group [目录名称] 
    参数说明: 
    -R    :循环的将该目录下的所有档案都改成 user 与 group 的名称! 
    范例: 
    [root @test /root]# mkdir /home/test/testing  <==在 /home/test 这个家目录中建立一个名为 testint 的子目录 
    [root @test /root]# cp * /home/test/testing 
    [root @test /root]# chown test /home/test/testing 
    [root @test /root]# chown -R test:test /home/test/testing<==将该目录下的所有目录或档案均变为 test 拥有

  • 说明  
    前一个章节才刚讲完,应该不会就这样忘记了吧?!由于 chown 的使用范围较广,所以这里再次的给他复习一下 chown 就好,  chgrp 请回前一章内容观看呦! 
      
    记得档案有『 拥有人』及『 拥有群组』吧,这个 chown 就是在改变拥有者的指令。刚接触 Linux 的朋友最容易犯的一个错误在哪里呢?就是以 root 的身份 copy 一个档案(或路径)给一般使用者(假设为 test )时,忘记将该档案的所有人改成 test 了!由于复制者是 root 所以该档案也会是 root 所有!那么 test 当然也就不能修改该档案了! 
      
    在上面的例子中,『  chown test /home/test/testing 』这个指令只会将该目录变成 test 的,但是 group 仍然是 root 的呦!所以你可以使用『 chown test:test /home/test/testing 』,连使用者群组都给他改变一下啰!不过需要注意的是,这两个指令都只改变了『目录』 的所有权而已!那么在这个目录下的东西也要改变的话,该如何?!呵呵,就使用 -R 这个参数即可! 
  • chmod
    语法
    [root @test /root ]# chmod [-R] [parameter] [目录名称] 
    参数说明: 
    -R   :循环的一直将该目录的档案均改变之! 
    范例: 
    [root @test /root]# chmod 777 .bashrc 

  • umask
    OK!那么现在我们知道如何建立或者是改变一个目录或档案的属性了,不过,您知道当你建立一个新的档案或目录时,他的预设属性会是什么吗?呵呵!那就与 umask 有关了!那么 umask 是在搞什么呢?基本上, umask 就是指定『目前使用者在建立档案或目录时候的属性默认值』,那么如何得知或设定 umask 呢?他的指定条件以底下的方式来指定: 
    语法
    [root @test root]# umask 
    0022 
    [root@vbird test]# umask 002   <==后面接 3 个数字! 
    [root@vbird test]# umask 
    0002
    说明 
    查看 umask 数值为直接输入 umask 即可,而设定呢?没错!就是 umask 之后接三个数字!那么如何来指定呢?主要还是跟 Linux 的档案属性(那九个属性, r, w, x )有关的,而且是以分数的那一个关系为例的,而有底下的规则为辅: 
     
    • 若使用者建立为『档案』则预设『没有可执行 ( x ) 项目』,亦即只有 rw 这两个项目,也就是最大为 666 分
      --rw-rw-rw-
    • 若使用者建立为『目录』,则由于 x 与是否可以进入此目录有关,因此预设为所有权限均开放,亦即为 777 分
      drwxrwxrwx
      
    那么 umask 指定的是『该默认值需要减掉的权限!』因为 r、w、x 分别是 4、2、1 分,所以啰!也就是说,当要拿掉能写的权限,就是输入 2 分,而如果要拿掉能读的权限,也就是 4 分,那么要拿掉读与写的权限,也就是 6 分,而要拿掉执行与写入的权限,也就是 3 分,这样了解吗?请问您, 5 分是什么?呵呵!就是读与执行的权限啦!如果以上面的例子来说明的话,因为 umask 为 002 ,所以 user, group 并没有被拿掉属性,不过 others 的属性被拿掉了 2 ( 也就是 w 这个属性 ),那么由于当使用者: 
     
    • 建立档案时:(-rw-rw-rw-) – (--------w-) ==> -rw-rw-r--
    • 建立目录时:(drwxrwxrwx) – (--------w-) ==> drwxrwxr-x
      
    不相信吗?你只要使用 touch test 然后看看这个 test 的档案属性,就可以知道了!那么如何看你这个使用者目前的 umask 呢?直接下达 umask 即可!实作看看先: 
     
    [root@vbird test]# umask 
    0002 
    [root@vbird test]# touch test1 
    [root@vbird test]# mkdir test2 
    [root@vbird test]# ls -l 
    -rw-rw-r--    1 root     root            0 Oct 22 00:00 test1 
    drwxrwxr-x    2 root     root         4096 Oct 22 00:00 test2/ 
    发现了什么?呵呵! Test1 的属性为 666-002 = 664 !正确吗?是的!正确! 
    而 test2 这个目录呢?就是 777-002 = 775 !也正确!

    [root@vbird test]# umask 003 
    [root@vbird test]# touch test3 
    [root@vbird test]# mkdir test4 
    [root@vbird test]# ll 
    -rw-rw-r--    1 root     root            0 Oct 22 00:03 test3 
    drwxrwxr--    2 root     root         4096 Oct 22 00:03 test4/ 
    嘿!属性又跟刚刚的不一样啰!仔细推敲一下为什么呦!test3 666-003 =663,这是怎么一回事?! 663 应该是 -rw-rw--wx 才对啊!怎么会是上面的属性!呵呵!这里就要特别的给他强调了!『尽量不要以数字相加减啦!』容易造成类似上面的问题!你应该要这样想(-rw-rw-rw-) - (--------wx)=-rw-rw-r--这样就对啦!了解了吗?不要用十进制的数字喔!够能力的话,用二进制来算,不晓得的话,用 rwx 来算喔! ^_^

      
    由上面的例子您应该很轻易的就可以发现 umask 的用途!而这个 umask 可以在 /etc/bashrc 里面进行修改喔!预设的情况之下, root 的 umask 为 022 而一般使用者则为 002 ,因为可写的权限蛮严重的,因此预设都会拿掉这个权限!此外,因为 root 比较重要!所以为了安全的需求,其同群组的写入属性就被拿掉了!这东西对于安全性也有一定程度的贡献呦! 
  • chattr
    语法
    [root @test /root ]# chattr [+-=][ASacdistu] [档案或目录名称] 
    参数说明: 
    +-= :分别为 [+ 增加] [- 减少] [= 设定] 属性的意思 
    A  :当设定了 A 这个属性时,这个档案(或目录)的存取时间 atime (access) 将不可被修改, 
        可避免例如手提式计算机容易有磁盘 I/O 错误的情况发生! 
    S  :这个功能有点类似 sync 的功能!就是会将数据同步写入磁盘当中!可以有效的避免数据流失! 
    a  :当设定 a 之后,这个档案将只能增加数据,而不能删除,只有 root 才能设定这个属性。 
    c  :这个属性设定之后,将会自动的将此档案『压缩』,在读取的时候将会自动解压缩出来! 
        但是在储存的时候,将会先进行压缩之后再储存(看来对于大档案似乎蛮有用的!) 
    d  :当 dump (备份)程序被执行的时候,设定 d 属性将可使该档案(或目录)具有 dump 功效! 
    i  :这个 i 可就很厉害了!他可以让一个档案『不能被删除、改名、设定连结也无法写入或新增数据!』 
        对于系统安全性有相当大的帮助! 
    j  :当使用 ext3 这个档案系统格式时,设定 j 属性将会使档案在写入时先记录在 journal 中! 
        但是当 filesystem 设定参数为 data=journalled 时,由于已经设定了日志了,所以这个属性无效! 
    s  :当档案设定了 s 参数时,他将会被完全的移除出这个硬盘空间。 
    u  :与 s 相反的,当使用 u 来设定档案时,则数据内容其实还存在磁盘中,可以使用来 undeletion. 
    范例: 
    [root @test /root]# chattr +i /etc/shadow<==呵呵!如此则无法更动这个档案啰! 
    [root @test /root]# chattr -i /etc/shadow <==解除该属性!
    说明 
    这这个指令是重要的,尤其是在系统的安全性上面!由于这些属性是隐藏的性质,所以需要以 lsattr 才能看到该属性呦!其中,个人认为最重要的当属 +i 这个属性了,因为他可以让一个档案无法被更动,对于需要强烈的系统安全的人来说,真是相当的重要的!里头还有相当多的属性是需要 root 才能设定的呢!此外,如果是 log file 这种的登录档,就更需要 +a 这个可以增加,但不会被杀掉的参数了!怎样?很棒吧!未来提到登录档的认知时,我们再来聊一聊如何设定他吧!
  • lsattr
    语法
    [root @test /root ]# lsattr [-aR] 
    参数说明: 
    -a :将隐藏文件的属性也秀出来; 
    -R :连同子目录的数据也一并列出来! 
    范例: 
    [root @test /root]# chattr +i .bash_logout 
    [root @test /root]# lsattr -a  
    -------------- ./. 
    -------------- ./.. 
    ---i---------- ./.bash_logout 
    -------------- ./.bash_profile 
    -------------- ./.bashrc 
    -------------- ./.emacs 
    -------------- ./.screenrc
    说明 
    这两个指令在使用上必须要特别小心,例如:某天你心情好,突然将 /etc/shadow 这个重要的密码记录档案给他设定成为具有 i 的属性,那么过了若干天之后,你突然要新增使用者,却一直无法新增!别怀疑,赶快去将 i 的属性拿掉吧!


搜寻档案或目录

档案的搜寻可就厉害了!因为我们常常需要知道那个档案放在哪里,所以来谈一谈怎么搜寻吧!在 Linux 底下也有相当优异的搜寻系统呦!通常 find 不很常用的!因为速度慢之外,也很操硬盘!通常我们都是先使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻呦!为什么呢?因为 whereis 与 locate 是利用数据库来搜寻数据,所以相当的快速,而且并没有实际的搜寻硬盘,比较省时间啦!

which   查看可执行档案的位置 
whereis 查看档案的位置 
locate  配合数据库查看档案位置 
find    实际搜寻硬盘去查询文件名称

  • which
    语法
    [root @test /root ]# which  [文件名称] 
    参数说明: 
    范例: 
    [root @test /root]# which passwd 
    /usr/bin/passwd
    说明 
    which 的基本功能是『藉由 PATH 这个环境变量的内容,去该路径内寻找可执行文件』,所以基本的功能在于『寻找执行档』啰! 
      

  • whereis
    语法
    [root @test /root ]# whereis [-bmsu] [目录名称] 
    参数说明: 
    -b    :只找 binary 的档案 
    -m    :只找在说明文件 manual 路径下的档案 
    -s    :只找 source 来源档案 
    -u    :没有说明档的档案! 
    范例: 
    [root @test /root]# whereis passwd 
    passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.bz2 
    将 passwd 相关字眼的档案或目录都列出来!

    [root @test /root]# whereis -b passwd 
    passwd: /usr/bin/passwd /etc/passwd 
    仅列出binary 档案!

    [root @test /root]# whereis -m passwd 
    passwd: /usr/share/man/man1/passwd.1.bz2 
    仅搜寻 man page 所在的目录!

    说明 
    如果使用 find 太麻烦,而且时间花用的很大!(因为如果你的硬盘比较老旧的话,嘿嘿!有的等的!)这个时候 whereis 就相当的好用了!另外, whereis 可以加入参数来找寻相关的资料,例如如果你是要找可执行档( binary )那么加上 -b 就可以啦!例如上面的范例针对 passwd 这支程序来说明!如果不加任何参数的话,那么就将所有的数据列出来啰!那么 whereis 到底是使用什么咚咚呢?为何搜寻的速度会比 find 快这么多?!其实那也没有什么!这是因为 Linux 系统会将系统内的所有档案都记录在一个数据库档案里面,而当使用 whereis 或者是底下要说的 locate 时,都会以此数据库档案的内容为准,因此,有的时后你还会发现使用这两个执行档时,会找到已经被杀掉的档案!这就是因为他是一个『数据库』档案呀!另外,基本上 Linux 每天会针对 Linux 主机进行 updatedb (就是那一个数据库档案啰!)的动作,你可以在 /etc/cron.weekly/slocate.cron 这个档案找到相关的机制呦!当然,也可以直接使用 /usr/bin/updatedb 来更新数据库档案呢! 
      

  • locate
    语法
    [root @test /root ]# locate [目录名称] 
    参数说明: 
    范例: 
    [root @test /root]# locate root 
    ……一大堆跟 root 有关字眼的档案都出来了 @_@

    [root @test /root]# updatedb        <==立刻更新数据库

    说明 
    locate 的使用方式就更简单了!直接键入你要找的档名即可!但是,这个东西还是有使用上的限制呦!为什么呢?您会发现使用 locate 来寻找数据的时候特别的快,这是因为 locate 寻找的数据是由『已建立的数据库 /var/lib/slocate』里面的数据所搜寻到的,所以不用直接在去硬盘当中存取数据,呵呵!当然是很快速啰!那么有什么限制呢?就是因为他是经由数据库来搜寻的,而数据库的建立预设是在每个礼拜执行一次,所以当您新建立起来的档案,却还在数据库更新之前搜寻该档案,那么 locate 会告诉您『找不到!』呵呵!因为必须要更新数据库呀! 
      
    那么我到底要建立哪些数据库呢?是否全部都要建立?似乎不需要,这个时候,你可以自己选择需要建立档案数据库的目录呢!在 /etc/updatedb.conf 这个内即可设定了! 
     
    [root @test root]# more /etc/updatedb.conf 
    ## Linux-Mandrake configuration. 
    # 由何处开始查询数据,当然是由根目录啦!所以填入 / 即可 
    FROM="/"

    # 哪些目录不想要建立档案搜寻数据,呵呵!就是那些不要的数据嘛! 
    # 忘记的话,记得回上一章去看看内容,就知道为何如此设定了! 
    PRUNEPATHS="/proc,/tmp,/var/tmp,/usr/tmp,/net,/afs,/mnt"

    # 安全等级 
    #   0 代表关闭安全检验,速度上面较快速,但较不安全; 
    #   1 启动安全简易,这是系统的默认值; 
    SECURITY="1"

    # 查询的时候是否要由屏幕输出?当然不要,否则多麻烦? 
    VERBOSE="NO"

    # 数据库所在处!这是默认值,不要随意移动,否则会找不到! 
    DATABASE="/var/lib/slocate/slocate.db"

    # 哪些档案系统我们也不搜寻建立?就是光盘啦、非 Linux 的档案格式啦, 
    # 我们都不要进行搜寻信息的建立啦! 
    PRUNEFS="nfs,smbfs,ncpfs,proc,devpts,supermount,vfat,iso9660,udf,usbdevfs,devfs"

      

  • find
    语法
    [root @test /root ]# find [路径] [参数] 
    参数说明: 
    1. 时间: 
       -atime n    :在 n*24 小时内被 access 即存取过的档案列出来! 
       -ctime n    :在 n*24 小时内被 changed 即改变、新增的档案或目录印出 
       -mtime n    :在 n*24 小时内被 modified 即修改过的档案印出 
       -newer file :比 file 还要新的档案就列出来! 
    2. 使用名称: 
       -gid n      :寻找 群组 ID 为 n 的档案 
       -group name :寻找群组名称为 name 的档案 
       -uid n      :寻找拥有者 ID 为 n 的档案 
       -user name  :寻找使用者名称为 name 的档案 
       -name file  :寻找档名为 file 的文件名称(可以使用万用字符) 
       -type type  :寻找档案属性为 type 的档案,type 包含了 b, c, d, p, l, s, 
                    这些与前一章的属性相同!例如 l 为 Link 而 d 为路径之意! 
    范例: 
    [root @test /root]# find / -name testing            <==寻找档名为 testing  
    [root @test /root]# find / -name 'test*'       <==寻找档名包含 test 的! 
    [root @test /root]# find . -ctime 1                 <==寻找目前目录下一天内新增的目录或档案 
    [root @test /root]# find /home/test -newer .bashrc  <==寻找 /home/test 目录下比 .bashrc 还要新的档案 
    [root @test /root]# find /home -user test       <==寻找 /home 底下拥有者为 test 的档案 
    [root @test /root]# find /dev -type b               <==寻找 /dev 这个目录下,档案属性为 b 的档案
    说明 
    如果你要寻找一个档案的话,那么使用 find 会是一个不错的主意!他可以根据不同的参数来给予档案的搜寻功能!例如你要寻找一个档名为 httpd.conf 的档案,你知道他应该是在 /etc 底下,那么就可以使用『 find /etc -name httpd.conf 』噜!那如果你记得有一个档案档名包含了 httpd ,但是不知道全名怎办?!呵呵,就用万用字符 * 吧,如上以:『 find /etc -name '*httpd*' 』就可将档名含有 httpd 的档案都列出来啰!不过,由于 find 在寻找数据的时后相当的耗硬盘!所以没事情不要使用 find 啦!有更棒的指令可以取代呦!那就是 whereis 与 locate 啰!!




SetUID, SetGID, Sticky bit 与 file 指令


  • SUID 与 SGID:
    其实,说到这里之前,应该先说明一下 UID (user ID)与 GID (Groupt ID)的!基本上, Linux 认得的账号只是一堆数字而已!而由于我们每个档案中同时含有『使用者』与『使用者群组』的属性,因此,就有所谓的 UID 与 GID 啰! UID 代表我们的使用者『代号』而 GID 则是群组的『代号』。你可以使用『 more /etc/passwd 』这个指令来看一下你的系统当中的所有账号,然后你会注意到每行的第三、四个字段(以 : 分隔)为数字,那个就是 UID 与 GID 了,您更会注意到的是, root 的 UID 与 GID 都是 0 !因此,当你建立了一个账号,而你将该账号的 UID 与 GID 都改为零,呵呵!那个账号的使用者就具有 root 的身份啰! 
      
    那么什么是 SUID 与 SGID 呢?!在说明之前我们先来以一般身份使用者 ( 还记得安装的时候曾经增加一个 test 账号的一般身份使用者吗?对啦!用他!然后呢?直接在键盘上按下 [Alt] + [Ctrl] + [F2] 到第二个终端机呀!) test 的身份登入,再来看一个档案的内容: 
     
    [test@test test]$ ls -l /usr/bin/passwd  
    -r-s--x--x    1 root     root        13476 Aug  7  2001 /usr/bin/passwd 
      
    看到了 /usr/bin/passwd 档案的前面属性了吗?怎么会有 s 的属性在原本的 x 呀!?那个就是所谓的 SUID 了!如果是『 -r-xr-s--x 』时,那么 s 就成为所谓的 SGID 了! 
     
    • 当一个档案具有 SUID 的时候,同时 other 的群组具有可执行的权限,那么当 others 群组执行该程序的时候, other 将拥有该档案的 owner 的权限! 』。
      
    [test@test test]$ ls -l /usr/bin/passwd /etc/shadow  
    -r-s--x--x    1 root     root        13476 Aug  7  2001 /usr/bin/passwd  
    -rw-------    1 root     root         2423 Jun 25 14:29 /etc/shadow 
      
    我们以账号的密码文件来说明好了!注意上面的范例啰!可以看到的是, /etc/shadow 的权限是『只有 root 才能存取』呦!那么你会不会觉得很奇怪?明明我的一般使用者可以自己修改密码呀!对不对?那么修改密码一定跟 /etc/shadow 这个档案有关,那么怎么回事呀!?使用者是如何修改 /etc/shadow 这个档案的呢?嗯!没错!就是使用 SUID 的功能啦!上面的例子说明了, /usr/bin/passwd 这个档案具有 SUID 的属性,那么当使用者使用 /usr/bin/passwd 这个执行档时,在执行 pass word 修改的期间就具有 /usr/bin/passwd 这个档案的拥有者 root 的所属权限啰!所以,所以当一般使用者执行 passwd 的时候,将具有 root 的权限,所以他们也可以更改 /etc/shadow 的内容啰!那么由此也可以知道,由于这个 Set UID ( SUID ) 的主要功能是在『某个档案执行的期间具有档案拥有者的权限』,因此, s 就是替代上面提到的 x 这个可执行的位置啰!那万一该档案并没有 x 的属性呢?哈哈!问的好!那么该档案的属性就会将小写的 s 变成大写的 S 啦! ( 这里即使暂时不了解也没有关系,等到过一阵子再回来看一看,你就会了解啦! ) 
      
    不过,由此也知道 SUID 与 SGID 的问题所在,没错!就是太不安全了!如果你有一个档案具有 root 的权限,那么当开启了 SUID 的时候,嘿嘿!够你瞧的了!!因此上,在变更一个档案成为具有 SUID 或 SGID 的情况时,必须要特别小心呢!知道乎!? 
     
  • Sticky bit:
    OK!接着下来,我们要来看一下,既然有 SUID 与 SGID ,那么为什么没有在最末位出现 s 取代 x 呢?呵呵!这当然没有必要啦!因为那是属于 others 的权限,你的档案如果是任何人皆可执行的话,那么本来他们就具有权限啦!干嘛还要设定 s 的属性!?不过,这里却真的有另一个属性出现了,那就是 Sticky bit 的属性 ( t ) !这个属性的最大用处在于『具有 sticky bit 属性的该”目录”下的档案,其档案或目录只有档案拥有者及 root 才有权力删除!』这样是否可以了解了呢?嘿嘿!没错!在我们系统里面本来就预设有一个啦!那就是 /tmp 这个目录! 
      
    [test@test test]$ ls -l /  
    drwxrwxrwt    2 root     root         4096 Jul 18 13:08 tmp 
      
    如何,发现了吧!虽然该目录具有所有人皆可擦写的权限,但是确有一个 t 出现了,那就是所谓的 sticky bit 啰!在该目录里面虽然你可以建立与修改任何档案,但是却仅能删除自己建立的档案呢!除非你是 root !你可以这样试试看啰: 
     
    • 1. 以 root 登入系统,并且进入 /tmp 当中; 
      2. touch test,并且更改 test 权限成为 777 ; 
      3. 以一般使用者登入,并进入 /tmp; 
      4. 尝试删除 test 这个档案!
      
    如何!?发现了吧!! 
     
  • SUID, SGID, Sticky bit 的设定方法:
    前面介绍过 SUID 与 SGID 的功能,那么如何开启档案使成为具有 SUID 与 SGID 的权限呢?!这就需要刚刚的数字更改权限的方法了!现在你应该已经知道数字型态个更改权限方式为『三个数字』的组合,那么如果在这三个数字之前再加上一个数字的话,那最前的面数字就代表这几个属性了! ( 注:通常我们使用 chmod xyz filename 的方式来设定 filename 的属性时,则是假设没有 SUID, SGID 及 Sticky bit 啦! ) 
     
    • 4 为 SUID
    • 2 为 SGID
    • 1 为 Sticky bit
      
    假设要将一个档案属性改为『-rwsr-xr-x』时,由于 s 在使用者权限中,所以是 SUID ,因此,在原先的 755 之前还要加上 4 ,也就是:『 chmod 4755 filename 』来设定!此外,还有大 S 与大 T 的产生喔!参考底下的范例啦! 
     
    [root@test tmp]# touch test 
    [root@test tmp]# ll 
    total 0 
    -rw-r--r--    1 root     root            0 Feb  6 23:08 test 
    [root@test tmp]# chmod 4755 test 
    [root@vbird tmp]# ll 
    total 0 
    -rwsr-xr-x    1 root     root            0 Feb  6 23:08 test* 
    [root@test tmp]# chmod 6755 test 
    [root@test tmp]# ll 
    total 0 
    -rwsr-sr-x    1 root     root            0 Feb  6 23:08 test* 
    [root@test tmp]# chmod 1755 test 
    [root@test tmp]# ll 
    total 0 
    -rwxr-xr-t    1 root     root            0 Feb  6 23:08 test* 
    上面的三个例子应该都很好说明啊!就是直接将 x 以 s 或者是 t 来取代就是了!也就是分别为 SUID, SGID 及 sticky bit 的设定方法啦!

    [root@test tmp]# chmod 7666 test 
    [root@test tmp]# ll 
    total 0 
    -rwSrwSrwT    1 root     root            0 Feb  6 23:08 test 
    这个例子就要特别小心啦!怎么会出现大写的 S 与 T 呢?不都是小写的吗?因为 s 与 t 都是取代 x 这个参数的,但是你有没有发现阿,我们是下达 7666 喔!也就是说, user, group 以及 others 都没有 x 这个可执行的标志 ( 因为 666 嘛! ),所以,这个 S, T 代表的就是『空的』啦!怎么说? SUID 是表示『该档案在执行的时候,具有档案拥有者的权限』,但是档案拥有者都无法执行了,哪里来的权限给其它人使用?当然就是空的啦! ^_^

     
  • file
    语法
    [root @test /root ]# file [檔名]  
    参数说明:  
    范例:  
    [root @test /root]# file ~/.bashrc  
    /root/.bashrc: ASCII text  <==表示这个档案是 ASCII 纯文字文件 

    [root @test /root]# file /usr/bin/passwd 
    /usr/bin/passwd: setuid ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), stripped 
    嘿!还可以看到是否具有 SUID 的权限呢!

    说明 
    file 这个指令也蛮好用的,可以用来查看这个档案的类型,例如 ASCII 格式档,或者是 binary 的档案等等,还可以用来观看档案是否被加入 SUID 等等的信息!并且,也同时提供了是否有使用动态函式库的信息!相当的好用!












  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值