******************第六章学习******************
1、【文件与目录管理】
在所有目录下面都会存在的两个目录,分别是 “.” 与 “..” 分别代表此层与上层目录的意思;
那么就有人会问了,在 / 根目录下,也有(上层目录)吗?
回答是的,只不过根目录的上一层(..)与根目录自己(.)是同一个目录。
在关于目录这一部分,涉及到一些基本指令:
cd:change directory,变换目录 pwd:print work directory,显示目前的目录 mkdir:make directory,创建一个新的目录 rmdir:删除一个空的目录
1.1)、ls后可加的参数:
-l 选项这个长串显示数据内容;
-a 选项将隐藏文件也一起列示出来的 ;
ls -al 仅列出目前短格式的时间,有时不会列出年份,借由 --full-time 可以查阅到比较正确的完整时间格式!
1.2)、cp后可加的参数:
cp [-adfilprsu] 来源文件(source) 目标文件(destination) cp [options] source1 source2 source3 .... directory
-a :相当于 -dr --preserve=all 的意思;
-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用);
-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r :递回持续复制,用于目录的复制行为;(常用)
注:如果来源文件有两个以上,则最后一个目的文件一定要是“目录”才行!
注释:
上面的范例二中,由于我是 root 的身份,因此复制过来的文件拥有者与群组就改变成为 root 所有了!
此当我们在进行备份的时候,某些需要特别注意的特殊权限文件, 例如密码档 (/etc/shadow) 以及一些配置文件,就不能直接以 cp 来复制,而必须要加上 -a 或者是 -p 等等可以完整复制文件权限的选项才行
范例四可有趣了!使用 -l 及 -s 都会创建所谓的链接文件(link file),但是这两种链接文件却有不一样的情况。这是怎么一回事啊? 那个 -l 就是所谓的实体链接(hard link),至于 -s 则是符号链接(symbolic link), 简单来说,bashrc_slink 是一个“捷径”,这个捷径会链接到bashrc去!所以你会看到文件名右侧会有个指向(->)的符号!
总之,由于 cp 有种种的文件属性与权限的特性,所以,在复制时,你必须要清楚的了解到:
- 是否需要完整的保留来源文件的信息?
- 来源文件是否为链接文件 (symbolic link file)?
- 来源文件是否为特殊的文件,例如 FIFO, socket 等?
- 来源文件是否为目录?
1.3)、rm移除文件或目录:
[root@study ~]# rm [-fir] 文件或目录 选项与参数: -f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息; -i :互动模式,在删除前会询问使用者是否动作 -r :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!!
范例二:通过万用字符*的帮忙,将/tmp下面开头为bashrc的文件名通通删除:
[root@study tmp]# rm -i bashrc*
# 注意那个星号,代表的是 0 到无穷多个任意字符喔!很好用的东西!
1.4)、mv移动文件或目录,或更名:
[root@study ~]# mv [-fiu] source destination [root@study ~]# mv [options] source1 source2 source3 .... directory 选项与参数: -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖; -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖! -u :若目标文件已经存在,且 source 比较新,才会更新 (update)
这个更名,知道为什么有些程序员用mv来换名字了吧,就是把当前目录某文件/文件夹,移动到当前目录,即原地移动,但是可以换名字。
不过该指令只能更改一个,如果想要更改大量的文件,则可以利用rename指令。
1.5)、basename,dirname取得路径的文件名称和目录名称:
[root@study ~]# basename /etc/sysconfig/network network <== 很简单!就取得最后的文件名~ [root@study ~]# dirname /etc/sysconfig/network /etc/sysconfig <== 取得的变成目录名了!
2)、文件内容查阅
最常使用的显示文件内容的指令可以说是 cat 与 more 及 less 了。如果我们要查看一个很大型的文件 (好几百MB时),但是我们只需要后端的几行字用 tail 或 tac 。
cat :由第一行开始显示文件内容 tac :从最后一行开始显示,可以看出 tac 是 cat 的倒着写! nl :显示的时候,顺道输出行号! more :一页一页的显示文件内容 less :与 more 类似,但是比 more 更好的是,他可以往前翻页! head :只看头几行 tail :只看尾巴几行 od :以二进制的方式读取文件内容!
2.1)、cat直接查阅文件内容:
[root@study ~]# cat [-AbEnTv]
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-n :打印出行号,连同空白行也会有行号,与 -b 的选项不同;
cat 是 Concatenate (连续) 的简写,戏称“猫”指令。主要的功能是将一个文件的内容连续的印出在屏幕上面!
2.2)、tac 反向查阅文件内容:
如:
[root@study ~]# cat /etc/issue \S Kernel \r on an \m //这是空行 ------------- [root@study ~]# tac /etc/issue //这是空行 Kernel \r on an \m \S
不知道有心的读者发现没?
tac 和 cat 是倒着的哦!!!所以意思也是相反的哦,一个是正序,一个是倒序。
2.3)、nl 列出行号:
其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能呢。
2.4)、more / less一页一页翻页检视:
空白键 (space):代表向下翻一页; Enter :代表向下翻“一行”; /字串 :代表在这个显示的内容当中,向下搜寻“字串”这个关键字;这个真的很关键,比如查log时,可先进入检视界面,再用/xxx来搜寻字符串,如error。重复搜寻同一个字串, 可以直接按下 n 即可。 :f :立刻显示出文件名以及目前显示的行数; q :代表立刻离开 more ,不再显示该文件内容。 b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用
more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件。
此外,还有:
空白键 :向下翻动一页; [pagedown]:向下翻动一页; [pageup] :向上翻动一页; /字串 :向下搜寻“字串”的功能; ?字串 :向上搜寻“字串”的功能; n :重复前一个搜寻 (与 / 或 ? 有关!) N :反向的重复前一个搜寻 (与 / 或 ? 有关!) g :前进到这个数据的第一行去; G :前进到这个数据的最后一行去 (注意大小写); q :离开 less 这个程序;
最后再说一句,man这个指令就是调用 less 来显示说明文档的内容的!所以要多多使用less哦!!!
2.5)、head / tail 数据撷取:
取出文件前面几行 (head) 或取出后面几行 (tail) 文字的功能。
head:
[root@study ~]# head [-n number] 文件 选项与参数: -n :后面接数字,代表显示几行的意思 [root@study ~]# head /etc/man_db.conf # 默认的情况中,显示前面十行!若要显示前 20 行,就得要这样: [root@study ~]# head -n 20 /etc/man_db.conf 范例:如果后面100行的数据都不打印,只打印/etc/man_db.conf的前面几行,该如何是好? [root@study ~]# head -n -100 /etc/man_db.conf //注意这里-n参数可以是负数哦
tail:
[root@study ~]# tail [-n number] 文件 选项与参数: -n :后面接数字,代表显示几行的意思 -f :表示持续侦测后面所接的文件名,要等到按下[ctrl]-c才会结束tail的侦测 [root@study ~]# tail /etc/man_db.conf # 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样: [root@study ~]# tail -n 20 /etc/man_db.conf 范例一:如果不知道/etc/man_db.conf有几行,却只想列出100行以后的数据时? [root@study ~]# tail -n +100 /etc/man_db.conf 范例二:持续侦测/var/log/messages的内容 [root@study ~]# tail -f /var/log/messages <==要等到输入[crtl]-c之后才会离开tail这个指令的侦测!
注意:不想要后xx行,用head -n 负数,不想要前xxx行,用tail -n +xxx。默认都是十行哦。
【管道符的使用】前面的指令所输出的讯息,请通过管线交由后续的指令继续使用。
例子:
例题: 假如我想要显示 /etc/man_db.conf 的第 11 到第 20 行呢? 答: 这个应该不算难,想一想,在第 11 到第 20 行,那么我取前 20 行,再取后十行,所以结果就是:
“ head -n 20 /etc/man_db.conf | tail -n 10 ”,这样就可以得到第 11 到第 20 行之间的内容了! 这两个指令中间有个管线 (|) 的符号存在,这个管线的意思是:“前面的指令所输出的讯息,请通过管线交由后续的指令继续 使用”的意思。 所以, head -n 20 /etc/man_db.conf 会将文件内的 20 行取出来,但不输出到屏幕上,而是转交给后续的 tail 指 令继续处理。 因此 tail “不需要接文件名”,因为 tail 所需要的数据是来自于 head 处理后的结果!这样说,有没有理解?
再来一例子:
例题: 承上一题,那如果我想要列出正确的行号呢?就是屏幕上仅列出 /etc/man_db.conf 的第 11 到第 20 行,且有行号存在? 答: 我们可以通过 cat -n 来带出行号,然后再通过 head/tail 来撷取数据即可!所以就变成如下的模样了: cat -n /etc/man_db.conf | head -n 20 | tail -n 10
2.6)、od 读取非文本文件:
[root@study ~]# 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@study ~]# od -t c /usr/bin/passwd 0000000 177 E L F 002 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0 0000020 003 \0 > \0 001 \0 \0 \0 364 3 \0 \0 \0 \0 \0 \0 0000040 @ \0 \0 \0 \0 \0 \0 \0 x e \0 \0 \0 \0 \0 \0 0000060 \0 \0 \0 \0 @ \0 8 \0 \t \0 @ \0 035 \0 034 \0 0000100 006 \0 \0 \0 005 \0 \0 \0 @ \0 \0 \0 \0 \0 \0 \0 .....(后面省略).... # 最左边第一栏是以 8 进位来表示Bytes数。以上面范例来说,第二栏0000020代表开头是 # 第 16 个 byes (2x8) 的内容之意。 范例二:请将/etc/issue这个文件的内容以8进位列出储存值与ASCII的对照表 [root@study ~]# od -t oCc /etc/issue 0000000 134 123 012 113 145 162 156 145 154 040 134 162 040 157 156 040 \ S \n K e r n e l \ r o n 0000020 141 156 040 134 155 012 012 a n \ m \n \n 0000027 # 如上所示,可以发现每个字符可以对应到的数值为何!要注意的是,该数值是 8 进位喔! # 例如 S 对应的记录数值为 123 ,转成十进制:1x8^2+2x8+3=83。
还有一个小李子,就是查看某字符串的ASCII对照码:
例题: 我不想找 google,想要立刻找到 password 这几个字的 ASCII 对照,该如何通过 od 来判断? 答: 其实可以通过刚刚上一个小节谈到的管线命令来处理!如下所示: echo password | od -t oCc echo 可以在屏幕上面显示任何信息,而这个信息不由屏幕输出,而是传给 od 去继续处理!就可以得到 ASCII code 对照!
2.7)、touch 修改文件时间或创建新文件:
用到touch,那就说到文件的时间了,一个文件包含很多时间概念,典型的有三个:
- modification time:mtime,数据内容变更,注意哦,而不是文件的属性或者权限;
- status time:ctime,状态变更,如属性和权限;
- access time:atime,读取时间,内容被读取。
在默认的情况下,ls 显示出来的是该文件的 mtime ,也就是这个文件的内容上次被更动的时间
3.0)、umask 文件默认权限:
umask 就是指定 “目前使用者在创建文件或目录时候的权限默认值”,但是这个指定并不是设定为,而是减去某某某。
什么意思呢?举个例子:
chmod 777 test.txt 表示将test.txt文件设定为777权限;
umask 002表示什么呢?表示user去掉权限0,group去掉权限0,Others去掉权限2,又因为rwe分别是421,故,余留的权限就是775。
举个例子:
[root@study ~]# umask 0022 [root@study ~]# touch test1 [root@study ~]# mkdir test2 [root@study ~]# ll -d test* -rw-r--r--. 1 root root 0 6月 16 01:11 test1 drwxr-xr-x. 2 root root 6 6月 16 01:11 test2
3.1)、chattr 文件隐藏属性:
[root@study ~]# chattr [+-=][ASacdistu] 文件或目录名称 选项与参数: + :增加某一个特殊参数,其他原本存在参数则不动。 - :移除某一个特殊参数,其他原本存在参数则不动。 = :设置一定,且仅有后面接的参数
#特别参数说明:
i :这个 i 可就很厉害了!他可以让一个文件“不能被删除、改名、设置链接也无法写入或新增数据!”对于系统安全性有相当大的助益!只有 root 能设置此属性。
a :当设置 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root 才能设置这属性。
举个例子:
范例:请尝试到/tmp下面创建文件,并加入 i 的参数,尝试删除看看。 [root@study ~]# cd /tmp [root@study tmp]# touch attrtest <==创建一个空文件 [root@study tmp]# chattr +i attrtest <==给予 i 的属性 [root@study tmp]# rm attrtest <==尝试删除看看 rm: remove regular empty file `attrtest'? y rm: cannot remove `attrtest': Operation not permitted # 看到了吗?呼呼!连 root 也没有办法将这个文件删除呢!赶紧解除设置! 范例:请将该文件的 i 属性取消! [root@study tmp]# chattr -i attrtest
此外,为了查看文件隐藏属性,可用 lsattr
[root@study ~]# lsattr [-adR] 文件或目录 选项与参数: -a :将隐藏文件的属性也秀出来; -d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名; -R :连同子目录的数据也一并列出来! [root@study tmp]# chattr +aiS attrtest [root@study tmp]# lsattr attrtest --S-ia---------- attrtest
3.2)、SUID,SGID,SBIT 文件 特殊权限:
特别说明一下:
同一行中,两条、多条指令间出现 “;” 分号表示依次执行这些指令;
[root@study ~]# ls -ld /tmp ; ls -l /usr/bin/passwd drwxrwxrwt. 14 root root 4096 Jun 16 01:27 /tmp -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
如上表示:分别输出/tmp 目录和/usr/bin/passwd文件的属性。
之前说过,权限除了rwe之外,还有其他的,那么这里就是,大家会发现/usr/bin/passwd文件上user的e权限位置上竟然是s。
是的,此时就被称为 Set UID,简称为 SUID 的特殊权限。
【SUID】
SUID有这样的限制与功能:
- SUID 权限仅对二进制程序(binary program)有效;
- 执行者对于该程序需要具有 x 的可执行权限;
- 本权限仅在执行该程序的过程中有效 (run-time);
- 执行者将具有该程序拥有者 (owner) 的权限。
讲这么硬的东西你可能对于 SUID 还是没有概念,没关系,我们举个例子来说明好了。 我们的 Linux 系统中,所有帐号的密码都记录在/etc/shadow 这个文件里面,这个文件的权限为:“---------- 1 root root”,意思是这个文件仅有root可读且仅有root可以强制写入而已。 既然这个文件仅有 root 可以修改,那么我们的 dmtsai 这个一般帐号使用者能否自行修改自己的密码呢? 你可以使用你自己的帐号输入“passwd”这个指令来看看,嘿嘿!一般使用者当然可以修改自己的密码了!
唔!有没有冲突啊!明明 /etc/shadow 就不能让 dmtsai 这个一般帐户去存取的,为什么 dmtsai 还能够修改这个文件内的密码呢? 这就是 SUID 的功能啦!借由上述的功能说明,我们可以知道。
1. dmtsai 对于 /usr/bin/passwd 这个程序来说是具有 x 权限的,表示 dmtsai 能执行 passwd;
2. passwd 的拥有者是 root 这个帐号;
3. dmtsai 执行 passwd 的过程中,会“暂时”获得 root 的权限;
4. /etc/shadow 就可以被 dmtsai 所执行的 passwd 所修改。
但如果 dmtsai 使用 cat 去读取 /etc/shadow 时,他能够读取吗?因为 cat 不具有 SUID 的权限。
特备注意的是:SUID 对于目录也是无效的。
【SGID】
当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID, SGID。
与 SUID 不同的是,SGID 可以针对文件或目录来设置。
- SGID 对二进制程序有用;
- 程序执行者对于该程序来说,需具备 x 的权限;
- 执行者在执行的过程中将会获得该程序群组的支持!
当一个目录设置了 SGID 的权限后,他将具有如下的功能:
- 使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录;
- 使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
- 用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。
【Sticky Bit】
这个 Sticky Bit, SBIT 目前只针对目录有效,对于文件已经没有效果了。SBIT 对于目录的作用是:
- 当使用者对于此目录具有 w, x 权限,亦即具有写入的权限时;
- 当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
这句话意思就是:
当甲这个使用者于 A 目录是具有群组或其他人的身份,并且拥有该目录 w 的权限, 这表示“甲使用者对该目录内任何人创建的目录或文件均可进行 "删除/更名/搬移" 等动作。” 不过,如果将 A 目录加上了 SBIT 的权限项目时, 则甲只能够针对自己创建的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。
3.3)、增加SUID,SGID,SBIT 文件 特殊权限:
我们知道数字体态更改权限的方式为“三个数字”的组合,那么在这三个数字之前再加上一个数字的话,最前面的那个数字就代表这几个权限了!
- 4 为 SUID
- 2 为 SGID
- 1 为 SBIT
举例吧:
[root@study ~]# cd /tmp [root@study tmp]# touch test <==创建一个测试用空档 [root@study tmp]# chmod 4755 test; ls -l test <==加入具有 SUID 的权限 -rwsr-xr-x 1 root root 0 Jun 16 02:53 test [root@study tmp]# chmod 6755 test; ls -l test <==加入具有 SUID/SGID 的权限 -rwsr-sr-x 1 root root 0 Jun 16 02:53 test [root@study tmp]# chmod 1755 test; ls -l test <==加入 SBIT 的功能! -rwxr-xr-t 1 root root 0 Jun 16 02:53 test [root@study tmp]# chmod 7666 test; ls -l test <==具有空的 SUID/SGID 权限 -rwSrwSrwT 1 root root 0 Jun 16 02:53 test
最后一个例子就要特别小心啦!怎么会出现大写的 S 与 T 呢?不都是小写的吗? 因为 s 与 t 都是取代 x 这个权限的,但是你有没有发现阿,我们是下达 7666 喔!也就是说, user, group 以及 others 都没有 x 这个可执行的标志( 因为 666 嘛 ),所以,这个 S, T 代表的就是“空的”啦!怎么说? SUID 是表示“该文件在执行的时候,具有文件拥有者的权限”,但是文件 拥有者都无法执行了,哪里来的权限给其他人使用?
当然就是空的啦! ^_^
4.0)、搜寻指令:
- which (寻找“可执行文件”)
范例一:搜寻 ifconfig 这个指令的完整文件名 [root@study ~]# which ifconfig /sbin/ifconfig
- whereis (由一些特定的目录中寻找文件文件名)
范例一:请找出 ifconfig 这个文件名 [root@study ~]# whereis ifconfig ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
注意:
whereis 只找几个特定的目录,主要是针对 /bin /sbin 下面的可执行文件,速度比较快;而 find 是直接搜寻硬盘,比较慢。
- locate
[root@study ~]# locate [-ir] keyword 选项与参数: -i :忽略大小写的差异; -c :不输出文件名,仅计算找到的文件数量 -l :仅输出几行的意思,例如输出五行则是 -l 5 -S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等 -r :后面可接正则表达式的显示方式 范例一:找出系统中所有与 passwd 相关的文件名,且只列出 5 个 [root@study ~]# locate -l 5 passwd /etc/passwd /etc/passwd- /etc/pam.d/passwd /etc/security/opasswd /usr/bin/gpasswd
重点来了!!!
- find
1、与时间有关的选项
[root@study ~]# find [PATH] [option] [action] 选项与参数: 1. 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明 -mtime n :n 为数字,意义为在 n 天之前的“一天之内”被更动过内容的文件; -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件文件名; -mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件文件名。 -newer file :file 为一个存在的文件,列出比 file 还要新的文件文件名
范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出 [root@study ~]# find / -mtime 0 # 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前, # 有变动过内容的文件都会被列出来!那如果是三天前的 24 小时内? # find / -mtime 3 有变动过的文件都被列出的意思!
范例二:寻找 /etc 下面的文件,如果文件日期比 /etc/passwd 新就列出 [root@study ~]# find /etc -newer /etc/passwd # -newer 用在分辨两个文件之间的新旧关系是很有用的!
特别的:
# 那如果是“4天前的那一天”就用“ find /var -mtime 4 ”。有没有加上“+, -”差别很大喔 +4代表大于等于5天前的文件名:ex> find /var -mtime +4 -4代表小于等于4天内的文件文件名:ex> find /var -mtime -4 4则是代表4-5那一天的文件文件名:ex> find /var -mtime 4
2、与使用者或群组名称有关的参数
选项与参数: 2. 与使用者或群组名称有关的参数: -uid n :n 为数字,这个数字是使用者的帐号 ID,亦即 UID ,这个 UID 是记录在 /etc/passwd 里面与帐号名称对应的数字。这方面我们会在第四篇介绍。 -gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在 /etc/group,相关的介绍我们会第四篇说明~ -user name :name 为使用者帐号名称喔!例如 dmtsai -group name:name 为群组名称喔,例如 users ; -nouser :寻找文件的拥有者不存在 /etc/passwd 的人! -nogroup :寻找文件的拥有群组不存在于 /etc/group 的文件! 当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者, 这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。
3. 与文件权限及名称有关的参数:
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.... 的属性存在!
一般情况下,能使用locate和whereis就尽量不要用find,因为快嘛!
指令与权限小结复习:
一、让使用者能进入某目录成为“可工作目录”的基本权限为何:
可使用的指令:例如 cd 等变换工作目录的指令;
目录所需权限:使用者对这个目录至少需要具有 x 的权限
额外需求:如果使用者想要在这个目录内利用 ls 查阅文件名,则使用者对此目录还需要 r 的权限。
二、使用者在某个目录内读取一个文件的基本权限为何?
可使用的指令:例如本章谈到的 cat, more, less等等
目录所需权限:使用者对这个目录至少需要具有 x 权限;
文件所需权限:使用者对文件至少需要具有 r 的权限才行!
三、让使用者可以修改一个文件的基本权限为何?
可使用的指令:例如 nano 或未来要介绍的 vi 编辑器等;
目录所需权限:使用者在该文件所在的目录至少要有 x 权限;
文件所需权限:使用者对该文件至少要有 r, w 权限
四、让一个使用者可以创建一个文件的基本权限为何?
目录所需权限:使用者在该目录要具有 w,x 的权限,重点在 w 啦!
五、让使用者进入某目录并执行该目录下的某个指令之基本权限为何?
目录所需权限:使用者在该目录至少要有 x 的权限;
文件所需权限:使用者在该文件至少需要有 x 的权限
实体操练
例题: 让一个使用者 dmtsai 能够进行“cp /dir1/file1 /dir2”的指令时,请说明 dir1, file1, dir2 的最小所需权限为何? 答: 执行 cp 时, dmtsai 要“能够读取来源文件,并且写入目标文件!”所以应参考上述第二点与第四点的说明! 因此各文件/目录的 最小权限应该是: dir1 :至少需要有 x 权限; file1:至少需要有 r 权限; dir2 :至少需要有 w, x 权限。 例题: 有一个文件全名为 /home/student/www/index.html ,各相关文件/目录的权限如下: drwxr-xr-x 23 root root 4096 Sep 22 12:09 / drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home drwx------ 6 student student 4096 Sep 29 02:23 /home/student drwxr-xr-x 6 student student 4096 Sep 29 02:24 /home/student/www -rwxr--r-- 6 student student 369 Sep 29 02:27 /home/student/www/index.html 请问 vbird 这个帐号(不属于student群组)能否读取 index.html 这个文件呢? 答: 虽然 www 与 index.html 是可以让 vbird 读取的权限,但是因为目录结构是由根目录一层一层读取的, 因此 vbird 可进入 /home 但是却不可进入 /home/student/ ,既然连进入 /home/student 都不许了, 当然就读不到 index.html 了!所以答案是“vbird不会读 取到 index.html 的内容”喔! 那要如何修改权限呢?其实只要将 /home/student 的权限修改为最小 711 ,或者直接给予 755 就可以啰! 这可是很重要的概念。
本章节重点回顾:
- 绝对路径:“一定由根目录 / 写起”;相对路径:“不由 / 写起,而是由相对当前目录写起”
- 特殊目录有:., .., -, ~, ~account需要注意;
- 与目录相关的指令有:cd, mkdir, rmdir, pwd 等重要指令;
- rmdir 仅能删除空目录,要删除非空目录需使用“ rm -r ”指令;
- 使用者能使用的指令是依据 PATH 变量所规定的目录去搜寻的;
- ls 可以检视文件的属性,尤其 -d, -a, -l 等选项特别重要!
- 文件的复制、删除、移动可以分别使用:cp, rm , mv等指令来操作;
- 检查文件的内容(读档)可使用的指令包括有:cat, tac, nl, more, less, head, tail, od 等
- cat -n 与 nl 均可显示行号,但默认的情况下,空白行会不会编号并不相同;
- touch 的目的在修改文件的时间参数,但亦可用来创建空文件;
- 一个文件记录的时间参数有三种,分别是 access time(atime), status time (ctime), modification time(mtime),ls 默认显示的是mtime。
- 除了传统的rwx权限之外,在Ext2/Ext3/Ext4/xfs文件系统中,还可以使用chattr与lsattr设置及观察隐藏属性。 常见的包括只能新增数据的+a 与完全不能更动文件的 +i 属性。
- 新建文件/目录时,新文件的默认权限使用 umask 来规范。默认目录完全权限为drwxrwxrwx, 文件则为-rw-rw-rw-。
- 文件具有SUID的特殊权限时,代表当使用者执行此一binary程序时,在执行过程中使用者会暂时具有程序拥有者的权限
- 目录具有SGID的特殊权限时,代表使用者在这个目录下面新建的文件之群组都会与该目录的群组名称相同。
- 目录具有SBIT的特殊权限时,代表在该目录下使用者创建的文件只有自己与root能够删除!
- 观察文件的类型可以使用 file 指令来观察;
- 搜寻指令的完整文件名可用 which 或 type ,这两个指令都是通过 PATH 变量来搜寻文件名;
- 搜寻文件的完整文件名可以使用 whereis 找特定目录或 locate 到数据库去搜寻,而不实际搜寻文件系统;
- 利用 find 可以加入许多选项来直接查询文件系统,以获得自己想要知道的文件名。
Over...