第七章 Linux文件与目录管理
7.1目录与路径:
7.1.1相对路径与绝对路径:
绝对路径:路径的写法『一定由根目录 / 写起』,例如: /usr/share/doc 这个目录。
相对路径:路径的写法『不是由 / 写起』,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成:『cd ../man』这就是相对路径的写法啦!相对路径意指『相对於目前工作目录的路径!』
7.1.2目录的相关操作:
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表『目前使用者身份』所在的家目录
~account 代表 account 这个使用者的家目录(account是个帐号名称)
几个常见的处理目录的命令:
cd (变换目录)
[root@www ~]# cd [相对路径或绝对路径] # 最重要的就是目录的绝对路径与相对路径,还有一些特殊目录的符号罗! [root@www ~]# cd ~vbird # 代表去到 vbird 这个使用者的家目录,亦即 /home/vbird [root@www vbird]# cd ~ # 表示回到自己的家目录,亦即是 /root 这个目录 [root@www ~]# cd # 没有加上任何路径,也还是代表回到自己家目录的意思喔! [root@www ~]# cd .. # 表示去到目前的上一级目录,亦即是 /root 的上一级目录的意思; [root@www /]# cd - # 表示回到刚刚的那个目录,也就是 /root 罗~ [root@www ~]# cd /var/spool/mail # 这个就是绝对路径的写法!直接指定要去的完整路径名称! [root@www mail]# cd ../mqueue # 这个是相对路径的写法,我们由/var/spool/mail 去到/var/spool/mqueue 就这样写! |
pwd (显示目前所在的目录)
[root@www ~]# pwd [-P] 选项与参数: -P :显示出确实的路径,而非使用连结 (link) 路径。 范例:单纯显示出目前的工作目录: [root@www ~]# pwd /root <== 显示出目录啦~ 范例:显示出实际的工作目录,而非连结档本身的目录名而已 [root@www ~]# cd /var/mail <==注意,/var/mail是一个连结档 [root@www mail]# pwd /var/mail <==列出目前的工作目录 [root@www mail]# pwd -P /var/spool/mail <==怎么回事?有没有加 -P 差很多~ [root@www mail]# ls -ld /var/mail lrwxrwxrwx 1 root root 10 Sep 4 17:54 /var/mail -> spool/mail # 看到这里应该知道为啥了吧?因为 /var/mail 是连结档,连结到 /var/spool/mail # 所以,加上 pwd -P 的选项后,会不以连结档的数据显示,而是显示正确的完整路径啊! |
mkdir (创建新目录)
[root@www ~]# mkdir [-mp] 目录名称 选项与参数: -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~ -p :帮助你直接将所需要的目录(包含上一级目录)递回创建起来! 范例:请到/tmp底下尝试创建数个新目录看看: [root@www ~]# cd /tmp [root@www tmp]# mkdir test <==创建一名为 test 的新目录 [root@www tmp]# mkdir test1/test2/test3/test4 mkdir: cannot create directory `test1/test2/test3/test4‘: No such file or directory <== 没办法直接创建此目录啊! [root@www tmp]# mkdir -p test1/test2/test3/test4 # 加了这个 -p 的选项,可以自行帮你创建多层目录! 范例:创建权限为rwx--x--x的目录 [root@www tmp]# mkdir -m 711 test2 [root@www tmp]# ls -l drwxr-xr-x 3 root root 4096 Jul 18 12:50 test drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1 drwx--x--x 2 root root 4096 Jul 18 12:54 test2 # 仔细看上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性。 # 那么你的默认属性为何?这要透过底下介绍的 umask 才能了解喔! ^_^
rmdir (注意:只能删除『空』的目录)
[root@www ~]# rmdir [-p] 目录名称 选项与参数: -p :连同上一级『空的』目录也一起删除 范例:将於mkdir范例中创建的目录(/tmp底下)删除掉! [root@www tmp]# ls -l <==看看有多少目录存在? drwxr-xr-x 3 root root 4096 Jul 18 12:50 test drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1 drwx--x--x 2 root root 4096 Jul 18 12:54 test2 [root@www tmp]# rmdir test <==可直接删除掉,没问题 [root@www tmp]# rmdir test1 <==因为尚有内容,所以无法删除! rmdir: `test1‘: Directory not empty [root@www tmp]# rmdir -p test1/test2/test3/test4 [root@www tmp]# ls -l <==您看看,底下的输出中test与test1不见了! drwx--x--x 2 root root 4096 Jul 18 12:54 test2 # 瞧!利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次删除~ # 不过要注意的是,这个 rmdir 仅能『删除空的目录』喔! |
7.1.3关於运行档路径的变量: $PATH
echo有『显示、印出』的意思,而 PATH 前面加的 $ 表示后面接的是变量,所以会显示出目前的 PATH !
范例:先用root的身份列出搜寻的路径为何? [root@www ~]# echo $PATH /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin :/bin:/usr/sbin:/usr/bin:/root/bin <==这是同一行! 范例:用vbird的身份列出搜寻的路径为何? [root@www ~]# su - vbird [vbird@www ~]# echo $PATH /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/vbird/bin # 仔细看,一般用户vbird的PATH中,并不包含任何『sbin』的目录存在喔! |
7.2文件与目录管理:
7.2.1文件与目录的检视: ls
[root@www ~]# ls [-aAdfFhilnrRSt] 目录名称 [root@www ~]# ls [--color={never,auto,always}] 目录名称 [root@www ~]# ls [--full-time] 目录名称 选项与参数: -a :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用) -A :全部的文件,连同隐藏档,但不包括 . 与 .. 这两个目录 -d :仅列出目录本身,而不是列出目录内的文件数据(常用) -f :直接列出结果,而不进行排序 (ls 默认会以档名排序!) -F :根据文件、目录等资讯,给予附加数据结构,例如: *:代表可运行档; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件; -h :将文件容量以人类较易读的方式(例如 GB, KB 等等)列出来; -i :列出 inode 号码,inode 的意义下一章将会介绍; -l :长数据串列出,包含文件的属性与权限等等数据;(常用) -n :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在帐号管理提到!) -r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小; -R :连同子目录内容一起列出来,等於该目录下的所有文件都会显示出来; -S :以文件容量大小排序,而不是用档名排序; -t :依时间排序,而不是用档名。 --color=never :不要依据文件特性给予颜色显示; --color=always :显示颜色 --color=auto :让系统自行依据配置来判断是否给予颜色 --full-time :以完整时间模式 (包含年、月、日、时、分) 输出 --time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime) 而非内容变更时间 (modification time) |
7.2.2复制、删除与移动: cp, rm, mv
[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination) [root@www ~]# cp [options] source1 source2 source3 .... directory 选项与参数: -a :相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用) -d :若来源档为连结档的属性(link file),则复制连结档属性而非文件本身; -f :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次; -i :若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用) -l :进行硬式连结(hard link)的连结档创建,而非复制文件本身; -p :连同文件的属性一起复制过去,而非使用默认属性(备份常用); -r :递回持续复制,用於目录的复制行为;(常用) -s :复制成为符号连结档 (symbolic link),亦即『捷径』文件; -u :若 destination 比 source 旧才升级 destination ! 最后需要注意的,如果来源档有两个以上,则最后一个目的档一定要是『目录』才行! |
范例三:复制 /etc/ 这个目录下的所有内容到 /tmp 底下 [root@www tmp]# cp /etc/ /tmp cp: omitting directory `/etc‘ <== 如果是目录则不能直接复制,要加上 -r 的选项 [root@www tmp]# cp -r /etc/ /tmp # 还是要再次的强调喔! -r 是可以复制目录,但是,文件与目录的权限可能会被改变 # 所以,也可以利用『 cp -a /etc /tmp 』来下达命令喔!尤其是在备份的情况下! |
[root@www ~]# rm [-fir] 文件或目录 选项与参数: -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息; -i :互动模式,在删除前会询问使用者是否动作 -r :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!! 范例一:将刚刚在 cp 的范例中创建的 bashrc 删除掉! [root@www ~]# cd /tmp [root@www tmp]# rm -i bashrc rm: remove regular file `bashrc‘? y # 如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名! 范例二:透过万用字节*的帮忙,将/tmp底下开头为bashrc的档名通通删除: [root@www tmp]# rm -i bashrc* # 注意那个星号,代表的是 0 到无穷多个任意字节喔!很好用的东西! 范例三:将 cp 范例中所创建的 /tmp/etc/ 这个目录删除掉! [root@www tmp]# rmdir /tmp/etc rmdir: etc: Directory not empty <== 删不掉啊!因为这不是空的目录! [root@www tmp]# rm -r /tmp/etc rm: descend into directory `/tmp/etc‘? y ....(中间省略).... # 因为身份是 root ,默认已经加入了 -i 的选项,所以你要一直按 y 才会删除! # 如果不想要继续按 y ,可以按下『 [ctrl]-c 』来结束 rm 的工作。 # 这是一种保护的动作,如果确定要删除掉此目录而不要询问,可以这样做: |
[root@www ~]# mv [-fiu] source destination [root@www ~]# mv [options] source1 source2 source3 .... directory 选项与参数: -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖; -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖! -u :若目标文件已经存在,且 source 比较新,才会升级 (update) 范例一:复制一文件,创建一目录,将文件移动到目录中 [root@www ~]# cd /tmp [root@www tmp]# cp ~/.bashrc bashrc [root@www tmp]# mkdir mvtest [root@www tmp]# mv bashrc mvtest # 将某个文件移动到某个目录去,就是这样做! 范例二:将刚刚的目录名称更名为 mvtest2 [root@www tmp]# mv mvtest mvtest2 <== 这样就更名了!简单~ # 其实在 Linux 底下还有个有趣的命令,名称为 rename , # 该命令专职进行多个档名的同时更名,并非针对单一档名变更,与mv不同。请man rename。 范例三:再创建两个文件,再全部移动到 /tmp/mvtest2 当中 [root@www tmp]# cp ~/.bashrc bashrc1 [root@www tmp]# cp ~/.bashrc bashrc2 [root@www tmp]# mv bashrc1 bashrc2 mvtest2 # 注意到这边,如果有多个来源文件或目录,则最后一个目标档一定是『目录!』 # 意思是说,将所有的数据移动到该目录的意思! |
7.3 文件内容查阅:
7.3.1直接查看文件内容
[root@www ~]# cat [-AbEnTv] 选项与参数: -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已; -b :列出行号,仅针对非空白行做行号显示,空白行不标行号! -E :将结尾的断行字节 $ 显示出来; -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同; -T :将 [tab] 按键以 ^I 显示出来; -v :列出一些看不出来的特殊字符 范例一:检阅 /etc/issue 这个文件的内容 [root@www ~]# cat /etc/issue CentOS release 5.3 (Final) Kernel \r on an \m 范例二:承上题,如果还要加印行号呢? [root@www ~]# cat -n /etc/issue 1 CentOS release 5.3 (Final) 2 Kernel \r on an \m 3 # 看到了吧!可以印出行号呢!这对於大文件要找某个特定的行时,有点用处! # 如果不想要编排空白行的行号,可以使用『cat -b /etc/issue』,自己测试看看: |
[root@www ~]# tac /etc/issue Kernel \r on an \m CentOS release 5.3 (Final) # 嘿嘿!与刚刚上面的范例一比较,是由最后一行先显示喔! |
[root@www ~]# nl [-bnw] 文件 选项与参数: -b :指定行号指定的方式,主要有两种: -b a :表示不论是否为空行,也同样列出行号(类似 cat -n); -b t :如果有空行,空的那一行不要列出行号(默认值); -n :列出行号表示的方法,主要有三种: -n ln :行号在萤幕的最左方显示; -n rn :行号在自己栏位的最右方显示,且不加 0 ; -n rz :行号在自己栏位的最右方显示,且加 0 ; -w :行号栏位的占用的位数。 范例一:用 nl 列出 /etc/issue 的内容 [root@www ~]# nl /etc/issue 1 CentOS release 5.3 (Final) 2 Kernel \r on an \m |
7.3.2可翻页查看
[root@www ~]# more /etc/man.config # # Generated automatically from man.conf.in by the # configure script. # # man.conf from man-1.6d ....(中间省略).... --More--(28%) <== 重点在这一行喔!你的光标也会在这里等待你的命令 |
仔细的给他看到上面的范例,如果 more 后面接的文件内容行数大於萤幕输出的行数时, 就会出现类似上面的图示。重点在最后一行,最后一行会显示出目前显示的百分比, 而且还可以在最后一行输入一些有用的命令喔!在 more 这个程序的运行过程中,你有几个按键可以按的:
[root@www ~]# less /etc/man.config # # Generated automatically from man.conf.in by the # configure script. # # man.conf from man-1.6d ....(中间省略).... : <== 这里可以等待你输入命令! |
less 的用法比起 more 又更加的有弹性,怎么说呢?在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,呵呵!就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件,你瞧,是不是更容易使用来观看一个文件的内容了呢!
除此之外,在 less 里头可以拥有更多的『搜寻』功能喔!不止可以向下搜寻,也可以向上搜寻~ 实在是很不错用~基本上,可以输入的命令有:
7.3.3数据选取
[root@www ~]# head [-n number] 文件 选项与参数: -n :后面接数字,代表显示几行的意思 [root@www ~]# head /etc/man.config # 默认的情况中,显示前面十行!若要显示前 20 行,就得要这样: [root@www ~]# head -n 20 /etc/man.config |
[root@www ~]# tail [-n number] 文件 选项与参数: -n :后面接数字,代表显示几行的意思 -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测 [root@www ~]# tail /etc/man.config # 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样: [root@www ~]# tail -n 20 /etc/man.config |
7.3.4非纯文字档:od
[root@www ~]# od [-t TYPE] 文件 选项或参数: -t :后面可以接各种『类型 (TYPE)』的输出,例如: a :利用默认的字节来输出; c :使用 ASCII 字节来输出 d[size] :利用十进位(decimal)来输出数据,每个整数占用 size bytes ; f[size] :利用浮点数值(floating)来输出数据,每个数占用 size bytes ; o[size] :利用八进位(octal)来输出数据,每个整数占用 size bytes ; x[size] :利用十六进位(hexadecimal)来输出数据,每个整数占用 size bytes ; 范例一:请将/usr/bin/passwd的内容使用ASCII方式来展现! [root@www ~]# od -t c /usr/bin/passwd 0000000 177 E L F 001 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0 0000020 002 \0 003 \0 001 \0 \0 \0 260 225 004 \b 4 \0 \0 \0 0000040 020 E \0 \0 \0 \0 \0 \0 4 \0 \0 \a \0 ( \0 0000060 035 \0 034 \0 006 \0 \0 \0 4 \0 \0 \0 4 200 004 \b 0000100 4 200 004 \b 340 \0 \0 \0 340 \0 \0 \0 005 \0 \0 \0 .....(后面省略).... # 最左边第一栏是以 8 进位来表示bytes数。以上面范例来说,第二栏0000020代表开头是 # 第 16 个 byes (2x8) 的内容之意。 范例二:请将/etc/issue这个文件的内容以8进位列出储存值与ASCII的对照表 [root@www ~]# od -t oCc /etc/issue 0000000 103 145 156 164 117 123 040 162 145 154 145 141 163 145 040 065 C e n t O S r e l e a s e 5 0000020 056 062 040 050 106 151 156 141 154 051 012 113 145 162 156 145 . 2 ( F i n a l ) \n K e r n e 0000040 154 040 134 162 040 157 156 040 141 156 040 134 155 012 012 l \ r o n a n \ m \n \n 0000057 # 如上所示,可以发现每个字节可以对应到的数值为何! # 例如e对应的记录数值为145,转成十进位:1x8^2+4x8+5=101。 |
7.3.5 修改文件时间或建置新档:touch
[root@www ~]# touch [-acdmt] 文件 选项与参数: -a :仅修订 access time; -c :仅修改文件的时间,若该文件不存在则不创建新文件; -d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间" -m :仅修改 mtime ; -t :后面可以接欲修订的时间而不用目前的时间,格式为[YYMMDDhhmm] 范例一:新建一个空的文件并观察时间 [root@www ~]# cd /tmp [root@www tmp]# touch testtouch [root@www tmp]# ls -l testtouch -rw-r--r-- 1 root root 0 Sep 25 21:09 testtouch # 注意到,这个文件的大小是 0 呢!在默认的状态下,如果 touch 后面有接文件, # 则该文件的三个时间 (atime/ctime/mtime) 都会升级为目前的时间。若该文件不存在, # 则会主动的创建一个新的空的文件喔!例如上面这个例子! 范例二:将 ~/.bashrc 复制成为 bashrc,假设复制完全的属性,检查其日期 [root@www tmp]# cp -a ~/.bashrc bashrc [root@www tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc -rw-r--r-- 1 root root 176 Jan 6 2007 bashrc <==这是 mtime -rw-r--r-- 1 root root 176 Sep 25 21:11 bashrc <==这是 atime -rw-r--r-- 1 root root 176 Sep 25 21:12 bashrc <==这是 ctime |
无论如何,touch 这个命令最常被使用的情况是:
7.4文件与目录的默认权限与隐藏权限
7.4.1文件默认权限:umask
[root@www ~]# umask 0022 <==与一般权限有关的是后面三个数字! [root@www ~]# umask -S u=rwx,g=rx,o=rx |
· 若使用者创建为『文件』则默认『没有可运行(
x )权限』,亦即只有 rw 这两个项目,也就是最大为 666 分,默认权限如下:
-rw-rw-rw-
· 若使用者创建为『目录』,则由於 x 与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777 分,默认权限如下:
drwxrwxrwx
[root@www ~]# umask 0022 [root@www ~]# touch test1 [root@www ~]# mkdir test2 [root@www ~]# ll -rw-r--r-- 1 root root 0 Sep 27 00:25 test1 drwxr-xr-x 2 root root 4096 Sep 27 00:25 test2 |
7.4.2文件隐藏属性:
[root@www ~]# chattr [+-=][ASacdistu] 文件或目录名称 选项与参数: + :添加某一个特殊参数,其他原本存在参数则不动。 - :移除某一个特殊参数,其他原本存在参数则不动。 = :配置一定,且仅有后面接的参数 A :当配置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime 将不会被修改,可避免I/O较慢的机器过度的存取磁碟。这对速度较慢的计算机有帮助 S :一般文件是非同步写入磁碟的(原理请参考第五章sync的说明),如果加上 S 这个 属性时,当你进行任何文件的修改,该更动会『同步』写入磁碟中。 a :当配置 a 之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root 才能配置这个属性。 c :这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩, 但是在储存的时候,将会先进行压缩后再储存(看来对於大文件似乎蛮有用的!) d :当 dump 程序被运行的时候,配置 d 属性将可使该文件(或目录)不会被 dump 备份 i :这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、配置连结也无法 写入或新增数据!』对於系统安全性有相当大的助益!只有 root 能配置此属性 s :当文件配置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘 空间,所以如果误删了,完全无法救回来了喔! u :与 s 相反的,当使用 u 来配置文件时,如果该文件被删除了,则数据内容其实还 存在磁碟中,可以使用来救援该文件喔! 注意:属性配置常见的是 a 与 i 的配置值,而且很多配置值必须要身为 root 才能配置 范例:请尝试到/tmp底下创建文件,并加入 i 的参数,尝试删除看看。 [root@www ~]# cd /tmp [root@www tmp]# touch attrtest <==创建一个空文件 [root@www tmp]# chattr +i attrtest <==给予 i 的属性 [root@www tmp]# rm attrtest <==尝试删除看看 rm: remove write-protected regular empty file `attrtest‘? y rm: cannot remove `attrtest‘: Operation not permitted <==操作不许可 # 看到了吗?呼呼!连 root 也没有办法将这个文件删除呢!赶紧解除配置! 范例:请将该文件的 i 属性取消! [root@www tmp]# chattr -i attrtest
其中,个人认为最重要的当属+i 与 +a 这个属性了。
[root@www ~]# lsattr [-adR] 文件或目录 选项与参数: -a :将隐藏档的属性也秀出来; -d :如果接的是目录,仅列出目录本身的属性而非目录内的档名; -R :连同子目录的数据也一并列出来! [root@www tmp]# chattr +aij attrtest [root@www tmp]# lsattr attrtest ----ia---j--- attrtest |
[root@www ~]# ls -ld /tmp ; ls -l /usr/bin/passwd drwxrwxrwt 7 root root 4096 Sep 27 18:23 /tmp -rwsr-xr-x 1 root root 22984 Jan 7 2007 /usr/bin/passwd |
[root@www ~]# file ~/.bashrc /root/.bashrc: ASCII text <==告诉我们是 ASCII 的纯文字档啊! [root@www ~]# file /usr/bin/passwd /usr/bin/passwd: setuid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped # 运行档的数据可就多的不得了!包括这个文件的 suid 权限、兼容於 Intel 386 # 等级的硬件平台、使用的是 Linux 核心 2.6.9 的动态函式库连结等等。 [root@www ~]# file /var/lib/mlocate/mlocate.db /var/lib/mlocate/mlocate.db: data <== 这是 data 文件! |
[root@www ~]# which [-a] command 选项或参数: -a :将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称 范例一:分别用root与一般帐号搜寻 ifconfig 这个命令的完整档名 [root@www ~]# which ifconfig /sbin/ifconfig <==用 root 可以找到正确的运行档名喔! [root@www ~]# su - vbird <==切换身份成为 vbird 去! [vbird@www ~]$ which ifconfig /usr/bin/which: no ifconfig in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin :/home/vbird/bin) <==见鬼了!竟然一般身份帐号找不到! # 因为 which 是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以, # 不同的 PATH 配置内容所找到的命令当然不一样啦!因为 /sbin 不在 vbird 的 # PATH 中,找不到也是理所当然的啊!了乎? [vbird@www ~]$ exit <==记得将身份切换回原本的 root 范例二:用 which 去找出 which 的档名为何? [root@www ~]# which which alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot ‘ /usr/bin/which # 竟然会有两个 which ,其中一个是 alias 这玩意儿呢!那是啥? # 那就是所谓的『命令别名』,意思是输入 which 会等於后面接的那串命令啦! # 更多的数据我们会在 bash 章节中再来谈的! 范例三:请找出 cd 这个命令的完整档名 [root@www ~]# which cd /usr/bin/which: no cd in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin :/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin) # 瞎密?怎么可能没有 cd ,我明明就能够用 root 运行 cd 的啊!
[root@www ~]# whereis [-bmsu] 文件或目录名 选项与参数: -b :只找 binary 格式的文件 -m :只找在说明档 manual 路径下的文件 -s :只找 source 来源文件 -u :搜寻不在上述三个项目当中的其他特殊文件 范例一:请用不同的身份找出 ifconfig 这个档名 [root@www ~]# whereis ifconfig ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz [root@www ~]# su - vbird <==切换身份成为 vbird [vbird@www ~]$ whereis ifconfig <==找到同样的结果喔! ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz [vbird@www ~]$ exit <==回归身份成为 root 去! # 注意看,明明 which 一般使用者找不到的 ifconfig 却可以让 whereis 找到! # 这是因为系统真的有 ifconfig 这个『文件』,但是使用者的 PATH 并没有加入 /sbin # 所以,未来你找不到某些命令时,先用文件搜寻命令找找看再说! 范例二:只找出跟 passwd 有关的『说明文件』档名(man page) [root@www ~]# whereis -m passwd passwd: /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz |
[root@www ~]# locate [-ir] keyword 选项与参数: -i :忽略大小写的差异; -r :后面可接正规表示法的显示方式 范例一:找出系统中所有与 passwd 相关的档名 [root@www ~]# locate passwd /etc/passwd /etc/passwd- /etc/news/passwd.nntp /etc/pam.d/passwd ....(底下省略).... |
[root@www ~]# find [PATH] [option] [action] 选项与参数: |
选项与参数: 3. 与文件权限及名称有关的参数: -name filename:搜寻文件名称为 filename 的文件; -size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有: c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB 还要大的文件,就是『 -size +50k 』 -type TYPE :搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f), 装置文件 (b, c), 目录 (d), 连结档 (l), socket (s), 及 FIFO (p) 等属性。 -perm mode :搜寻文件权限『刚好等於』 mode 的文件,这个 mode 为类似 chmod 的属性值,举例来说, -rwsr-xr-x 的属性为 4755 ! -perm -mode :搜寻文件权限『必须要全部囊括 mode 的权限』的文件,举例来说, 我们要搜寻 -rwxr--r-- ,亦即 0744 的文件,使用 -perm -0744, 当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来, 因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。 -perm +mode :搜寻文件权限『包含任一 mode 的权限』的文件,举例来说,我们搜寻 -rwxr-xr-x ,亦即 -perm +755 时,但一个文件属性为 -rw------- 也会被列出来,因为他有 -rw.... 的属性存在! 范例五:找出档名为 passwd 这个文件 [root@www ~]# find / -name passwd # 利用这个 -name 可以搜寻档名啊! 范例六:找出 /var 目录下,文件类型为 Socket 的档名有哪些? [root@www ~]# find /var -type s # 这个 -type 的属性也很有帮助喔!尤其是要找出那些怪异的文件, # 例如 socket 与 FIFO 文件,可以用 find /var -type p 或 -type s 来找! 范例七:搜寻文件当中含有 SGID 或 SUID 或 SBIT 的属性 [root@www ~]# find / -perm +7000 # 所谓的 7000 就是 ---s--s--t ,那么只要含有 s 或 t 的就列出, # 所以当然要使用 +7000 ,使用 -7000 表示要含有 ---s--s--t 的所有三个权限, # 因此,就是 +7000 ~了乎 |
[root@www ~]# find /etc -name ‘*httpd*‘
|
一、让使用者能进入某目录成为『可工作目录』的基本权限为何:
二、使用者在某个目录内读取一个文件的基本权限为何?
三、让使用者可以修改一个文件的基本权限为何?
四、让一个使用者可以创建一个文件的基本权限为何?
五、让使用者进入某目录并运行该目录下的某个命令之基本权限为何?
鸟哥的Linux私房菜_基础版_学习笔记3:第七章 Linux文件与目录管理
原文地址:http://blog.csdn.net/keyyuanxin/article/details/45915809