1、第十章 UNIX实用程序,10.1 目录操作,10.1.1 显示工作目录pwd,显示用户当前所处的工作目录,10.1.2 改变工作目录cd,cd 目录名 “目录名” 缺省,cd命令就使工作目录移到了HOME目录。,10.1.3 列目录内容ls,ls -选项 文件名表 按字符顺序显示一个目录内的所有文件名。 (1)l 长列表,除了文件名外,还列出每个文件的文件类型、文件权限、链接数、文件所有者、组名、文件大小、修改日期等信息,其输出形式为:-rwxrwxrwx 1 zhang zgroup 10478 May 15 8:18 filename(2)t 按文件的修改时间顺序列出所有的文件。 (4)
2、a 将以.开始的隐显文件名也显示出来。,10.1.4 创建新目录mkdir,mkdir -m 权限模式 目录名 模式选项缺省时,mkdir以777的方式建立指定的目录项。,10.1.5 删除目录项rmdir,rmdir -p 目录名 只有当一个目录是空的时候,才能删除它 。,10.2 文件操作,cp命令有三种格式 : cp 文件名1 文件名2 cp 文件 目录 cp -r 目录1 目录2 替代一个已存在的文件时要事先获得自己的确认,则可以使用 -i(对话)选项,只有用户键入Y或y(yes)时,该命令才替代原文件。,10.2.1 复制文件cp,10.2.2 移动或重新命名文件mv,mv 文件名1
3、 文件名2 mv 文件 目录 mv 目录名1 目录名2,10.2.3 删除文件rm,rm -fi 文件-f(force)表示强制 -i 表示对话方式 rm -r -fi 目录,10.2.4 文件的链接ln,允许多个文件名与一个文件实体建立链接(硬链接),一个文件可以取多个名。ln 文件名 新文件名 在另一个目录中为一个或多个文件建立同名链接: ln 文件 目录,10.2.5 符号链接ln -s,ln s 命令建立的新的文件或目录与原来文件或目录的路径名映照。当你访问一个符号链接时,UNIX靠这个映照找到原文件的路径,并对其进行访问。这种链接方法又称为软链接。通过软链接访问文件的速度比硬链接稍慢
4、一些。 ls -l /bin/shlrwxr-xr-x 1 root 14 Sep 25 14:17 /bin/sh - /usr/bin/sh,10.2.6 报告两个文件的差别,diff -bi 文件1 文件2 以编辑指令的形式逐行显示两个文件的差异。 -b 忽略由于空格及制表符而引起的差异。-i 忽略字母的大小写差异。 diff命令也能用于比较二进制文件,例如比较长度相同的不同版本的可执行代码。由于二进制文件没有行结构,diff程序将不显示所有的编辑行信息。,10.2.7 推测文件的类型file,file 文件给出文件的类型。 对于正文文件,file程序检查它的前512字节内容,试图猜测所
5、用的语言是C语言、FORTRAN、Shell等程序设计语言,还是英文、法文、西班牙文等文字。因为是猜测,类型确定并非绝对可靠。对于二进制文件,file试图确定文件是否是可执行的目标文件、库文件和cpio等映象文件。 凡是file不能识别的二进制文件就归为“数据”一类。,10.2.8 查找文件find,find 目录 条件 操作 -mtime +|-n 指定文件的修改时间。-name 文件名 是find最重要的条件。 文件名中可包含Shell 的元字符,由于元字符是由find解释和扩展的,故必须予以转义。 -print 印出找到文件的带有路径的文件名,是最常用的操作。-exec 对找到文件要执行
6、的Shell命令。命令的参数为“ ”,它将由find 命令找到的文件名替换,命令的末尾为转义的分号。-ok 类似 -exec,但在执行命令前,并等待用户确认,用户键入y(yes)后才执行。,find 举例,find . -name *.c.old -print 或 find . -name *.c.old -print find . -name *.c -mtime +7 -print 印出当前目录子树中7天以前修改过的文件 find /usr (-name *.c -o -name core) -print条件中的一对转义的园括号不能省,否则由于 -o的优先级低,仅仅印出core文件。,fi
7、nd . -print印出当前目录子树下的全部文件:选项-print的作用可以通过执行echo命令来实现: find . -exec echo ;删除一星期以前的新闻项: find /usr/news -mtime +7 -exec rm ;或更安全地,在删除前征求用户意见: find /usr/news -mtime +7 -ok rm ;,10.2.9 改变文件的属主chown,chown 新属主 文件 或chown -r 新属主 目录第二种格式用于(递归地)改变目录以及该目录下的所有文件和子目录的属主。chown user *.doc将当前目录下以 .doc为后缀的所有文件的属主改变为u
8、ser。当一个用户将文件的所有权转交给其他的用户后,立即失去了对该文件的控制权。,10.2.10 改变文件的存取方式chmod,本命令用于改变文件主、组用户和其他用户对文件或目录的存取许可权,只有文件主或超级用户有权改变文件存取权。 chmod 模式 文件|目录 chmod 777 file将文件file的权限置为所有的用户都可读可写可执行。chmod 644 file将文件file的权限置为文件主可读可写,组用户和其他用户只有读许可。,可用符号表示文件的存取模式,u (user)文件主 g (group)同组用户o (other)其他用户 a (all)所有用户+ 添加存取许可 - 取消存取
9、许可r (read)读许可 w (write)写许可x (excute)执行许可s 执行时置进程的有效用户标识数为文件主的标识数。chmod ug+w file给文件的文件主和组用户添加写许可。,chmod a+rx file给所有的用户增加读和执行文件的许可。chmod go+s file组用户和其他用户执行文件时的有效进程标识数置文件主标识数。/etc/passwd文件普通用户是不能修改的,但用户能用passwd命令改变自己的口令,从而修改了passwd文件,这是由于可执行代码文件/bin/passwd的文件主是root,且该文件的s位置位。,10.2.11 设置屏蔽码umask,umas
10、k 三位八进制数 三位八进制数分别表示文件主,同组用户和其他用户的读/写/执行权限。 执行了umask命令后,新建文件的实际权限为创建时的权限值减去umask命令指定的八进制数值。 umask 022 命令去掉创建文件时同组用户和其他用户的写权限,用方式777创建的文件变成方式755。,10.2.12 存取DOS文件,一些微机上的UNIX系统,如XENIX,系统V和SCO UNIX等,为了方便用户存取DOS格式的文件,提供了若干存取DOS软盘文件的系列命令,以便于用户在DOS系统和UNIX系统之间传递文件。主要的命令有:doscat dosfiledoscp dosfile unixfile
11、或doscp unixfile dosfiledosdir dosdirectorydosrm dosfiledosfile格式为 驱动器 :文件名。unixfile格式为 带路径的UNIX文件名。例doscp a:file ./file将软驱A盘中的文件file拷贝至UNIX中。,10.3 显示和打印,10.3.1 回应命令行上的参数echo echo -n 参数表 echo命令看似平淡无奇,其实它是最常用的命令之一,特别是在Shell程序设计中。echo命令可用于显示命令行中的字符串常数,Shell变量值,产生诊断信息,向管道发送数据等。如echo the home directory :
12、 $HOMEecho命令要显示的内容中如含有* 等元字符,那它将被扩展成当前目录下的一组文件名,因此必须使用转义符或单引号将它们括起来。 如果使用双引号,那么双引号中的$ 、 、单引号和元字符的特殊含义都不受影响。 选项 -n使得echo命令在输出一行后不换行。,10.3.2 连接并显示文件cat,cat(catenate连接)的功能是按顺序读入参数部分的所有文件,并将其写至标准输出。cat preface chapter* book 如cat的参数部分只有一个文件,则简单地显示单个文件内容;如cat的参数部分无文件,cat将从标准输入中读入内容,并将其写至标准输出。 在cat命令中可带若干个
13、选项,其中较有用的是 -v选项,该选项使控制字符也显示出来。,10.3.3 分页显示程序more,如用cat显示一个不太短的文件,大部分数据在人眼抓住它之前就在屏幕上滚过去了。使用more命令,可以一次一屏地显示文件。more +起始行号 | +/初始查找模式 文件 其中+ 起始行号和+ /初始查找模式这两个选项不能同时使用。如没有这两个选项,more从文件头开始显示。文件参数缺省,more从标准输入读。 more程序每输出一屏后,在屏幕下方给出类似这样的提示信息: - More - - ( 20% ) (从中可知程序名more的来历。)提示还有数据没有显示完,已显示了全文件的20%。,mor
14、e内部命令:,用户可以输入以下的more内部命令:空格键 显示下一屏。RETURN键 显示下一行。nf 向下移动n屏,其中n是数字。nb 向上移动n屏,其中n是数字。 /模式 向下查找指定的字符串模式。n 重复前面查找命令。= 显示当前的行号。h 显示more所有命令的帮助信息。q 退出more。,10.3.4 显示文件的头部head和尾部tail,head命令用于显示文件的开始部分,其格式为:head -显示行数 文件 选项缺省时head显示文件的头十行。如不指明文件,head就从标准输入中读。tail命令用于显示文件的结尾部分,其格式为:tail +起始行 文件tail -起始行 文件+起
15、始行 指示tail程序从文件头数起的起始行开始显示至文件尾(tail是UNIX可不以-字符引出选项的少数命令之一)。-起始行 指示tail程序从文件尾数起的起始行开始显示至文件尾。,Head和tail的例子,tail -20 file 显示file的最后20行。选项缺省,显示最后十行。文件名缺省,tail从标准输入中读。如从文件的第51行起显示到第70行可用命令:head -70 file | tail -20,10.3.9 卸出文件od,一般的显示或编辑程序不能处理二进制文件,但有时用户又要观察这类文件的内容,那么od(octal dump)可以各种格式显示二进制文件的内容。od命令的格式为
16、:od 格式 文件 位移量od可按以下格式显示-b 按二进制显示。-o 按八进制显示,这是默认值。-d 按十进制显示。-x 按十六进制显示。-c 按ASCII码显示。,按ASCII码显示,当时,除了下列的转义代表不可印刷的字符外,其它不可印刷的字符用三位八进制数表示。o NULL b 退格 f 换页n 换行 r 回车 t 制表符 位移量用于控制从文件中的哪一个位置开始显示,并以八进制表示。如果有一个句点加在位移量后,就解释为十进制数,如“11.”解释为十进制10。如果字符b加在位移量后,该位移量就表示为块数。例 按八进制格式显示文件:od a.out 或 od -o a.out 如果数据不是从
17、文件中而是从标准输入中读取,在偏移量前就要加+号。,10.4 过滤器,一个能从标准输入读取数据,经过选择和处理后将结果写向标准输出的程序,统称为“过滤器”。这类程序的作用很象物理实验室或工业生产中所用的过滤器,因此而得名。 从广义讲,象cat,head和tail和等程序都是过滤器,但在本节中我们仅涉及能对输入做一定变换和加工处理的过滤器。 有些过滤器的功能很强,要全部掌握很困难,这儿只介绍重要的过滤器中最常用的功能。,10.4.1 正则表达式,正则表达式(Regular Expression)是用于确定字符串模式的一个规则集。很多UNIX的过滤器和一些工具软件能使用通用而简洁的正则表达式自动、
18、高效地搜索和处理字符串模式。UNIX的文件名匹配式有点类似于正则表达式,但其规则简单得多。 正则表达式中能使用很多的特殊符号,还有一些与字符串匹配时有关的规则,不幸的是这些符号和规则因不同的程序而稍有变化,因此在初学时还要查看与具体程序有关的手册。,1正则表达式中的特殊符号,在正则表达式内某些符号是特殊符号,这些符号及意义列举如下: 能与除换行符之外的行内任何字符相匹配。* 匹配前一字符的零次或多次出现。*如紧跟在字符类后,则和该字符类中任何字符组成的串相匹配。 用于改变特殊符号的含义,也可后跟一字符的八进制表示。 定义字符类,匹配方括号内的任何一个字符。在方括号内还有三个字符有 特殊含义:-
19、指示字符的范围,是转义符,紧跟在左方括号后的是脱字符,匹配所有不出现在方括号内的字符。, 如出现在正则表达式首,则表示行首, 的下一个字符串应当是行首的头一个字符串。如 begin, begin仅出现在行首才匹配。$ 如出现在正则表达式末尾,则表示行尾,$前面的正则表达式所匹配的字符串仅出现在行尾才匹配。 双引号内的字符在匹配时忽视其特殊含义。 字尾匹配。,正则表达式例,ab*c 与a后面跟零个和多个b再紧跟c的字符串匹配。* 与包含空串在内的任何字符串相匹配。a-zA-Z* 只与字母组成的字符串或空串相匹配。abc 仅匹配abc。(*) 与在( 和)之间的尽可能长的字符串相匹配,如匹配(fi
20、rst)and (second)。()*) 与以( 开始和)结束的最短字符串相匹配。如在上面字符串中,单匹配(first)和(second)。,2正则表达式的匹配规则,正则表达式在匹配字符串时遵循下面的规则:(1) 正则表达式总是尽可能与最长的字符串相匹配。例:Th*is 与 This is a genesis 匹配。(*)与(This) and (That)匹配。而()*) 与(out (in) side) 中 (in) 匹配。(2) 一个正则表达式不排斥另一正则表达式。 如果一组正则表达式由两个正则表达式组成,那么第一个表达式与尽可能长的字符串相匹配后,并不排除第二个表达式与第一个表达式已
21、匹配部分的串相匹配。例:s.*gs 与 singing songs 匹配,而s.*ing 又与 singing 匹配。,(3) 空正则表达式总是代表最后那次使用的正则表达式。例如在vi程序中执行了查找字符串命令/str1后,想再执行替换命令,那么可使用命令:s/str2 空正则表达式/(两个/之间不留空格)代表最后使用的正则表达式str1。 (4) 在替换字符串中(用于vi等程序),符号&取正则表达式所匹配的搜索字符串的值。 下面的替换命令s/0-90-9*/#/g在当前行用符号#将数字字符串全部标记出来。,3加标记的括号和加标记的数字,可用加标记的括号将正则表达式括起来,正则表达式的匹配
22、规则并不试图和加标记的括号相匹配,所以加括号和不加括号的正则表达式所匹配的内容是相同的。如两个正则表达式:a(b*)c 和 ab*c 匹配的内容相同。 加标记的括号可以嵌套,如(a-zA-Z*(0-9*) 单纯使用加标记的括号并没有什么用处,加标记的括号一般总与加标记的数字结合起来使用。,在正则表达式中,加标记的数字“n”取第n次出现的以“(”开头的加括号的正则表达式所匹配的字符串。用这个方法可以取得一个字符串中的子串或交换子串间的位置。例如当你用vi编辑一个文件时,可以用底行命令1,$ s/(,*),(*)/21/ 将文件中所有下面格式的人员表 last-name, first_name i
23、nitial 改为下列格式 first-name initial last_name 该命令访问文件中的第1行到最后一行(以$标记),由替换命令s搜索用正斜线/ 相隔的前一个加括号的正则表达式所匹配的字符串,并利用后面加标记的数字交换字符串的位置。,10.4.2 排序或合并文件sort,1sort命令用于排序:sort -fdnbri +位置 -位置 -o 输出文件 输入文件f 表示对字母的大、小写不作区别。d 按字典排序,比较时只有字母、数字、空格和制表符才有意义。n 按数值排序。b 当指定排序字段时,忽视作为界符的所有空白字符的值。r 表示反序。,如不指定位置选项,则排序参照的是整行。否则
24、排序从“+位置”开始到“-位置”结束。 位置指示具有“m.n”的形式,其中m表示从行的起点处所要跳过的字段数,n表示还要跳过的字符数。 如位置指示“+2.4”表示从行首跳过二个字段,再跳过四个字符之后开始排序。位置指示符“-0.5”表示排序码从起始位置开始,跳过零个字段,再跳过五个字符之后结束。sort -fb +1 file按第二字段对文件file进行排序,忽视大小写字母间的差别以及段间空格,排序结果写向标准输出。-o 指定输出文件,如输出文件与输入文件同名,排序也能正常进行。如不指定- o 选项,写至标准输出上。,2sort命令用于合并文件,sort -cmu -o 输出文件 已排序文件-
25、c 检查输入文件,验证是否是已排序文件,是,才产生输出。-m 如输入文件已排好序,就进行合并。-u 对有相同关键字的行,只输出一行。 当指定 -m(merge)选项时,sort归并已排好序的数据文件,并不再检验各个文件本身是否有序,以提高执行效率。例sort -m sortedfile1-4 -o sortedfile,10.4.3 抽取指定模式的行grep,grep 可以在输入数据中查找包含指定模式的所有行,并将这些行写至标准输出。grep命令实际上是一个家族系列,与之相关的另外两个命令是fgrep和egrep。fgrep (fixed character grep)表示固定字符grep,只
26、能用于查找固定的字符串,因此即使在计算机内存有限时查找速度也较快。grep 可以查找固定的字符串模式,也能查找带有通配符的模式,如Ha-y*y。egrep 功能最强,可查找比grep更复杂的字符串模式正则表达式。,grep命令的格式,grep -inwv 模式 文件-i (ignore)忽略大小写字母的差别。-n (number)在输出中添加相关行号。-w (words)用于指定只匹配完整的字。-v (reverse)选择所有不包括指定模式的行。grep中所用的正则表达式与vi中使用的相似,都是有限正则表达式,可以使用$ 、* 、 、 、|、( 、)和 等元字符。由于正则表达式的元字符和She
27、ll元字符部分重迭,因此习惯上都用单引号括住字符串模式。例ls -l | grep . . . . . . . rw在当前目录下列出其他用户能读写的文件。,egrep在匹配正则表达式上有扩充规则,对grep来说,egrep在匹配正则表达式上有扩充规则,例如, 括号作为字符组,(ab)* 匹配空串、ab、abab、ababab等。 | 表示或,Sataday|Sunday匹配Sataday或Sunday,也可写成S(ata|un)day。除了 * 外,egrep还提供另外两个后操作符 + 和 ?:x+ 表示x的一个或多个出现。x? 表示x的零个或多个出现。,10.4.4 流编辑程序sed,vi通
28、过人机交互编辑程序,sed是从ed发展而来,它以非交互方式根据命令表自动地对文件或输入流进行编辑,然后将编辑后的行送至标准输出(原文件内容不变)。sed -n -f 命令文件 文件sed -n 命令表 文件-f 使sed从命令文件中读出命令。-n 不复制文本行到标准输出,除非在命令表中有显式的打印命令(p)。,sed每次读入一行,并根据命令表处理行的内容,然后将编辑后的行送至标准输出。 sed s/unix/UNIX(TM)/g filesed命令表由一行或多行组成,每行格式为:地址,地址 命令 参数表 如地址缺省,sed就处理文件中的所有行。例:sed 1,3 d file 删去文件的第一行
29、到第三行,标准输出流中不包括这三行。,一个正则表达式也是地址,它选择包含和表达式匹配的行,作地址的正则表达式必须用斜线定界。sed /DONE/ d file newfile 在sed中常用的命令为:d (delete)将sed所选出的文本行删去。a (append)将一行或若干行加到当前选择的行后,如不给出地址,就加到每一行后。附加命令的格式为:地址 a加入的文本行1加入的文本行2.加入的文本行n 除了最后一行外,每一个添加行必须以反斜线结束。注意,a命令不能使用双地址。,i (insert)将一行或若干行加到当前选择的行前,该命令与a命令类似。c (change)类似与a命令,但它用文本行
30、替代选择行(可用双地址)。s (substitute)格式为地址,地址 s/模式/替换串/g p模式是一正则表达式。g (globe)替换选择行上所有重复出现的模式。p (print)将所有替换行送至输出,即使有- n选择项也如此。- n选项与p命令相结合,sed只输出替换行。w file (write)将输出送至指定文件。q sed立即退出处理。!命令 将命令作用于没选中的每一行。命令 花括号的一组命令对选择行都进行操作。,sed s /* / file删除file中所有以制表符(以表示)为分隔符的第一字段。sed 3q 打印输入的前三行后退出,相当于head -3命令。sed -n /pa
31、ttern/p 完成与grep pattern相同的工作。sed -n /pattern/!p 相当于grep -r patternsed -n /pattern/w file1 /pattern/!w file2 file将与pattern匹配的行写至file1,不匹配的行写至file2。,10.4.5 模式扫描和处理语言awk,awk是一种模式查找和处理的语言,它支持面向字段或域的操作,是UNIX中功能最强的过滤器。 awk得名于它的三个作者 Alfred V.Aho,Peter J.Weinberger 和 Brian W.Kernighan。 awk的使用方法类似于sed,但它的操作细
32、节主要来源于C语言,而不是文本编辑,它的语句和表达式与C类似。,awk的格式为,awk -F 分隔符 程序 文件 或awk -F 分隔符 -f 程序文件 文件,程序的格式为,模式 执行动作 模式 执行动作 ,awk处理过程,awk每次从文件中读取一行,然后依次和每一个模式比较,如匹配,就执行相应的动作。模式或动作可以缺省,模式缺省时,按动作处理每一行。动作缺省时,表示打印匹配行。awk能将输入行分成字段,缺省时字段分隔符是空白符(任意数目的空格符和制表符)。当有- F 分隔符选项时,以- F后说明的字符为分隔符。,Awk的字段,who命令输出的每行是以制表符和空格符为分界符的包括五个字段的输出
33、:wang tty1 Sep 10 14:30you tty2 Sep 10 14:40 awk将各个字段依次命名为$1,$2,$NF,其中NF是awk自动置值的内部变量,其值为字段个数,在这儿,$NF也可写成$5。 注意,在awk内部引用的$1、$2等不是代表Shell位置参数。在awk中欲引用awk外部的Shell变量或命令,要用双引号及单引号将其括起来,如$WORKDIR。,Awk举例,如只输出按时间顺序的用户的登录时间和登录名,可键入命令who | awk print $NF, $1 | sort 由于在口令文件中,字段是由冒号分隔的,所以在BSD UNIX中,打印没有口令的用户的序号
34、,用户标识符和有关用户的信息可使用命令awk -F: $2 = printf( %4d %s %sn NR, $1, $5) /etc/passwd 命令中NR表示awk当前读入的记录数,也即行数。,BEGIN和END两个模式,BEGIN操作是在输入第一行前执行,可用于初始化变量,打印标题,设置字段分隔符等。END操作是在最后一行处理后执行。 字段的匹配操作可写成类似 $1/Eelectric/ 的形式,如awk BEGIN FS = : $1/wang/ print $0 END print NR /etc/passwd在一对/之间可以是正则表达式,如不指定字段,缺省值为$0。awk强大的功
35、能更表现在对输入数据进行运算和处理,如求字段中各数字之和与求平均值: s += $1 END print s, s/NR ,awk中还可调用十多个内部函数,index(s1,s2) 返回字符串s2处于字符串s1中的位置。如不存在,返回0。substr(s,m,n) 截取字符串s从第m个字符开始,长度为n的子串。length(s) 求字符串s的长度。getline( ) 读入下一个输入行,文件结束返回0,否则返回1。int(num) 返回num的整数值部分。,awk也提供了数组,数组的下标可以是数值的或非数值的(类似于 不需预定义的枚举类型)。由于awk是动态地分配数组的单元的,故数组的大小几乎
36、是“无限的”。反序打印字段的例子:awk lineNR = $1 END for (i = NR; i 0; i-)print linei file awk是个功能很强,很复杂的处理语言,sed,grep以及后面介绍的cut等提供的功能,awk都能实现,但由于awk程序大,功能复杂,执行时间也稍长。初学者也不必惧怕awk,可先从最简单的形式学起,再逐步练习新的功能。当需要时,awk会帮你大忙的。,10.4.6 裁剪指定的列cut,使用cut可完成数据库程序设计中关系的投影:cut -c 列表 文件cut -d 分隔符 -f 字段表 -s 文件 例:cut -c 1-10, 20-30 file
37、截取文件中从第1列至第10列,第20列至第30列的信息。-c选项与 -f选择必须使用一个,当使用 -f指定域(或栏)号时,cut的缺省字段分隔符是制表符。也可用 -d选项指定字段分隔符。如建立用户ID到用户名字之间的映射:cut -d : -f 1 ,5 /etc/passwd,10.4.7 组合数据列paste,paste命令与cut命令相反,它将包括一列(或多列)数据的若干文件组合成多列的大文件,其格式为:paste -d 分隔符 文件表 例paste area1 area2 area3 multiarea 缺省时,paste在字段之间加入制表符,也可在-d后面指定加入的分隔符。 在文件参
38、数中使用-可用于代替文件名,表示从标准输入中读入一行,如ls | paste - - - - 以四栏形式列出目录。,10.4.9 建立“三通”tee,tee命令读取标准输入,并将它转送到标准输出及一个或多个文件。例echo Error : $errno | tee logfiletee命令可由其它命令执行两次获得,但如果一个命令的执行时间较长,使用tee命令显然效率高得多。UNIX中有些命令就是这样,没有也行,但有了更好。tee命令可带两个选项,“ -i” 选项使得tee不理会中断,“ -a” 选项使得tee将输出添加到文件的后面。,10.5.2 显示磁盘空间df,df(disk free)命
39、令用于显示在任何已安装了的设备或包含指定目录的设备或远程网络文件系统还剩下多少自由空间(以块为单位)。df -t -f 设备名 | 目录 | RFS/NFS资源-t 显示已使用的块数及自由块数,并带总计。-f 只显示自由块数(有些系统是 -b )。-k 显示以k字节为单位的自由空间数。df命令允许参数为文件系统或安装了文件系统的目录名。当不带选项和参数时,df命令显示所有已安装设备中的自由空间。例:df /dev/u,10.5.3 显示磁盘使用情况,du命令报告一个目录连同它所有文件和子目录使用的磁盘空间(以块为单位)。du -ars 目录名a (all)显示目录中每一个文件使用磁盘空间的情况
40、。r (report)报告无法打开的目录和无法读的文件信息。s (summary)只统计所有文件及子目录所占空间的总数。,10.5.4 显示或设置终端参数stty,stty用于设置不同的参数,使得系统能正确地使用终端,是最依赖于机器的实用程序stty -a -g 参数 参数规定stty要设置或改变哪一个终端参数。不带连字符的表示打开该参数,带连字符的表示关闭该参数 stty -a 显示所有终端参数的设置情况。stty -g kill 显示杀行键kill的设置。stty kill k 设置杀行键为CTRL-K。stty 300 设置终端波特率为300。,10.5.5 磁带归档tar,tar(ta
41、pe archive)是建立档案文件或从档案中抽出文件的程序,档案文件以前通常建立在磁带上,也可以是盘文件。其格式为:tar key vf 目录|文件 key只能取下面关键字中的一个:c (create)建立一个新的档案带,将原先带上的文件清除。r (rear)将文件添加在磁带上原档案之后,保留原带上文件。x (extract)从磁带上读出文件。t (table of contents)显示磁带上文件表内容。,tar的选项,紧跟关键字后可指定一个或多个选项,关键字和选项前不必加连字符。v (verbose)在tar读或写文件时列出每个文件。f (file)使tar从f后的参数中读或写。该参数可
42、以是一个磁带或磁盘设备,也可以是档案文件。如用连字符作参数,tar就用标准输入或输出读写。o (owner)使读取文件的用户和用户组成为文件的用户ID和组ID,而不是磁带上原来的ID。,tar命令举例,tar cvf /dev/rsd0 ./为当前目录中所有文件,包括所有的子目录树建立磁带档案文件。这个命令常用于备份文件系统或在不同机器之前转储文件。tar xvf /dev/rsd0从磁带档案中抽取文件,存入当前目录中。所产生的局部目录系统结构同存档时相同。如当前目录或子目录中有同名文件,这样的文件将被替换。tar cvf cfiles.tar ./*.c将当前目录下的所有C源文件“打包”成一
43、个档案文件。后缀 .tar只是为了便于用户识别。这种操作对在远程系统之间传送多个目录文件很方便。,10.6 用户信息与进程控制,10.6.1 获取用户信息1显示登录用户的信息 who 2获得注册名 logname 3显示用户名与用户ID和组名与组ID idid命令显示调用进程的ID和名字,也显示组名和组ID。如果实际ID与有效ID不一致,那么两者都显示。,10.6.2 显示进程状态ps,ps(process state)用于显示进程的状态。ps命令有大量的选项,Berkeley Unix与System V Unix也存在不小差别。 如果用户只要显示自己终端上启动的进程状态的基本信息,只要输入不
44、带选项的ps命令即可。 ps命令输出的各栏信息分别是进程标识、终端标识、累计执行时间和启动进程的命令,其中第一栏和最后一栏的信息最重要。 ps命令本身也出现在最后一个显示行上,尽管当你看到ps命令的输出时,ps进程已完成了任务而终止了。,一些选项的作用,在System V中-u 用户ID 显示用户的所有进程的状态-g 组ID 显示用户组的所有进程的状态-e 显示当前运行的每一个进程的信息-f 长列表 显示所有进程的详细信息ps -ef | grep userid,10.6.3 挂起一段时间sleep,sleep命令用于挂起一段时间(以秒为单位)后再执行后面的命令。( sleep 50 ; co
45、mmand ) docommandsleep 60doneShell是通过产生一个新进程来执行sleep命令的。,10.6.4 统计一个作业的执行时间time,time 命令 命令参数命令执行完成后,time程序显示命令运行所用的总时间,系统花费的时间和命令的纯执行时间,单位为秒。,10.6.5 等待进程完成wait,wait nShell本身(不通过创建新进程的方法)执行wait,等待进程号为n的后台进程终止,并报告它的终止状态。如缺省参数n,则等待你的Shell上所有当前活动的后台进程终止。,10.6.6 杀死一个进程kill,当一个前台进程在运行时,一般可用CTRL-C键终止它。终止后台
46、进程可用命令kill -signal pid| - gid 信号signal的值可以是数字,也可以是符号。可用kill -l命令显示信号的符号名表。 如果忘记后台进程的标识数pid,可用ps命令查看。 信号的缺省值为15(SIGTERM),表示要关闭该进程所有的打开文件,文明地终止一个进程。 当用信号15不能终止一个后台进程时,你可使用信号9,该信号强制性地砍杀进程,但如果有的文件关闭不正确,过后会给你惹麻烦的。,10.6.7 忽略挂起和退出方法执行nohup,以“nohup 命令 命令参数” 方法执行命令,用户按了中断键或者甚至退出登录都不会中断命令的继续执行。该方法适用于重要的或需长时间运
47、行的程序的执行。 当用户在命令中不指定输出转向时,标准输出和标准错误输出都送至当前目录的nohup.out文件。如该文件不可写,则输出送至文件$HOME/nohup.out。 命令部分也可以是可执行的命令文件,或调用sh执行命令文件,如后台执行命令文件,并忽略挂起和退出:nohup command_file &,10.6.9 Solaris进程文件系统(PROCFS)补充,Solaris最具有创新的进程特性之一是进程文件系统(PROCFS),它被装载为/proc文件系统。所有当前活动进程的映像都根据它们的PID分别保存在/proc文件系统中。 以PID命名的目录下,包含很多子目录,这些目录中包含状态信息和相关的控制方法。 如: cd /proc/12345; ls l,proc工具,#/usr/proc/bin/pflags PID 显示进程的标志和数据模型细节。 pcred PID显示进程的有效UID、真实UID和GID 。 pmap PID查看进程的地址空间映射,和执行命令所需要的所有数据库。 psig PID显示与进程相关的信号动作。 pstack PID显示个进程中轻量级进程(LWP)的十六进制式栈跟踪信息。 pfiles PID显示进程打开的所有文件。 pwdx 显示进程当前工作目录。 ptree PID查看包括PID进程的所有父进程和子进程组成的进程树。,