鸟哥的Linux私房菜——第十一章
视频链接:
土豆:http://www.tudou.com/programs/view/yT0PfIWU720
B站(推荐): http://www.bilibili.com/video/av9877318/
本章的目录如下,重点知识点我会点出来~
1. 目录与路径
1.1 相对路径与绝对路径 (绝对路径从/开始,相对路径是根据当前目录来算的,shell script推荐使用绝对路径)
1.2 目录的相关操作: cd, pwd, mkdir, rmdir ()
1.3 关于执行文件路径的变量: $PATH (echo $PATH,所谓的相对路径就是PATH搞出来的)
2. 档案与目录管理
2.1 档案与目录的检视: ls (ls -ail)
2.2 复制、移动与删除: cp,mv,rm (cp 文件 目录 or cp 文件 更名,rm -f强制 -r递归删除,mv移动或更名,mv 文件 更名, mv 文件 目录)
2.3 取得路径的文件名称与目录名称 (文件名basename,目录名dirname.用法后面跟上路径就ok)
3. 档案内容查阅:
3.1 直接检视档案内容: cat, tac, nl (cat 由第一行开始显示档案内容tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!nl 显示的时候,顺道输出行号!)
3.2 可翻页检视: more, less
3.3 资料撷取: head, tail (head取出前几行默认是10,head -n 20 文件,tail取出后面几行)
3.4 非纯文字文件: od (/usr/bin/passwd用cat就是乱码,od -t c以ASCII码形式)
3.5 修改档案时间与建置新档: touch
4. 档案与目录的预设权限与隐藏权限
4.1 档案预设权限:umask (umask很重要,直接打umask看权限,减权限。umask 022这样设置.umask的作用范围是这个用户的范围,换个用户就不行了)
4.2 档案隐藏属性: chattr, lsattr (chattr 常用-i -a , lsattr -aR)
4.4 档案特殊权限:SUID/SGID/Sticky Bit
4.3 档案类型:file (file直接后面跟文件,看看他是什么格式类型的)
5. 档案的搜寻: which, whereis, locate, find (which寻找执行档,whereis寻找特定档案)
touch修改档案时间:
chattr (设定档案隐藏属性) + - = 这三个操作符号
lsattr 显示档案隐藏属性
SUID:
会制作出 s 与 t 的权限,是为了让一般使用者在执行某些程序的时候, 能够暂时的具有该程序拥有者的
权限。 举例来说好了,我们知道账号与密码的存放档案其实是 /etc/passwd 与 /etc/shadow 。 而
/etc/shadow 这个档案的权限是什么?是『-r--------』。且他的拥有者是 root 喔!在这个权限中,仅
有 root 可以『强制』储存,其它人是连看都没有办法看的吶!
但是偏偏鸟哥使用 dmtsai 这个一般身份使用者去更新自己的密码时,使用的就是 /usr/bin/passwd 这个
程序, 却是可以更新自己的密码的,也就是说, dmtsai 这个一般身份使用者可以存取 /etc/shadow 这
个密码文件! 但!怎么可能?明明 /etc/shadow 就是没有 dmtsai 可以存取的权限啊!呵呵~这就是 s 这
个权限的帮助啦! 当 s 这个权限在 user 的 x 时,也就是类似上表的 -r-s--x--x ,称为 Set UID ,
简称为 SUID , 这个 UID 代表的是 User 的 ID ,而 User 代表的则是这个程序 (/usr/bin/passwd) 的
拥有者 (root 啊!)。 那么由上面的定义中,我们知道了,当 dmtsai 这个使用者执行 /usr/bin/passwd
时,他就会『暂时』的得到档案拥有人 root 的权限。
SUID 仅可用在『二进制制档案(binary file)』上, SUID 因为是程序在执行的过程中拥有档案拥有者的
权限,因此,他仅可用于 binary file , 不能够用在批次档 (shell script) 上面的!这是因为 shell
script 只是将很多的 binary 执行档叫进来执行而已!所以 SUID 的权限部分,还是得要看 shell script
呼叫进来的程序的设定, 而不是 shell script 本身。当然,SUID 对于目录也是无效的~这点要特别留
意。
SGID
进一步来说,如果 s 的权限是在 group 时,那么就是 Set GID ,简称为 SGID。 SGID 可以用在两个部
分喔!
• 档案:如果 SGID 是设定在 binary file 上面,则不论使用者是谁,在执行该程序的时候, 他
的有效群组 (effective group) 将会变成该程序的群组所有人 (group id)。
• 目录:如果 SGID 是设定在 A 目录上面,则在该 A 目录内所建立的档案或目录的 group ,将会
是 此 A 目录的 group !
一般来说, SGID 应该是比较多用在特定的多人团队的项目开发上, 在系统当中应该会比较少这个设定才
对~
Sticky Bit
目前只对目录有效,在具有
SBit 的目录下,使用者若在该目录下具有 w 及 x 的权限, 则当使用者在该目录下建立档案或目录时,
只有档案拥有者与 root 才有权力删除
which 寻找执行档
whereis寻找特定档案,相对于find来说,find很强大,但是find是搜索硬盘的,如果你的硬盘很老旧那速度就会~~你懂的~,这个时候whereis就显得相当好用
那么 whereis 到底是使用什么咚咚呢?为何搜寻的速度会比 find 快这么多?! 其实那也没有什么!这
是因为 Linux 系统会将系统内的所有档案都记录在一个数据库档案里面, 而当使用 whereis 或者是底下
要说的 locate 时,都会以此数据库档案的内容为准, 因此,有的时后你还会发现使用这两个执行档时,
会找到已经被杀掉的档案! 而且也找不到最新的刚刚建立的档案呢! 这就是因为这两个指令是由数据库
当中的结果去搜寻档案的所在啊!
另外,基本上 Linux 每天会针对 Linux 主机上所有档案的所在进行搜寻数据库的更新, 更新的程序就是
updatedb ,你可以在 FC4 系统的 /etc/cron.daily/slocate.cron 这个档案找到相关的机制呦!当然,
也可以直接使用 /usr/bin/updatedb 来更新数据库档案呢!
locate
find