《LINUX与UNIX SHELL编程指南》
读书笔记
二次发布版
张启峰
Email: zqf620@gmail
一些废话
这是笔者第一本发到网络上的 Linux 读书笔记,利用今年十一长假,重新编辑排版了一下,再次发到网上,姑且称为“二次发布版”吧!
关于《LINUX与UNIX SHELL编程指南》这本书,我看的是chinapub 的电子版,在很多网站都可以下载到。虽然看电子书很累人,但我还是建议不想掏钱买书的朋友看看(有钱也不一定买的到,反正我逛书店时就没有看到过有卖这本书的),它不愧为一本经典的讲解shell编程的书。
当初,写这本笔记时,花了很大的力气。参考了不少资料,在我认为书中某些讲的不详细的地方,在笔记中也记述的很详细。读者可以发现,这本笔记并不是简单的摘抄。
当然,记笔记的过程也是对我的一个提高,比如,awk和脚本编程中可以遇到的getopts,这两个东东我一直就没搞清楚,记笔记的过程中我就把它们搞清白了(我个人认为关键是要静下心来学)。希望这本笔记能对读者您有所帮助!
在笔记中给出了很多举例,这些例子都在 Red Hat Linux 9 和 Red Flag Advanced Server 4.1 中测试通过,大多数例子还给出了注释(使用C风格的双斜线”//”注释符号)。
好了,不再废话了。最后,给您推荐两本书,都是美国佬写的。一本是机械工业出版社出版的O'Reilly的《学习Bash(第二版)》,一本是人民邮电出版社出版的Sams的《精通Shell编程(第二版)》。
张启峰(zqf620@gmail)
2005年10月4日
第1章 文件安全与权限
1. 一个文件一经创建,就具有三种基本访问方式:
1) 读(r): 可以显示该文件的内容。
2) 写(w): 可以编辑或删除它。
3) 执行(x): 如果该文件是一个shell脚本或程序的话。
2. 按照所针对的用户,文件的权限可分为三类:
1) 文件属主: 创建该文件的用户。
2) 同组用户: 拥有该文件的用户组中的任何用户。
3) 其他用户: 即不属于拥有该文件的用户组的某一用户。
3.ls -l (列出目录内容)命令的输出的分析
drwxr-xr-x    2 root    root        4096 Oct 14  20:18 bin
1) 第1个部分第1个字符: 表示文件的类型,详细说明见下。
2) 第1个部分第2-10个字符: 分为3组(triplet),分别表示文件的属主、组用户和其它用户的权限。
3) 第2个部分: 表示该文件的硬链接的数目。
4) 第3个部分: 表示文件的属主。
5) 第4个部分: 文件的属主(root)所在的缺省组(也是root组)。
6) 第5个部分: 表示文件的长度(以字节byte为单位)。
7) 第6-7个部分:  Oct 14 20:18 表示文件的更新时间。
8) 第8个部分: 该文件的文件名。
4.文件的类型
1) d : 目录文件,目录也是一种文件 (directory)
2) l : 符号链接(指向另一个文件) (link)
3) b : 块设备文件 (block device)
4) c : 字符设备文件 (charactor device)
5) p : 命名管道文件 (named piple)
6) s : 套接字文件 (socket)
7) - : 普通文件,或者更准确地说,不属于以上几种类型的文件
5.文件的权限位
1) 一个文件的权限位由9个字符组成,分成3个triplet,分别表示文件属主(owner)、文件属主所属缺省组的用户(group)、系统中其他用户(other)所拥有的权限。
eg: rw- 表示可读写,不可执行 r-- 表示可读,不可写、执行
3) 在文件权限位的owner triplet第3个位置的字符如果设置为"s",称为SUID。当某用户执行该文件时,系统用文件owner的uid替代实际执行该文件的用户的uid,文件会认为是owner在执行它。
4) 在文件权限位的group triplet第3个位置的字符如果设置为"s",称为SGID。当某用户执行该文件时,系统用文件组拥有者的gid替代实际执行该文件的用户的gid。当在某个目录文件上设置SGID时候,则在该目录下的所有文件和子目录都会继承使用该目录的GID来代替实际执行者的GID。
5) 文件设置了SUID或SGID,一般来说文件的owner或group应该有执行(x)权限。如果没有x权限,设置SUID或SGID是没有意义的,triplet上第3个字符就会是"S"(大写)而不是"s"(小写)。eg: rwSr-Sr--
6) 给可执行文件设置SUID/SGID可能带来安全风险,许多系统因而忽略SUID/SGID权限设置
7) 在某些目录(如/tmp)的other triplet的第3个字符设置为"t"。一般来说,在目录的other triplet上设置w和x 权限,则任何用户都可以在该目录下执行、删除文件,而设置"t"的作用就是保证非目录的owner用户不能删除目录下的文件。
6.使用chmod命令改变权限位
1) 符号模式Usage: chmod [who]<operator><perm> file_name
① who: 可以是 u g o a,表示给文件的owner、group、other和all用户设置权限。省略时默认为a。
② operator: 可以是+ - =,分别表示增加、取消、指定权限
③ perm: 可以是 r w x s(suid和guid) t(粘性位) l(给文件加锁,使其他用户无法访问)
④ 举例: chmod u+xw o-w myfile  // 给myfile的owner增加x w权限,去除other用户的w权限
2) 绝对模式Usage: chmod mode file_name
① mode: 4位8进制数,每一位分别用于SUID和SGID、属主权限、组权限、其他用户权限。当用户给出的mod值小于4位时,系统会在数字前面加0补齐。
② 权限r w x 分别用数字4 2 1 表示, suid guid用4 2表示,各个triplet的数字相加可得mod值。
eg: rwxr-xr-- 为754,rwsr-xr-x 为4755, rwsr-sr-x 为6755  -rwxrwSr-- 为2764
7.目录文件的权限(r w x)的含义
1) r: 可以列出该目录中的内容。
2) w: 可以在目录中创建、修改文件。目录的w位不设置,即使拥有目录中某文件的w权限也不能写该文件。
3) x: 可以搜索和访问该目录。x位不设置,不能访问目录下的任何文件,即使拥有文件的权限。
8.chown和chgrp 修改文件的拥有权
1) chown Usage: chown [选项] [owner][.group] file_name
② chmod的常用选项: -R  对指定目录所有文件和子目录递归式地进行同样的操作
-h  如果file_name是符号链接,则只对符号链接本身进行操作
③ owner 和 .group 表示文件拥有者名和文件所属组名,可以使用uid/gid表示。两者不能同时省略
④ 举例: chown  http.http /etc/httpd  // 将目录/etc/httpd的属主修改为http,组修改为http
2) chgrp Usage: chgrp [选项] group file_name
① chgrp命令只能用来修改文件的所属组。chgrp和chown用法类似,选项也一样。
② 举例: chown http /etc/httpd  // 将目录/etc/httpd的所属组修改为http
3) 查询用户信息和用户所属组信息
id [user_name] 或 groups [user_name]
8.umask 确定系统创建文件时的缺省权限位。
1) Usage: umask [umask_mod]
2) umask_mod的计算方法: umask_mod=777-文件缺省权限值。
3) 系统不允许你在创建一个文件时就赋予它执行权限,即umask_mod为002时,创建文件的缺省权限值为665,创建目录的缺省权限值为775。
9.符号链接
1) Usage: ln -s source_path target_path
2) 存在2种类型的链接: 硬链接和软链接。软链接又称位符号链接,符号链接实际上是指向一个文件的指针,符号链接和Windows OS的快捷方式有点类似。
3) 不管是否在同一个文件系统中,都可以创建链接。在创建链接的时候,不要忘记在原有目录设置执行权限。链接一旦创建,链接目录将具有权限777(rwxrwxrwx),但是实际的原有文件的权限并未改变。
4) 举例: ln -s /var/tmp /home/zqf/tmp  // 在zqf主目录创建一个名为tmp,指向/var/tmp的符号链接
第2章 使用find和xargs
1.有时可能需要在系统中查具有某一特征的文件(如文件权限、文件属主、文件长度、文件类型等)。find是一个非常有效的工具,它可以递归式遍历当前目录甚至于整个文件系统(本地和网络文件系统)来查某些文件或目录,只要你具有相应的文件或目录的权限。
unix文件系统2.find命令的使用
1) Usage : find [path_name ...] [expression]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。