目录与路径:
- cd 变换目录
- pwd 显示当前目录
- mkdir 建立一个新目录
- rmdir 删除一个里面是空的空目录
cd 与 pwd
这两个指令主要是在『变换目前目录』与『显示目前所在目录』的工作,底下说一说他们的用途与语法吧!
- cd
语法:
[root @test /root ]# cd [相对路径或绝对路径] |
说明:
cd 是 change directory 的缩写,这是用来变换工作路径的指令。注意,路径与 cd 指令之间存在一个空格!一登入 Linux 系统后,root 会在 root 的家目录,亦即 /root 下,至于使用者会在预设的 /home/username 底下,例如鸟哥的 ID 为 vbird ,则以 vbird 的身份登入后,会到 /home/vbird 这个路径下。OK!那回到上一层可以用『 cd .. 』而到相对路径可到『 cd ../bird』,至于绝对路径则是 cd /usr/sbin !注意喔,在前面的提示字符会改变路径名称!此外,家目录还有一个代码,那就是『 ~ 』符号!例如上面的例子可以发现,使用『 cd ~ 』可以回到个人的家目录里头去呢! 此外,如果你的 Linux 主机当中有个 testing 的账号,你要到他的家目录去,可以下达『 cd ~testing』立刻去到 testing 的家目录啰!
- pwd
语法:
[root @test /root ]# pwd |
说明:
pwd 是 print working directory 的缩写,也就是显示目前所在目录的指令,例如在上个表格最后的目录是 /home/test 这个目录,但是提示字符仅显示 test ,如果你想要知道目前所在的目录,可以输入 pwd 即可:
此外,由于很多的套件所使用的目录名称都相同,例如 /usr/local/etc 还有 /etc ,但是通常 Linux 仅列出最后面那一个目录而已,这个时候你就可以使用 pwd 来知道你的所在目录啰!免得搞错目录,结果……
mkdir 与 rmdir 管理目录
那么要如何建立删除目录呢?很简单呀!就用 mkdir 与 rmdir ,看出来了吗?没错啦!就是 make/remove directory 的缩写说!看要怎么用吧!
- mkdir
语法:
[root @test /root ]# mkdir [-mp] [目录名称] |
说明:
如果想要建立新的目录的话,那么就使用 mkdir 吧! 不过,请注意呦!在默认的情况下,你所需要的目录得一层一层的建立才行!例如:假如你要建立一个目录为 /home/bird/testing/test1,那么首先必须要有 /home 然后 /home/bird ,再来 /home/bird/testing 都必须要存在,才可以建立 test1 这个目录!假如没有 /home/bird/testing 时,就没有办法建立 test1 的目录啰!不过,现在有个更简单有效的方法啦!那就是加上 -p 这个参数喔!你可以直接下达:『 mkdir -p /home/bird/testing』则系统会自动的帮你将 /home, /home/bird, /home/bird/testing 依序的建立起目录!并且,如果该目录本来就已经存在时,系统也不会显示错误讯息喔!挺快乐的吧! ^_^
- rmdir
语法:
[root @test /root ]# rmdir [-p] [目录名称] |
说明:
如果想要建立删除旧有的目录时,就使用 rmdir 吧!例如将刚刚建立的 test 杀掉,使用 rmdir test 即可!请注意呦!目录需要一层一层的删除才行!而且被删除的目录里面必定不能还有其他的目录或档案!那如果要将所有目录下的东西都杀掉呢?!这个时候就必须使用 rm -rf test 啰!不过,还是使用 rmdir 比较不危险!不过,你也可以尝试以 -p 的参数加入,来删除上层的目录喔!
环境变量 PATH
在提过了绝对路径、相对路径与指令的下达方式之后,您应该会稍微注意到一件事情,那就是:『为什么我可以在 /root 底下执行 /bin/ls 这个档案呢?』对呀!为什么我可以直接执行 ls 就一定可以显示出一些讯息而不会说找不到该档案呢?这是因为环境变量 PATH 的帮助所致呀!当我们在执行一个指令的时候,系统会依照 PATH 的设定去每个 PATH 定义的路径下搜寻档案,先搜寻到的脚本文件案先被执行之!现在,请下达 echo $PATH , echo 有『显示、印出』的意思,而 PATH 前面加的 $ 表示后面接的是变量,所以即会显示出目前的 PATH 了!
[root@test root]# echo $PATH |
注意到了吗?对啦! /bin 在 PATH 的设定之中,所以自然就可以找的到 ls 啦!
- 如果你将 ls 移动到 /root 底下的话,然后你自己本身也在 /root 底下,但是当你执行 ls 的时候,他就是不理你?怎么办?这是因为 PATH 没有 /root 这个目录,而你又将 ls 移动到 /root 底下了,自然系统就找不到可执行文件了,因此就会告诉你, command not found !那么该怎么克服这种问题呢?有两个方法,其一:直接将 /root 的路径加入 PATH 当中!如何增加?可以使用:
PATH=”$PATH”:/root
这种方式来增加即可!另一种方式则是使用完整档名,亦即直接使用相对或绝对路径来执行,例如:
/root/ls
./ls
因为在同一个目录中,而我们又知道在同一个目录中的目录符号为『 . 』,因此,就以上面的 ./ls 来执行也可以!这种执行方式以后您应该会很常见到才对!
- 如果我有两个 ls 档案在不同的目录中,例如 /usr/local/bin/ls 底下与 /bin/ls 那么当我下达 ls 的时候,那个 ls 会被执行?那还用说,就找出 PATH 里面那个目录先被查询,则那个目录下的档案就会被先执行了!
- 咦!既然如此的话,那么为何不要在 PATH 里面加入 . 这个目录,如此一来的话,不就可以直接在所在目录执行档案了吗?因为 . 代表所在目录嘛!是这样没错!但是有没有想过,如果某天,某个怪怪的使用者在 /tmp 里面写了一个 ls 的档案,偏偏他是有害的档案,那么当你在 /tmp 底下执行 ls 时,怎么办?!没错,可能会『中标』,所以啰,为了安全起见,不建议将『 . 』加入 PATH 的搜寻当中!
档案与目录管理:
谈了谈目录与路径之后,再来讨论一下关于档案的一些基本管理吧!档案与目录的管理上,不外乎『显示属性』、『拷贝』、『删除档案』及『移动档案或目录』等等,由于档案与目录的管理在 Linux 当中是很重要的!尤其是每个人自己家目录的数据也都需要注意管理!由于我们在执行程序的时后,系统默认有一个搜寻的路径顺序,如果有两个以上相同档名的执行档分别在不同的路径时,呵呵,就需要特别留意啰!这里我们来谈一谈有关档案与目录的一些基础管理部分吧!
ls 显示文件名、属性等
cp 拷贝档案或目录
rm 删除档案或目录
mv 移动档案或目录
- ls
语法:
[root @test /root ]# ls [-ailS] |
说明:
还记得我们在解释档案的一些属性与目录的结构的那一章吗?!对啦!我们使用的第一支指令就是 ls 啦!通常我们都需要知道这个文件名『目录』还是『档案』?所以,我都喜欢使用『 ll』这个指令,其实那就是ls -l 的意思啦!不论如何,你都可以尝试着执行这之指令来视察你的档案!
请注意呦!不要忘记你的资料的主要咚咚!尤其是前面几个主要的属性呦!另外,你有没有发现如果在远程以 telnet 或者是 putty 的联机程序登入主机的时后,由于 Linux 预设使用有颜色的方式显示方式,但是像上表一样,蓝色的字样根本就是很难看到!这个时候通常我都是使用『ls --color=never 』来丢掉颜色!那如果想让 ls 预设没有颜色的话,可以在 /root/.bashrc 或者是你的家目录的 .bashrc 这个档案中加入下面这一行:
alias ls='ls --color=never'
这样就可以把颜色去到了!至于 alias 是在干嘛的?我们到了 bash 这个 shell 的时候再来谈吧!
- cp
语法:
[root @test /root ]# cp [-drsu] [来源档] [目的檔] |
说明:
这个指令会常用到的呦!因为我们得常常需要 copy 资料呀!所以需要了解一下喔!如果你有些很大档案的需要备份,偏偏这个档案的更新率很低,那么每次备份都需要在 copy 一份吗?看来是不需要了!你可以使用『cp -u 来源档 目的檔』来备份呦!如此一来,当档案被改变过后,才会进行 copy 的动作!
- rm
语法:
[root @test /root ]# rm [-fir] [檔名] |
说明:
这是移除的指令,相当于 dos 下的 del 指令!这里要注意的是,通常在 Linux 系统下,为了怕档案被误杀,所以都已经有 -i 这个参数, -i 是指每个档案被杀掉之前都会让使用者确认一次,以预防误杀档案!而如果要连目录下的东西都一起杀掉的话,例如子目录里面还有子目录时,那就要使用 -rf 这个参数了!不过,使用『 rm -rf』这个指令之前,请千万注意了,因为,该目录或档案『肯定』会被 root 杀掉!因为系统不会再次询问你是否要砍掉呦! 所以那是个超级严重的指令下达呦!得特别注意!不过,如果你确定该目录不要了,那么使用 rm -rf 来循环杀掉是不错的方式!
- mv
语法:
[root @test /root ]# mv [-u] [来源档] [目的檔] |
说明:
这是搬移的意思!当你要移动档案或目录的时后,呵呵!这个指令就很重要啦!同样的,你也可以使用 -u ( update )来测试新旧档案,看看是否需要搬移啰!另外一个用途就是『变更档名!』,我们可以很轻易的使用 mv 来变更一个档案的档名呢!
- basename
语法:
[root @test /root ]# basename [目录] |
说明:
这个指令颇有点意思~他可以将一个目录或档案的最后一个咚咚秀出来!所以,未来如果你有要使用变量,并且取出最后一个数据(不论是档案还是目录),那么使用这个玩意儿就对啦! ^_^
- dirname
语法:
[root @test /root ]# dirname [目录] |
说明:
这个指令恰恰与 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 以二进制的方式读取档案内容!
底下我们来谈一谈每个指令的基本用法吧!
- cat
语法:
[root @test /root ]# cat [-nAE] # User specific aliases and functions [root @test /root]# cat ~/.bashrc -n <==显示 .bashrc 并且加上行号! [root @test /root]# cat -A regexp.txt |
说明:
嘿嘿! Linux 里面有『猫』?!喔!不是的, cat 是 Concatenate (连续)的简写,主要的功能是将一个档案的内容连续的印出在屏幕上面!例如上面的例子中,我们将重要的参数档 .bashrc 印出来!如果加上 -n 的话,则每一行前面还会加上行号呦!cat 比较少用!毕竟当你的档案内容的行数超过 40 行以上,嘿嘿!根本来不及看!所以,配合 more 或者是 |more 来执行比较好!此外,如果是一般的 DOS 档案时,就需要特别留意一些奇奇怪怪的符号了,例如断行与<tab>等,要显示出来,就得加入 -A 之类的参数了!。
- tac
语法:
[root @test /root ]# tac [檔名] alias h='history' export PATH # .bashrc |
说明:
tac 这个好玩了!怎么说呢?详细的看一下, cat 与 tac ,有没有发现呀!对啦! tac 刚好是将 cat 反写过来,所以他的功能就跟 cat 相反啦, cat 是由『第一行到最后一行连续显示在屏幕上』,而 tac 则是『由最后一行到第一行反向在屏幕上显示出来』,很好玩吧!
- more
语法:
[root @test /root ]# more [檔名] |
说明:
more 真是个很有用的指令!我好喜欢呦!当你的档案太大的时后,那么使用 cat 将没有办法看清楚!这个时候你可以使用 more 来做动作!more 也可以用来做为管线的同时执行之用!例如你在执行 find 这个寻找的指令时,可以同时使用 |more ,则搜寻结果可以一页一页的列出呦!关于管线( pipe )的用法我们在 bash shell 的地方再来谈!
- less
语法:
[root @test /root ]# less [檔名] |
说明:
less 的用法比起 more 又更加的有弹性,怎么说呢?在 more 的时候,我们并没有办法向前面翻,只能往后面看,但若使用了 less 时,呵呵!就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件,您瞧,是不是更容易使用来观看一个档案的内容了呢!?
more 与 less 的用途与用法真的是很广啦!首先,你可以在 more 与 less 的画面中进行『搜寻』的工作!如何进行呢?我们以 less 来说明好了,如果你想要知道 /etc/man.config 这个档案里面有没有一个叫做 GER 的大写字眼,那么可以:
[root @test /root ]# less /etc/man.config |
然后在输入 / 之后,光标会移动到最左下角等待输入,这个时候您只要输入你的字符串之后,就会自动的帮你找出来该关键词啰!
- head
语法:
[root @test /root ]# head [-n number] [檔名] |
说明:
head 的英文意思就是『头』啦,那么这个东西的用法自然就是显示出一个档案的前几行啰!没错!就是这样!若没有加上 -n 这个参数时,默认只显示十行,若只要一行呢?那就加入『 head -n 1 filename 』即可!
- tail
语法:
[root @test /root ]# tail [-n number] [檔名] |
说明:
那么有 head 自然就有 tail ( 尾巴 ) 啰!没错!这个 tail 的用法跟 head 的用法差不多类似,只是显示的是后面几行就是了!默认也是显示十行,若要显示非十行,就加 -n number 的参数!
例题一:假如我想要显示 ~/.bashrc 的第 11 到第 20 行呢? 这个应该不算难,想一想,在第 11 到第 20 行,那么我取前 20 行,再取后十行,所以结果就是:『 head –n 20 ~/.bashrc | tail –n 10 』,这样就可以得到第 11 到第 20 行之间的内容了!但是里面涉及到管线命令,需要在第三篇的时候才讲的到! |
- nl
语法:
[root @test /root ]# nl [檔名] |
说明:
那么 nl 又是什么?这也没什么,这个指令的用法跟 cat -n 的用法类似,也就是『可以印出行号』的指令来查看档案啦!也是挺好用的!
- od
语法:
[root @test /root ]# od [檔名] |
说明:
好了,那么如果有一个非 ASCII 的数据文件呢?例如那个 binary 的档案!使用 vi 根本就是看不着~这个时候看来只有使用将整个数据以数值方法读出来啦!那就是 od 这个指令来读出来呦!这个东西可以用来输出该数据为十进制、16进位等等的数据格式!不过这个东西对于工程师可能比较有用啦!因为印出来的东西都是数字或内存当中的数据~~
档案与目录权限:
由 Linux 文件属性 的内容我们可以知道一个档案有若干个属性,包括 ( r, w, x ) 等基本属性,及是否为目录 (d) 与档案 (-) 或者是连结档 (l) 等等的属性!那么要修改属性的方法在前面也约略提过了,这里再加强补充一下!此外,由于 Linux 还可以设定其他的系统安全属性,使用 chattr 来设定,而以 lsattr 来查看,最重要的属性就是可以设定其不可修改的特性!让连档案的拥有者都不能进行修改!这个属性可是相当重要的,尤其是在安全机制上面( security )!
chown 改变档案的拥有人
chgrp 改变档案的所属群组
chmod 改变档案的可写、可读、可执行等属性
umask 改变默认的建立档案或目录时的属性
chattr 改变档案的特殊属性
lsattr 显示档案的特殊属性!
- chown
语法:
[root @test /root ]# chown [-R] user:group [目录名称] |
说明:
前一个章节才刚讲完,应该不会就这样忘记了吧?!由于 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:4
w:2
x:1
举个例子来说,当一个属性为『-rwxr-xr--』时,那是几分呢?!我们可以将他看成如下『-[rwx][r-x][r--]』三组,所以分数就变成了『[4+2+1][4+0+1][4+0+0]』共有『754』分啦!这样会算吗?!OK!测试一下,底下的分数为几分:
-r-xr-xr-x
-rwxrw----
如果你可以算出『555』与『760』,呵呵!那么你就应该会算啰!所以,如果你要将 .bashrc 设定成所有人都可以读取的话,就下达『 chmod 777 .bashrc 』吧!其中需要特别注意的是,通常我们都会允许个人网页的设定!那么由于个人网页默认是记录在/home/userID/public_html底下,偏偏 /home/userID 的属性为『drwx------』根本就不允许任何人进入!所以,你最少要将你的目录设定成 『drwx--x--x』 才可以!当然也可以设定成『drwxr-xr-x』!不过不建议设定成『777』呦!
- umask
OK!那么现在我们知道如何建立或者是改变一个目录或档案的属性了,不过,您知道当你建立一个新的档案或目录时,他的默认属性会是什么吗?呵呵!那就与 umask 有关了!那么 umask 是在搞什么呢?基本上, umask 就是指定『目前用户在建立档案或目录时候的属性默认值』,那么如何得知或设定 umask 呢?他的指定条件以底下的方式来指定:
语法:
[root @test root]# umask |
说明:
查看 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 [root@vbird test]# umask 003 |
由上面的例子您应该很轻易的就可以发现 umask 的用途!而这个 umask 可以在 /etc/bashrc 里面进行修改喔!预设的情况之下, root 的 umask 为 022 而一般使用者则为 002 ,因为可写的权限蛮严重的,因此预设都会拿掉这个权限!此外,因为 root 比较重要!所以为了安全的需求,其同群组的写入属性就被拿掉了!这东西对于安全性也有一定程度的贡献呦!
- chattr
语法:
[root @test /root ]# chattr [+-=][ASacdistu] [档案或目录名称] |
说明:
这这个指令是重要的,尤其是在系统的安全性上面!由于这些属性是隐藏的性质,所以需要以 lsattr 才能看到该属性呦!其中,个人认为最重要的当属 +i 这个属性了,因为他可以让一个档案无法被更动,对于需要强烈的系统安全的人来说,真是相当的重要的!里头还有相当多的属性是需要 root 才能设定的呢!此外,如果是 log file 这种的登录档,就更需要 +a 这个可以增加,但不会被杀掉的参数了!怎样?很棒吧!未来提到登录档的认知时,我们再来聊一聊如何设定他吧!
- lsattr
语法:
[root @test /root ]# lsattr [-aR] |
说明:
这两个指令在使用上必须要特别小心,例如:某天你心情好,突然将 /etc/shadow 这个重要的密码记录档案给他设定成为具有 i 的属性,那么过了若干天之后,你突然要新增使用者,却一直无法新增!别怀疑,赶快去将 i 的属性拿掉吧!
搜寻档案或目录:
档案的搜寻可就厉害了!因为我们常常需要知道那个档案放在哪里,所以来谈一谈怎么搜寻吧!在 Linux 底下也有相当优异的搜寻系统呦!通常 find 不很常用的!因为速度慢之外,也很操硬盘!通常我们都是先使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻呦!为什么呢?因为 whereis 与 locate 是利用数据库来搜寻数据,所以相当的快速,而且并没有实际的搜寻硬盘,比较省时间啦!
which 查看可执行文件案的位置
whereis 查看档案的位置
locate 配合数据库查看档案位置
find 实际搜寻硬盘去查询文件名
- which
语法:
[root @test /root ]# which [文件名] |
说明:
which 的基本功能是『藉由 PATH 这个环境变量的内容,去该路径内寻找可执行文件』,所以基本的功能在于『寻找执行档』啰!
- whereis
语法:
[root @test /root ]# whereis [-bmsu] [目录名称] [root @test /root]# whereis -b passwd [root @test /root]# whereis -m passwd |
说明:
如果使用 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]# updatedb <==立刻更新数据库 |
说明:
locate 的使用方式就更简单了!直接键入你要找的档名即可!但是,这个东西还是有使用上的限制呦!为什么呢?您会发现使用 locate 来寻找数据的时候特别的快,这是因为 locate 寻找的数据是由『已建立的数据库 /var/lib/slocate』里面的数据所搜寻到的,所以不用直接在去硬盘当中存取数据,呵呵!当然是很快速啰!那么有什么限制呢?就是因为他是经 由数据库来搜寻的,而数据库的建立默认是在每个礼拜执行一次,所以当您新建立起来的档案,却还在数据库更新之前搜寻该档案,那么 locate 会告诉您『找不到!』呵呵!因为必须要更新数据库呀!
那么我到底要建立哪些数据库呢?是否全部都要建立?似乎不需要,这个时候,你可以自己选择需要建立档案数据库的目录呢!在 /etc/updatedb.conf 这个内即可设定了!
[root @test root]# more /etc/updatedb.conf # 哪些目录不想要建立档案搜寻数据,呵呵!就是那些不要的数据嘛! # 安全等级 # 查询的时候是否要由屏幕输出?当然不要,否则多麻烦? # 数据库所在处!这是默认值,不要随意移动,否则会找不到! # 哪些文件系统我们也不搜寻建立?就是光盘啦、非 Linux 的文件格式啦, |
- find
语法:
[root @test /root ]# find [路径] [参数] |
说明:
如果你要寻找一个档案的话,那么使用 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 |
看到了 /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 |
我们以账号的密码文件来说明好了!注意上面的范例啰!可以看到的是, /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 / |
如何,发现了吧!虽然该目录具有所有人皆可擦写的权限,但是确有一个 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]# chmod 7666 test |
- file
语法:
[root @test /root ]# file [檔名] [root @test /root]# file /usr/bin/passwd |
说明:
file 这个指令也蛮好用的,可以用来查看这个档案的类型,例如 ASCII 格式檔,或者是 binary 的档案等等,还可以用来观看档案是否被加入 SUID 等等的信息!并且,也同时提供了是否有使用动态函式库的信息!相当的好用!