资源描述
第8章 UNIX实用程序 8.1.1 文件查找工具find 8.1.2 模式匹配工具grep 8.1.3 排序工具sort 8.1.4 head和tail工具 8.1.5 网络基本工具 8.1.6 归档工具tar8.1 UNIX实用程序(一) 8.2.1 xargs命令 8.2.2 可执行文件查找工具 8.2.3 确定文件类型工具(file) 8.2.4 文件比较工具 8.2.5 解压缩工具 8.2.6 显示特殊字符8.2 UNIX实用程序(二)习题 掌握find命令的使用掌握grep命令并了解其工作原理掌握sort命令的使用掌握正则表达式的使用掌握head及tail命令的使用掌握如何定位命令所在路径掌握文件及目录比较命令掌握文件压缩命令 l命令语法:find path expressionl功能:1.在指定路径(一个或多个目录)和其下所有的子目录中递归的查找符合指定规则的文件2.显示找到的文件名或对这些文件执行命令 fleasmiscphone1phone2 childlargemediumsmallsyncsizeblue brown greensumwhiteyellowcolor miscoval roundspheresumsyncshapejoehome/ l一般来说find主要用于在指定目录结构中查找特定文件:$ find . -name sum ./color/sum ./shape/sum l在一些较老的UNIX系统(例如AIX 4.2),如果需要将查找到的文件名打印出来要指定选项-print: $ find . -name sum -print ./color/sum ./shape/sum 场景: 在当前目录下查找所有以c开头的文件 $ ls c* c1 c2 $ find . -name c* ./c1 ./c2 ./dir1/c3 ./dir1/c4 ./dir1/dir2/c5 ./dir1/dir2/c6/hometeam01dir1 dir2c1c2 c3c4 c5c6Shell扩展通配符find扩展通配符 l exec选项:对找到的文件执行命令,执行指定命令时不会产生交互。$ find . -name m* -exec ls -l ;-rw-r-r- 1 joe staff 83 Jan 11 15:55 ./shape/misc-rw-r-r- 1 joe staff 21 Jan 11 16:01 ./size/medium-rw-r-r- 1 joe staff 38 Jan 11 15:34 ./misc匹配的文件名 l ok选项:对找到的文件执行命令,执行指定命令时产生交互,询问用户是否执行该命令。 $ find . -name m* -ok rm ; ? y ? y ? n -typefd普通文件目录文件-size+n-n n大于“n”块(block,512字节)小于“n”块(block,512字节)等于“n”块(block,512字节)-mtime+x-x修改日期超过“x”天修改日期小于“x”天-permonummode访问权限等于“onum” (例如, 755)访问权限等于“mode” (例如, rwx)-useruser根据文件的所有者-o逻辑“或”运算-newerfile与参照文件相比较更“新” $ find . -name s* -type f -size +2 -exec ls -l ;-rwxr-xr-x 1 joe staff 1512 Jan 11 15:43 ./color/sum-rwxr-xr-x 1 joe staff 2148 Jan 11 15:57 ./shape/sum$ find . -perm 644 -mtime +4 -print./shape/misc$ find . -name fleas -o -name misc./misc./shape/misc./fleas $ find / -name security -print 2 errfile/var/security/usr/lpp/bos.sysmgt/inst_root/var/security/usr/lib/security/etc/security l命令语法:grep options pattern file1 file2 .l功能:1.从系统的一个或多个文件或从标准输入中查找匹配指定模式的行。2.指定模式可以是简单文本或是逻辑结构(正则表达式),正则表达式(Regular Expression)通过通配符来扩展。简单文本正则表达式 phone1:As of: 1/31/2000Anatole 389-8200Avis Betty 817 422-8345Baker John 656-4333Computer Room CE phone 689-5790Dade Travel Sue 422-5690Hotline HW 800 322-4500phone2:As of: 2/15/2000Anatole 389-8200Avis Betty 817 422-8345 Baker John 656-4333Computer Room CE phone 592-5712Dade Travel Sue 422-5690Hotline HW 800 322-4500 $ grep 800 phone1Hotline HW 800 322-4500$ grep 800 phone*phone1:Hotline HW 800 322-4500phone2:Hotline HW 800 322-4500l第一个例子从文件phone1中找出了包含800的行l第二个例子文件名使用了通配符,所以grep会在phone1和phone2中进行搜索 $ ps -ef | grep team01team01 10524 13126 0 09:27:45 pts/1 0:00 kshl找出当前运行的进程中用户team01的所有进程。通过管道,ps的标准输出作为grep的标准输入。$ ps aux | grep httpd.l找出进程名称包含httpd的进程 l命令语法:grep regular_expression filel正则表达式合法的元字符:.任意单个字符*零个或多个前一个字符aA枚举:a 或 Aa-f在a-f范围的任一字符a以a开头的任一行 Z$以z结尾的任一行 lgrep命令和find命令中使用元字符,都应该用单引号括起来,避免shell对元字符进行扩展。grep grep中的含义shell Shell中的含义作为一行开头老的管道符号$作为一行结束$表示变量.单个字符?单个字符.*零个或多个字符*多个字符 - 匹配之间的单个字符 - 匹配之间的单个字符 $ grep B phone1Baker John 656-4333$ grep 5$ phone1Avis Betty 817 422-8345$ grep DH phone1Dade Travel Sue 422-5690Hotline HW 800 322-4500$ grep A.*0$ phone1As of: 1/31/2000Anatole 389-8200 : 开头$: 结尾DH: 枚举.* : 零个或多个任意字符 -V显示文件中不匹配的行-c仅打印文件中匹配的行数-l仅显示有匹配的行的文件名-n显示匹配行序号-i寻找时忽略大小写-w模式作为整个字的匹配查找 lfgrep$ fgrep HW phone1Hotline HW 800 322-4500 legrep$ egrep 800|817 phone1 Avis Betty 817 422-8345Hotline HW 800 322-4500 fast grep: 快速查找,只能匹配固定字符串,不支持正则表达式 Extended grep: 扩展查找,支持多个模式的查找(或) grep ? l命令语法:sort -t delimiter+field.columnoptionsl功能:对指定文件中所有的行进行排序,并将结果到标准输出l命令选项:-d按照字典顺序仅比较字母、数字和空格-r反序排列-n对数字字段按算术值顺序排序 -t指定字段的分界符,缺省分界符是空格或tab键. $ cat animalsdog.2cat.4elephant.10rabbit.7$ sort animalscat.4dog.2elephant.10rabbit.7$ cat animals | sort +0.1rabbit.7cat.4elephant.10 dog.2$ cat animals | sort -t. -n +1dog.2cat.4rabbit.7elephant.10默认的sort排序 (0.0)按第二个字符排序 (0.1) -t: 分隔符 . -n: 数值顺序 +1: 第二个字段 (1.0) # more /etc/passwd | sort -t: -n +2 -6 root:!:0:0:/:/bin/ksh daemon:!:1:1:/etc: bin:!:2:2:/bin: sys:!:3:3:/usr/sys: adm:!:4:4:/var/adm: uucp:!:5:5:/usr/lib/uucp:$ ls l | moretotal 3-rwxr-xr-x 1 team01 staff 175 Dec 11 21:17 script-rwxr-xr-x 1 team01 staff 47 Dec 11 20:35 script1-rwxr-xr-x 1 team01 staff 318 Dec 11 21:41 test$ ls l | sort +4 -5 -n-rwxr-xr-x 1 team01 staff 47 Dec 11 20:35 script1 -rwxr-xr-x 1 team01 staff 175 Dec 11 21:17 script-rwxr-xr-x 1 team01 staff 318 Dec 11 21:41 testtotal 3 l命令语法:head -number_of_lines file(s)l功能:显示文件的前n行,默认是10行。$ head -5 myfile$ ls -l | head -12l命令语法:tail -number_of_lines | +starting_line_number file(s)l功能:显示文件后n行。-n表示显示文件的最后n行,+n表示从文件的第n行一直显示到文件尾.-f选项显示后10行并且动态刷新.$ tail -20 file $ tail +20 file l远程登录工具(telnet)l文件传输工具(ftp)l非交互式远程执行工具(rexec,rsh)l安全Shell套件(OpenSSH) 使用telnet命令可以登陆到远程主机l命令语法:telnet 主机名/ip地址 端口号(默认23)l示例:$ telnet IBM-p610Trying .Connected to IBM-p610.AIX Version 5 (C) Copyright by IBM and others 1982, 1996login: team01 使用ftp命令可以在主机间传输文件l命令语法:ftp 主机名/ip地址 端口号(默认21)l示例:$ ftp IBM-p610Connected to IBM-p610220 FTP server readyName (IBM-p610: team01): team05Password required for team05.Password: 230 User team05 logged in.ftpftp提示符,等待用户输入ftp子命令 常用ftp子命令pwd显示当前所在目录cd RemoteDir切换远程的目录dir (or) ls -l显示当前目录下的内容get ReomteFile localFile下载远程主机上的文件(到本地)put LocalFile remoteFile上传本地文件到远程主机help subcommand获取命令帮助quit (or) bye退出ftp 使用rexec 或 rsh 可以非交互式的执行远程命令.示例:$ rexec sys1 dateName (sys1:team01): team01Password (sys1:team01):Fri Nov 23 14:38:23 EST 2007$ rsh sys1 dateFri Nov 23 14:38:30 EST 2007 $lrexec可以通过使用本地主机的$HOME/.netrc文件保存账号信息实现自动登录lrsh 需要在远程主机的/etc/hosts.equiv或$HOME/.rhosts 配置文件中进行设置才能使用 l提供了更安全的命令来代替telnet, ftp, rexec, rlogin, rcp, rsh.数据加密后通过网络传输连接远程主机前要进行身份校验(用户密码和RSA密钥双重验证)l提供的命令:ssh:远程登录和远程执行命令scp:远程拷贝sftp: 加密FTP$ ssh team01sys1The authenticity of host sys1 (192.168.1.1) cant be established.RSA key fingerprint is 21:b0:91:cb:6b:c7:47:7d:96:8d:73:43:44:e8:e3:8d. Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added sys1,192.168.1.1 (RSA) to the list of known hosts.team01s password:$ tar (tape archiver)命令用来递归的保存目录中的所有文件,储存为一个档案文件(非压缩)AXI DISK AXItar -cvf /tmp/file.tar .tar -cvf /dev/rmt0 .tar -cvf /dev/fd0 . tar -xvf /dev/rmt0 tar -xvf /dev/fd0 tar -xvf /tmp/file.tar查看档案文件内容:tar -tvf /dev/rmt0 (or /dev/fd0) -c创建一个归档文件-t显示内容列表 -v显示详细的信息-f指定归档文件名-r扩展归档-x解包归档文件名 l The find command is used to recursively search directories for files with particular characteristics.l The grep command is used to select entire lines containing a particular pattern.l The head and tail commands are used to view specific lines in a file.l The sort command sorts the contents of the file by the options specified. 8.2.1 xargs命令 8.2.2 可执行文件查找工具 8.2.3 确定文件类型工具(file) 8.2.4 文件比较工具 8.2.5 解压缩工具 8.2.6 显示特殊字符8.2 AIX实用程序 (二)习题 l命令语法:command1 | xargs command2l功能:从标准输入读取一组参数,并运行一条命令使用该组参数。 $ cat oldfilelist file1 file2 file3 file4 $ cat oldfilelist | xargs -t rm rm file1 file2 file3 file4file1 file2 file3 file4 $ ls printlist $ vi printlist file1 file2 file3 file4 . file10 $ xargs -t qprt printlist qprt file1 file2 file3 file4 file5 . file10l使用xargs命令,可以一次打印printlist文件中列出的所有文件l-t参数的作用是启动跟踪模式,在命令执行之前将构造的命令输出到标准输出设备。 $ ls | xargs -t -I mv .old mv apple apple.old mv banana banana.old mv carrot carrot.oldl-I 选项通知xargs将ls命令的输出的每一行插入到位置处。l表示占位符。用户使用-I选项定义占位符所使用的符号,可以改成其他符号例如等。 lxargs与find组合使用$ find . -type f -mtime +30 | xargs -t rmrm ./file1 ./file2 ./file3 ./file4l只使用find$ find . -type f -mtime +30 -exec rm ; l两种方式的区别:这两种方式都可以删除同样的文件。第一条命令是rm执行4个参数,效率高,而且没有参数数量的限制。第二条命令是find找到的每个文件都去执行一次rm,效率低,而且有参数数量的限制。 lxargs,find和grep组合使用$ find . -type f | xargs -t grep -l Hellogrep -l Hello ./file5 ./file7 ./file10 ./file7$ find . type f | xargs t grep abcgrep abc ./file1 ./file2 ./file3 ./file4lfind查找当前目录下的普通文件,这些文件由xargs作为参数传给grep进行处理 $ find /home -type f -links +1 | xargs ls li127 -rw-r-r 3 team01 staff 156 July 26 13:11 /home/team01/myfile127 -rw-r-r 3 team01 staff 156 July 26 13:11 /home/team01/yourfile127 -rw-r-r 3 team01 staff 156 July 26 13:11 /home/team01/akafilel-links +1 硬链接数大于1l-type f 缩小搜索的范围(目录默认的情况的链接数都大于等于2) 如果不使用xargs可以改写成: $ find /home type f links +1 -exec ls li ;相同的i节点硬链接数文件大小相同 $ cat $HOME/.kshrcalias mylinks=find . -type f -links +1 | xargs ls -lialias myrm=find . -type f -mtime +30 | xargs rm$ mylinks127 -rw-r-r- 3 team01 staff . /home/team01/myfile127 -rw-r-r- 3 team01 staff . /home/team01/yourfile127 -rw-r-r- 3 team01 staff . /home/team02/akafile$ myrmENV=$HOME/.kshrc lfind命令可以查找所有类型的文件,如果只查找可执行文件,通常使用: which whereis whencel命令语法:which | whereis | whence 命令名称 $ which find grep根据PATH变量定义查找/usr/bin/find/usr/bin/grep$ whereis find grep在预定义路径中查找find: /usr/bin/findgrep: /usr/bin/grep$ whence -pv find grep根据alias和PATH查找grep is /usr/bin/grepfind is /usr/bin/find l命令语法:file .l功能:确定文件类型使用配置文件/etc/magic来进行识别 $ file /usr/bin/vi/usr/bin/vi:executable (RISC System/6000) or object module$ file c1c1: ascii text$ file /usr/bin/usr/bin: directory$ ls filenames$ cat filenamesc1 dir1$ file -f filenamesc1: ascii textdir1: directory AIX提供了三个文件比较的工具:ldifflcmpldircmp l命令语法: diff -options file1 file2l功能:比较两个文本文件之间的差异逐行分析比较的文本文件将它们之间差异输出到标准输出 ldiff命令只能对文本文件使用l命令选项:-w忽略空格键和tab键-b 忽略开头的空格键和tab键, 多个空格键看成一个-e 生成适合于ed行编辑器处理的格式ldiff的输出结果表示: 仅在file2中出现的行 $ diff names names.old1c1 Caroline4d3 SamCarolBobJimDonMary CarolineBobJimMarySamnames: () 指令如何将文件file1转化为文件file21 1 file2第1行内容 将file1的第1行换成file2的第1行4 3 file2第5行内容 将file2的第5行添加到file1的5行之后 l命令语法:cmp -options file1 file2l功能:比较两个文件是否相同lcmp与diff的区别:1. diff只能比较文本文件,cmp可以比较所有类型文件2. diff以ascii为比较单位,cmp以bit为比较单位3. cmp比较结果以八进制表示,可读性很差 $ cmp names names.oldnames names.old differ: byte 6, line 1$ cmp -l names names.old6 12 1517 102 1568 157 145.cmp: EOF on namesl默认只打印第一个不相同的字符l使用-l选项可以显示详细的比较信息 l命令语法:dircmp -options dir1 dir2l功能:比较两个目录的内容,并将比较结果输出到标准输出 /home/team01.profile.sh_historyc1c2 c3c4 c5c6dir1 dir2 /home/team02.profile.sh_historyb1c1c2 $ dircmp -d /home/team01 /home/team02Fri Jan 21 10:31:10 CDT 2000 /home/team01 only and /home/team02 only./dir1 ./b1./dir1/c3./dir1/c4./dir1/dir2./dir1/dir2/c5./dir1/dir2/c6Fri Jan 21 10:31:10 CDT 2000 Comparison of /home/team01 and /home/team02directory .same ./.profiledifferent ./.sh_historydifferent ./c1same ./c2 Fri Jan 21 10:31:10 CDT 2000 diff of ./c1 in /home/team01 and /home/team021c1 Now is the time for all good women第1段:列出每个目录独有的文件第2段: 两个目录中同名文件的比较第3段:显示有差异的同名文件的细节 UNIX上常用的解压缩工具包括:lcompress 压缩文件luncompress 解压文件lzcat 不进行解压查看压缩文件的内容 $ ls -l file1-rw-r-r- 1 team01 staff 13383 July 26 10:10 file1$ compress -v file1file1: Compression 56.99% file1 is replaced with file1.Z$ ls -l file1.Z-rw-r-r- 1 team01 staff 5756 July 26 10:10 file1.Z$ zcat file1.Z(output is the normal output of the uncompressed file)$ uncompress file1.Z$ ls -l file1 -rw-r-r- 1 team01 staff 13383 July 26 10:10 file1 $ cat myfileThis file has tabs and spaces and ends with a return$ cat -vte myfileThisIfileG has tabsIand spaces andIends with aIreturn$选项说明:-v:将非打印字符显示为可见字符。-t:将tab键显示为I-e:在每一行的末尾显示一个$符号 $ lsgreatfile myfile$ rm greatfileNo such file$ ls | cat -vtGgreatfilemyfile1. rm Ggreatfile2. mv Ggreatfile greatfile3. ls -i 130 Ggreatfile 127 myfile find . -inum 130 -exec rm ;要修正这个错误的文件名有三种办法处理 $ touch myfile$ lsmyfile1288$ dateMon Feb 14 07:20:15 CDT 2001$ date +%m%d%H%M%S0214072015$ touch myfile.$(date +%m%d)$ lsmyfile.0214使用命令替换将文件名附加上日期文件名附加上进程号: $ 1、用一条命令查找系统上所有以”UNIX”开头的文件。2、下面的命令有什么作用?$ ps -ef | grep -w root | grep -w netscape3、下面的命令有什么作用?$ ls -l /home | egrep txt$ | team01$ | sort -r +7 | tail +4 | head -54、find命令查找时会查找制定的目录下的整个目录树。(T/F)5、find命令中使用的元字符,如果加上引号后,shell会先对其进行元字符扩展,然后再交给find处理。(T/F)6、下列哪个命令能够确定文件的类型A.cmpB.diffC.fileD.dircmp 7、diff只能比较文本文件。(T/F)8、compress命令压缩文件时将删除原有文件,并将压缩后的文件加上.z的后缀。 (T/F)9、UNIX环境中,不可以不做解压操作而直接查看压缩文件的内容。(T/F)10、显示目录或文件中的非打印字符用下列哪条命令A. ls -liB. cat -vteC. diff -cD. cmp lxargs reads arguments one line at a time from STDIO and assembles as many of them as will fit into one command line.l-links searches for the number of links in files or directories.lwhich, whereis and whence are used to locate programs.ldiff compares the contents of two text files.lcmp compares the contents of two files of all file types.ldircmp is used to compare the contents of two directories.lcompress compresses data in files using Lempel-Zev coding.lcat -vte displays non-printable characters in a file or directory.
展开阅读全文