1 / 86

第十一章 UNIX 实用程序

操作系统. 第十一章 UNIX 实用程序. 陆松年 snlu@sjtu.edu.cn. 11.1 目录操作. 显示用户当前所处的工作目录. 11.1.2 改变工作目录 cd. 11.1.1 显示工作目录 pwd. cd [ 目录名 ] “ 目录名” 缺省, cd 命令就使工作目录移到了 HOME 目录。. 11.1.3 列目录内容 ls. ls [ - 选项 ] [ 文件名表 ] 按字符顺序显示一个目录内的所有文件名。

salene
Télécharger la présentation

第十一章 UNIX 实用程序

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 操作系统 第十一章 UNIX实用程序 陆松年 snlu@sjtu.edu.cn

  2. 11.1 目录操作 显示用户当前所处的工作目录 11.1.2 改变工作目录cd 11.1.1 显示工作目录pwd cd [目录名] “目录名” 缺省,cd命令就使工作目录移到了HOME目录。

  3. 11.1.3 列目录内容ls ls [ -选项] [文件名表] • 按字符顺序显示一个目录内的所有文件名。 (1)‘l’长列表,除了文件名外,还列出每个文件的文件类型、文件权限、链接数、文件所有者、组名、文件大小、修改日期等信息,其输出形式为: -rwxrwxrwx 1 zhang zgroup 10478 May 15 8:18 filename (2)‘t’按文件的修改时间顺序列出所有的文件。 (4)‘a’将以‘.’开始的隐显文件名也显示出来。

  4. 11.1.4 创建新目录mkdir mkdir [-m 权限模式] 目录名 • 模式选项缺省时,mkdir以777的方式建立指定的目录项。 11.1.5 删除目录项rmdir rmdir [-p] 目录名 只有当一个目录是空的时候,才能删除它 。

  5. 11.2 文件操作 • 11.2.1 复制文件cp cp命令有三种格式 : cp 文件名1 文件名2 cp 文件…目录 cp -r 目录1 目录2 替代一个已存在的文件时要事先获得自己的确认,则可以使用 -i(对话)选项,只有用户键入Y或y(yes)时,该命令才替代原文件。

  6. 11.2.2 移动或重新命名文件mv mv 文件名1 文件名2 mv 文件…目录 mv 目录名1 目录名2 11.2.3 删除文件rm rm [-fi] 文件… -f(force)表示强制 -i表示对话方式 rm -r [-fi] 目录

  7. 11.2.4 文件的链接ln • 允许多个文件名与一个文件实体建立链接(硬链接),一个文件可以取多个名。 ln 文件名 新文件名 • 在另一个目录中为一个或多个文件建立同名链接: ln 文件…目录

  8. 11.2.5 符号链接ln -s • ln –s 命令建立的新的文件或目录与原来文件或目录的路径名映照。当你访问一个符号链接时,UNIX靠这个映照找到原文件的路径,并对其进行访问。这种链接方法又称为软链接。通过软链接访问文件的速度比硬链接稍慢一些。 • ls -l /bin/sh lrwxr-xr-x 1 root 14 Sep 25 14:17 /bin/sh -> ../usr/bin/sh

  9. 11.2.6 报告两个文件的差别 • diff [-bi] 文件1 文件2 以编辑指令的形式逐行显示两个文件的差异。 -b忽略由于空格及制表符而引起的差异。 -i忽略字母的大小写差异。 • diff命令也能用于比较二进制文件,例如比较长度相同的不同版本的可执行代码。由于二进制文件没有行结构,diff程序将不显示所有的编辑行信息。

  10. 11.2.7 推测文件的类型file • file 文件… 给出文件的类型。 • 对于正文文件,file程序检查它的前512字节内容,试图猜测所用的语言是C语言、FORTRAN、Shell等程序设计语言,还是英文、法文、西班牙文等文字。因为是猜测,类型确定并非绝对可靠。 • 对于二进制文件,file试图确定文件是否是可执行的目标文件、库文件和cpio等映象文件。 • 凡是file不能识别的二进制文件就归为“数据”一类。

  11. 11.2.8 查找文件find • find 目录 [条件] [操作] -mtime [+|-]n指定文件的修改时间。 -name 文件名 是find最重要的条件。 • 文件名中可包含Shell 的元字符,由于元字符是由find解释和扩展的,故必须予以转义。 -print印出找到文件的带有路径的文件名,是最常用的操作。 -exec 对找到文件要执行的Shell命令。命令的参数为“{ }”,它将由find 命令找到的文件名替换,命令的末尾为转义的分号。 -ok 类似 -exec,但在执行命令前,并等待用户确认,用户键入y(yes)后才执行。

  12. 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文件。

  13. find . -print 印出当前目录子树下的全部文件: 选项-print的作用可以通过执行echo命令来实现: find . -exec echo {} \; 删除一星期以前的新闻项: find /usr/news -mtime +7 -exec rm {} \; 或更安全地,在删除前征求用户意见: find /usr/news -mtime +7 -ok rm {} \;

  14. 11.2.9 改变文件的属主chown chown 新属主 文件…或 chown -r 新属主 目录 第二种格式用于(递归地)改变目录以及该目录下的所有文件和子目录的属主。 chown user *.doc 将当前目录下以 .doc为后缀的所有文件的属主改变为user。当一个用户将文件的所有权转交给其他的用户后,立即失去了对该文件的控制权。

  15. 11.2.10 改变文件的存取方式chmod • 本命令用于改变文件主、组用户和其他用户对文件或目录的存取许可权,只有文件主或超级用户有权改变文件存取权。 chmod 模式 文件…|目录… chmod 777 file 将文件file的权限置为所有的用户都可读可写可执行。 chmod 644 file 将文件file的权限置为文件主可读可写,组用户和其他用户只有读许可。

  16. 可用符号表示文件的存取模式 u (user)文件主 g (group)同组用户 o (other)其他用户 a (all)所有用户 + 添加存取许可 - 取消存取许可 r (read)读许可 w (write)写许可 x (excute)执行许可 s 执行时置进程的有效用户标识数为文件主的标识数。 chmod ug+w file 给文件的文件主和组用户添加写许可。

  17. chmod a+rx file 给所有的用户增加读和执行文件的许可。 chmod go+s file 组用户和其他用户执行文件时的有效进程标识数置文件主标识数。/etc/passwd文件普通用户是不能修改的,但用户能用passwd命令改变自己的口令,从而修改了passwd文件,这是由于可执行代码文件/bin/passwd的文件主是root,且该文件的s位置位。

  18. 11.2.11 设置屏蔽码umask umask [三位八进制数] • 三位八进制数分别表示文件主,同组用户和其他用户的读/写/执行权限。 • 执行了umask命令后,新建文件的实际权限为创建时的权限值减去umask命令指定的八进制数值。 • umask 022 命令去掉创建文件时同组用户和其他用户的写权限,用方式777创建的文件变成方式755。

  19. 11.2.12 存取DOS文件 一些微机上的UNIX系统,如XENIX,系统V和SCO UNIX等,为了方便用户存取DOS格式的文件,提供了若干存取DOS软盘文件的系列命令,以便于用户在DOS系统和UNIX系统之间传递文件。主要的命令有: doscatdosfile doscpdosfileunixfile或 doscpunixfiledosfile dosdirdosdirectory dosrmdosfile dosfile格式为 驱动器 :文件名。 unixfile格式为 带路径的UNIX文件名。例 doscp a:file ./file 将软驱A盘中的文件file拷贝至UNIX中。

  20. 11.3 显示和打印 11.3.1 回应命令行上的参数echo echo [-n] 参数表 • echo命令看似平淡无奇,其实它是最常用的命令之一,特别是在Shell程序设计中。echo命令可用于显示命令行中的字符串常数,Shell变量值,产生诊断信息,向管道发送数据等。如 echo the home directory : $HOME • echo命令要显示的内容中如含有* 等元字符,那它将被扩展成当前目录下的一组文件名,因此必须使用转义符‘\’或单引号将它们括起来。 • 如果使用双引号,那么双引号中的$ 、\ 、单引号和元字符的特殊含义都不受影响。 • 选项 -n使得echo命令在输出一行后不换行。

  21. 11.3.2 连接并显示文件cat cat(catenate连接)的功能是按顺序读入参数部分的所有文件,并将其写至标准输出。 cat preface chapter* > book • 如cat的参数部分只有一个文件,则简单地显示单个文件内容;如cat的参数部分无文件,cat将从标准输入中读入内容,并将其写至标准输出。 • 在cat命令中可带若干个选项,其中较有用的是 -v选项,该选项使控制字符也显示出来。

  22. 11.3.3 分页显示程序more • 如用cat显示一个不太短的文件,大部分数据在人眼抓住它之前就在屏幕上滚过去了。使用more命令,可以一次一屏地显示文件。 more [+起始行号] | [+/初始查找模式] [文件] • 其中[+ 起始行号]和[+ /初始查找模式]这两个选项不能同时使用。如没有这两个选项,more从文件头开始显示。文件参数缺省,more从标准输入读。 • more程序每输出一屏后,在屏幕下方给出类似这样的提示信息: - More - - ( 20% ) • (从中可知程序名more的来历。)提示还有数据没有显示完,已显示了全文件的20%。

  23. more内部命令: 用户可以输入以下的more内部命令: 空格键 显示下一屏。 RETURN键 显示下一行。 nf向下移动n屏,其中n是数字。 nb向上移动n屏,其中n是数字。 /模式 向下查找指定的字符串模式。 n重复前面查找命令。 =显示当前的行号。 h显示more所有命令的帮助信息。 q退出more。

  24. 11.3.4 显示文件的头部head和尾部tail • head命令用于显示文件的开始部分,其格式为: head [-显示行数] 文件 • 选项缺省时head显示文件的头十行。如不指明文件,head就从标准输入中读。 • tail命令用于显示文件的结尾部分,其格式为: tail [+起始行] 文件 tail [-起始行] 文件 [+起始行]指示tail程序从文件头数起的起始行开始显示至文件尾(tail是UNIX可不以‘-’字符引出选项的少数命令之一)。 [-起始行]指示tail程序从文件尾数起的起始行开始显示至文件尾。

  25. Head和tail的例子 tail -20 file • 显示file的最后20行。选项缺省,显示最后十行。文件名缺省,tail从标准输入中读。 • 如从文件的第51行起显示到第70行可用命令: head -70 file | tail -20

  26. 11.3.9 卸出文件od • 一般的显示或编辑程序不能处理二进制文件,但有时用户又要观察这类文件的内容,那么od(octal dump)可以各种格式显示二进制文件的内容。od命令的格式为: od [格式] [文件] [位移量] • od可按以下格式显示 -b按二进制显示。 -o按八进制显示,这是默认值。 -d按十进制显示。 -x按十六进制显示。 -c按ASCII码显示。

  27. 按ASCII码显示 • 当时,除了下列的转义代表不可印刷的字符外,其它不可印刷的字符用三位八进制数表示。 \o NULL \b退格 \f换页 \n换行 \r回车 \t制表符 • 位移量用于控制从文件中的哪一个位置开始显示,并以八进制表示。如果有一个句点加在位移量后,就解释为十进制数,如“11.”解释为十进制10。如果字符‘b’加在位移量后,该位移量就表示为块数。例 按八进制格式显示文件: od a.out 或 od -o a.out • 如果数据不是从文件中而是从标准输入中读取,在偏移量前就要加‘+’号。

  28. 11.4 过滤器 • 一个能从标准输入读取数据,经过选择和处理后将结果写向标准输出的程序,统称为“过滤器”。这类程序的作用很象物理实验室或工业生产中所用的过滤器,因此而得名。 • 从广义讲,象cat,head和tail和等程序都是过滤器,但在本节中我们仅涉及能对输入做一定变换和加工处理的过滤器。 • 有些过滤器的功能很强,要全部掌握很困难,这儿只介绍重要的过滤器中最常用的功能。

  29. 11.4.1 正则表达式 • 正则表达式(Regular Expression)是用于确定字符串模式的一个规则集。很多UNIX的过滤器和一些工具软件能使用通用而简洁的正则表达式自动、高效地搜索和处理字符串模式。UNIX的文件名匹配式有点类似于正则表达式,但其规则简单得多。 • 正则表达式中能使用很多的特殊符号,还有一些与字符串匹配时有关的规则,不幸的是这些符号和规则因不同的程序而稍有变化,因此在初学时还要查看与具体程序有关的手册。

  30. 1.正则表达式中的特殊符号 在正则表达式内某些符号是特殊符号,这些符号及意义列举如下: ·能与除换行符之外的行内任何字符相匹配。 * 匹配前一字符的零次或多次出现。*如紧跟在字符类后,则和该字符类中任何字符组成的串相匹配。 \用于改变特殊符号的含义,也可后跟一字符的八进制表示。 [ ]定义字符类,匹配方括号内的任何一个字符。在方括号内还有三个字符有 特殊含义: ‘-’指示字符的范围, ‘\’是转义符,紧跟在左方括号后的‘^’是脱字符,匹配所有不出现在方括号内的字符。

  31. ^ 如出现在正则表达式首,则表示行首,^ 的下一个字符串应当是行首的头一个字符串。如 ^begin, begin仅出现在行首才匹配。 $如出现在正则表达式末尾,则表示行尾,$前面的正则表达式所匹配的字符串仅出现在行尾才匹配。  双引号内的字符在匹配时忽视其特殊含义。 \<字首匹配。 \>字尾匹配。

  32. 正则表达式例 ab*c与a后面跟零个和多个b再紧跟c的字符串匹配。 ·*与包含空串在内的任何字符串相匹配。 [a-zA-Z]*只与字母组成的字符串或空串相匹配。 abc仅匹配abc。 (·*)与在‘( ’和‘)’之间的尽可能长的字符串相匹配,如匹配((first)and (second))。 ([^()]*)与以‘( ’开始和‘)’结束的最短字符串相匹配。如在上面字符串中,单匹配(first)和(second)。

  33. 2.正则表达式的匹配规则 • 正则表达式在匹配字符串时遵循下面的规则: (1) 正则表达式总是尽可能与最长的字符串相匹配。例: Th·*is与 This is a genesis匹配。 (·*)与((This) and (That))匹配。而 ([^()]*)与(out (in) side) 中 (in)匹配。 (2) 一个正则表达式不排斥另一正则表达式。 • 如果一组正则表达式由两个正则表达式组成,那么第一个表达式与尽可能长的字符串相匹配后,并不排除第二个表达式与第一个表达式已匹配部分的串相匹配。例: s.*gs与 singing songs匹配,而 s.*ing又与 singing 匹配。

  34. (3) 空正则表达式总是代表最后那次使用的正则表达式。例如在vi程序中执行了查找字符串命令 /str1 后,想再执行替换命令,那么可使用命令: s//str2 • 空正则表达式‘//’(两个‘/’之间不留空格)代表最后使用的正则表达式str1。 (4) 在替换字符串中(用于vi等程序),符号‘&’取正则表达式所匹配的搜索字符串的值。 • 下面的替换命令 s/[0-9][0-9]*/##&##/g 在当前行用符号##将数字字符串全部标记出来。

  35. 3.加标记的括号和加标记的数字 • 可用加标记的括号将正则表达式括起来,正则表达式的匹配规则并不试图和加标记的括号相匹配,所以加括号和不加括号的正则表达式所匹配的内容是相同的。如两个正则表达式: a\(b*\)c和 ab*c匹配的内容相同。 • 加标记的括号可以嵌套,如 \([a-zA-Z]*\([0-9]*\)\) • 单纯使用加标记的括号并没有什么用处,加标记的括号一般总与加标记的数字结合起来使用。

  36. 在正则表达式中,加标记的数字“\n”取第n次出现的以“\(”开头的加括号的正则表达式所匹配的字符串。用这个方法可以取得一个字符串中的子串或交换子串间的位置。例如当你用vi编辑一个文件时,可以用底行命令在正则表达式中,加标记的数字“\n”取第n次出现的以“\(”开头的加括号的正则表达式所匹配的字符串。用这个方法可以取得一个字符串中的子串或交换子串间的位置。例如当你用vi编辑一个文件时,可以用底行命令 1,$ s/\([^,]*\),\(·*\)/\2\1/ • 将文件中所有下面格式的人员表 last-name, first_name initial • 改为下列格式 first-name initial last_name • 该命令访问文件中的第1行到最后一行(以$标记),由替换命令s搜索用正斜线‘/’相隔的前一个加括号的正则表达式所匹配的字符串,并利用后面加标记的数字交换字符串的位置。

  37. 11.4.2 排序或合并文件sort 1.sort命令用于排序: sort [-fdnbri] [+位置 [-位置] ] [-o 输出文件] [输入文件] f 表示对字母的大、小写不作区别。 d按字典排序,比较时只有字母、数字、空格和制表符才有意义。 n 按数值排序。 b当指定排序字段时,忽视作为界符的所有空白字符的值。 r表示反序。

  38. 如不指定位置选项,则排序参照的是整行。否则排序从“+位置”开始到“-位置”结束。如不指定位置选项,则排序参照的是整行。否则排序从“+位置”开始到“-位置”结束。 • 位置指示具有“m.n”的形式,其中m表示从行的起点处所要跳过的字段数,n表示还要跳过的字符数。 • 如位置指示“+2.4”表示从行首跳过二个字段,再跳过四个字符之后开始排序。位置指示符“-0.5”表示排序码从起始位置开始,跳过零个字段,再跳过五个字符之后结束。 sort -fb +1 file • 按第二字段对文件file进行排序,忽视大小写字母间的差别以及段间空格,排序结果写向标准输出。 • -o指定输出文件,如输出文件与输入文件同名,排序也能正常进行。如不指定- o选项,写至标准输出上。

  39. 2.sort命令用于合并文件 sort [-cmu] [-o 输出文件] 已排序文件… -c检查输入文件,验证是否是已排序文件,是,才产生输出。 -m如输入文件已排好序,就进行合并。 -u对有相同关键字的行,只输出一行。 • 当指定 -m(merge)选项时,sort归并已排好序的数据文件,并不再检验各个文件本身是否有序,以提高执行效率。例 sort -m sortedfile[1-4] -o sortedfile

  40. 11.4.3 抽取指定模式的行grep grep 可以在输入数据中查找包含指定模式的所有行,并将这些行写至标准输出。grep命令实际上是一个家族系列,与之相关的另外两个命令是fgrep和egrep。 fgrep (fixed character grep)表示固定字符grep,只能用于查找固定的字符串,因此即使在计算机内存有限时查找速度也较快。 grep 可以查找固定的字符串模式,也能查找带有通配符的模式,如H[a-y]*y。 egrep 功能最强,可查找比grep更复杂的字符串模式——正则表达式。

  41. grep命令的格式 grep [-inwv] 模式 [文件…] -i(ignore)忽略大小写字母的差别。 -n(number)在输出中添加相关行号。 -w(words)用于指定只匹配完整的字。 -v(reverse)选择所有不包括指定模式的行。 grep中所用的正则表达式与vi中使用的相似,都是有限正则表达式,可以使用$ 、* 、[ 、^ 、|、( 、)和 \ 等元字符。由于正则表达式的元字符和Shell元字符部分重迭,因此习惯上都用单引号括住字符串模式。例 ls -l | grep ^. . . . . . . rw 在当前目录下列出其他用户能读写的文件。

  42. egrep在匹配正则表达式上有扩充规则 • 对grep来说,egrep在匹配正则表达式上有扩充规则,例如, • 括号作为字符组,(ab)*匹配空串、ab、abab、ababab等。 • ‘| ’表示或,Sataday|Sunday匹配Sataday或Sunday,也可写成S(ata|un)day。 • 除了‘ * ’外,egrep还提供另外两个后操作符‘+ ’和‘ ?’: x+表示x的一个或多个出现。 x? 表示x的零个或多个出现。

  43. 11.4.4 流编辑程序sed • vi通过人机交互编辑程序,sed是从ed发展而来,它以非交互方式根据命令表自动地对文件或输入流进行编辑,然后将编辑后的行送至标准输出(原文件内容不变)。 sed [-n] -f 命令文件 [文件…] sed [-n] 命令表 [文件…] -f使sed从命令文件中读出命令。 -n不复制文本行到标准输出,除非在命令表中有显式的打印命令(p)。

  44. sed每次读入一行,并根据命令表处理行的内容,然后将编辑后的行送至标准输出。 sed s/unix/UNIX(TM)/g file • sed命令表由一行或多行组成,每行格式为: [地址[,地址]] 命令 [参数表] • 如地址缺省,sed就处理文件中的所有行。例: sed  1,3 d  file • 删去文件的第一行到第三行,标准输出流中不包括这三行。

  45. 一个正则表达式也是地址,它选择包含和表达式匹配的行,作地址的正则表达式必须用斜线定界。一个正则表达式也是地址,它选择包含和表达式匹配的行,作地址的正则表达式必须用斜线定界。 sed  /DONE/ d  file > newfile • 在sed中常用的命令为: d (delete)将sed所选出的文本行删去。 a(append)将一行或若干行加到当前选择的行后,如不给出地址,就加到每一行后。附加命令的格式为: [地址] a\ 加入的文本行1\ 加入的文本行2\ …. 加入的文本行n • 除了最后一行外,每一个添加行必须以反斜线结束。注意,a命令不能使用双地址。

  46. i (insert)将一行或若干行加到当前选择的行前,该命令与a命令类似。 c (change)类似与a命令,但它用文本行替代选择行(可用双地址)。 s(substitute)格式为 [地址[,地址]] s/模式/替换串/[g] [p] 模式是一正则表达式。 g (globe)替换选择行上所有重复出现的模式。 p (print)将所有替换行送至输出,即使有- n选择项也如此。- n选项与p命令相结合,sed只输出替换行。 w file (write)将输出送至指定文件。 q sed立即退出处理。 !命令 将命令作用于没选中的每一行。 {命令…}花括号的一组命令对选择行都进行操作。

  47. sed  s /·* //  file 删除file中所有以制表符(以表示)为分隔符的第一字段。 sed 3q打印输入的前三行后退出,相当于head -3命令。 sed -n /pattern/p完成与grep pattern相同的工作。 sed -n /pattern/!p相当于grep -r pattern sed -n /pattern/w file1 /pattern/!w file2 file 将与pattern匹配的行写至file1,不匹配的行写至file2。

  48. 11.4.5 模式扫描和处理语言awk • awk是一种模式查找和处理的语言,它支持面向字段或域的操作,是UNIX中功能最强的过滤器。 • awk得名于它的三个作者 Alfred V.Aho,Peter J.Weinberger 和 Brian W.Kernighan。 • awk的使用方法类似于sed,但它的操作细节主要来源于C语言,而不是文本编辑,它的语句和表达式与C类似。

  49. awk的格式为 awk [-F 分隔符] 程序 [文件…] 或 awk [-F 分隔符] -f 程序文件 [文件…] 程序的格式为 模式 { 执行动作 } 模式 { 执行动作 }

  50. awk处理过程 • awk每次从文件中读取一行,然后依次和每一个模式比较,如匹配,就执行相应的动作。 • 模式或动作可以缺省,模式缺省时,按动作处理每一行。动作缺省时,表示打印匹配行。 • awk能将输入行分成字段,缺省时字段分隔符是空白符(任意数目的空格符和制表符)。当有[- F 分隔符]选项时,以- F后说明的字符为分隔符。

More Related