网站首页  |   业界社区  |  电信社区  |  技术社区   |  极客社区  |  游戏社区  |  生活社区   |   科技博客  |   同事录
TechWeb-技术社区


标题: [转贴] 《LINUX与UNIX SHELL编程指南》读书笔记(二)
bika
TW金牌会员
Rank: 6Rank: 6



UID 138192
精华 27
积分 1720
帖子 941
阅读权限 70
注册 2008-7-23
状态 离线
发表于 2008-8-19 09:43 资料 短消息 加为好友 添加 bika 为MSN好友 通过MSN和 bika 交谈
《LINUX与UNIX SHELL编程指南》读书笔记(二)

2 tech.techweb.com.cn-I%V*Q7?,H&Y,l
使用 find
xargs
2`*W4T%k R q)O(h5x1.
有时可能需要在系统中查找具有某一特征的文件(如文件权限、文件属主、文件长度、文件类型等)find是一个非常有效的工具,它可以递归式遍历当前目录甚至于整个文件系统(本地和网络文件系统)来查找某些文件或目录,只要你具有相应的文件或目录的权限。
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛,h8r+i8Q%C8R5?*Y&G
5F$]"D2w2d(X"x%` e
2.find
命令的使用
TechWeb-技术社区!v/u.]3[,V'u)O
1) Usage : find [path_name ...] [expression]
"?6\'m)x/h'\.n#k-OTechWeb-技术社区2) path_name :
用于指定要搜索的目录,可以是以空格分隔的多个目录路径的列表。如果省略此参数,默认使用当前目录。
-n4r.K {.b:l!u:^

9i(r3v:g*u5@3n'q)N$F5jtech.techweb.com.cn3) expression : 用于指定搜索的方式、条件和要执行的操作等。如果 expression 省略,则默认使用 -print 作为 expressionexpression 可由 4 类项目组成:
.z+d+O*y!Y5\3`-Q0E
OPTION(选项) : 用于指定 find 命令的搜索方式,一般把 OPTION 放在 expression 的开头。
1_/v.?/?2I9j
TEST(测试) : 用于指定 find 命令的检索条件,只有符号条件的文件才会被指定的 ACTION 处理。TechWeb-技术社区5U&v4a g(~#C0R-E&?
ACTION(操作) : 用于指定对 find 的搜索结果执行的操作。省略 ACTION 时预设为 -printtech.techweb.com.cn(q9w2J9T+S5H
OPERATOR(运算) : TEST ACTION 进行与、或、非
'U"?8M d+S/U7W等运算。

6m9w7L*|9?/J*N程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛4) find
在执行时,一般会将第 1 "-"字符之后的命令行参数都看作 expression,把之前的参数都看作为要搜索的路径。
]"A%^0O,C#V1`*D+T

!y5y2e-X1|/m3.
常用的 OPTION 项目

-C)z9P7v-\8i$U,CTechWeb-技术社区0) OPTION
项目可以省略,find 默认从指定路径目录开始递归地向下层子目录搜索。

+_:X,B5h(Y4I5n1) -depth :
在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。

(H(r9M7H&w*V+@2) -maxdepth level :
进入指定的目录下层目录搜索时,最深不超过 level(一个非负整数)层。
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛0?"w(W%Q$B*e
eg: find . -maxdepth 0 -name "1" //
只在当前目录而不向下层子目录搜索名为"1"的文件或目录

+\!X"V'W&^%[/DTechWeb-技术社区3) -follow :
如果 find 命令遇到符号链接文件,就跟踪至链接所指向的文件。

/z2H#m+n8k,X.K&W6z4) -mount :
不搜索其它文件系统上的目录(不跨越文件系统 mount )
tech.techweb.com.cn+v&I0v6h1I.e8J:h2w
5) -daystart :
从当日起始时开始而不是从 24 小时之前开始计算时间(-amin, -atime, -cmin, -ctime, -mmin -mtime )

7L6a G!f;o%o7M6) -noleaf :
不为"目录中子目录数量比硬链接数少 2"这种假设做优化。这个选项在搜索那些不遵循 UNIX文件系统链接约定的文件系统(比如 CD-ROM,MS-DOS 文件系统或 AFS 卷的加载点)时使用。在普通的 UNIX 文件系统中,每个目录至少有两个硬链接: 它的名字和它的'.'条目。另外,它的每个子目录(假如有的话)还会各有一个'..'链接到它。在 find 检索一个目录时,发现子目录数比它的链接数少二时,它就知道目录中的其他条目并非目录(而是目录树中的叶(`leaf')节点)。除非需要检索的是这个叶节点,否则没必要去处理它。这样可以带来很大的搜索搜索速度的提升。
9X,g-w*] a

'F/Y2V&`(}2t n'\,V$l,PTechWeb-技术社区4.
常用的 TEST 项目

W g&a/P7g*^+].^%t0)
TEST 项目的一些选项中有时会使用数字,数字 N(非负整数)可以以 3 种形式给出
: ;C8}9q-a.}"f-E0G+m
+N
表示比 N 大, -N 表示比 N 小, N 表示正好是
N
k9|4D/g3r1) -name PATTERN :
查找文件名符合模式 PATTERN(一般要加双引号)的文件,也可直接使用文件名。

+F1j*}6R'i'e3A#^程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛eg: find . -name "[a-z][a-z][0-9][0-9].txt" -print //
此命令可以返回名为 ax37.txt 的文件
"F/M2O!\:a$b
2) -empty :
查找空白文件,它可以是一般文件或目录。

0x&Q,f.e;t,e,C!]9{3) -lname PATTERN:
只查找符合 PATTERN 的符号链接文件。

-C&U&r*w8Q2m:P0F/@4) -iname
-ilname : 分别与 -name -lname 类似,只是不区分大小写。
tech.techweb.com.cn"q#u.W2u-f8Q'p
5) -regex PATTERN :
查找完整文件名符合模式 PATTERN 的文件。

-d&x&g"p(v7]'n6) -type C :
查找某一类型的文件。C 可以是 b c d p l s f (块设备"^-f7}%D$I,M"d5E
字符设备tech.techweb.com.cn1k(?3T8I(P
目录
$x,d%I,Q9v4|7`&@TechWeb-技术社区命名管道+l%{!g'r4?9Q1V
符号链接

$N,G&v-a:A9Utech.techweb.com.cnsocket
正规文件)

(~1@5K'K4Q"U'|6n!Veg: find
~ -type l // 此命令返回当前用户的主目录内所有的符号链接文件的文件名
&q1G,K1n0Y:a-\'x&t(B3B$Ktech.techweb.com.cn7) -size N[bckw] :
查找使用 N 个单位空间的文件,可以使用 b(,512 字节) c(字节) k(KB) w(2 字节)
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛3i+G4l/C W!?
单位,不带单位时预设为 b
-d6S3g+_ @%J0\5F$~(H4d4ieg: find
~ -size +100k -size -1024k // 此命令返回文件尺寸大于 100k 小于 1M 的文件的文件名 "};v%W;z+w [ A&x/O
8) -fstype FSTYPE :
查找位于某一类型文件系统中的文件,如 vfat ext3 nfs
*Z'B(F9f3m8k0s#R.s
9) -user USERNAME :
查找文件属主为 USERNAME 的文件。
/d&B8i3G6A&A"x5l
-uid UID :
查找文件属主的 uid UID 的文件。
tech.techweb.com.cn6P$h0M,D1c%]"|+F
10) -group GROUPNAME :
查找文件所属组为 GROUPNAME 的文件。

4j$y!s(l)j+?#@TechWeb-技术社区-gid GID :
查找文件所属组的 gid GID 的文件。

6j1V5f2E)Z3E&a&`*FTechWeb-技术社区11) -nouser :
查找无有效属主的文件,即该文件的属主在/etc/passwd 中不存在。
"m*}%y$w-V8U(V*R7]
-nogroup :
查找无有效所属组的文件,即该文件所属的组在/etc/groups 中不存在。

0`([8c6p1y3W%[:\%V C12) -perm MODE :
查找文件的权限设置等于 MODE 的文件。MODE 前可加"+""-",表示权限设置比 MODE 宽松
)
5s'Q V)^&P
或更严格。
)H(~6F.{5B(R&s%S9_
13) -anewer FILENAME :
查找其存取(access)时间比文件 FILENAME 的修改时间更接近现在的文件。

,u+a1V;_/W0^5Q4a#L&J7R5stech.techweb.com.cn-cnewer FILENAME :
查找其状态改变(change)时间比文件 FILENAME 的修改时间更接近现在的文件。

7K+T#\#G5F0G3U&u-newer FILENAME :
查找其内容修改(modify)时间比文件 FILENAME 的修改时间更接近现在的文件。
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛1f3c5k&H/['o+],m
-amin N :
查找在指定时间(N 为分钟)被存取过的文件。

0`$V6n3c1I9q%H0_,T,|-cmin N :
查找在指定时间(N 为分钟)更改过文件状态的文件。

*},C.{'p;} J6?3t程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛-mmin N :
查找在指定时间(N 为分钟)修改过数据内容的文件。

/J+J*K7v;d%{4zTechWeb-技术社区-atime N :
查找在指定时间(N 为天)被存取过的文件。

5N2X!],F!`9p._9|-ctime N : 查找在指定时间(N 为天)更改过文件状态的文件。 2?*V5H#I+~%G
-mtime N :
查找在指定时间(N 为天)修改过数据内容的文件。
tech.techweb.com.cn;A){1Z-y$F"`
: 上面这些选项分别涉及到文件的 3 种时间: 文件存取时间(access)、文件状态改变时间(status change)
#s3^'p.?,P#r v文件内容修改时间(modify),也就是在 ls -l 命令输出中显示的时间。

)t"]:C;W3N#?(L
(K$u9| ]+W1L2Y*|5.
常用
ACTION
*g%L ]$] @程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛1) -print :
以完整文件路径名的形式将 find 的搜索结果显示到标准输出,以 NEWLINE 分隔各个文件名。

/i'\7G/R(wtech.techweb.com.cn2) -ls :
"ls -l"命令的格式将 find 的搜索结果显示到标准输出。
:q;z4d)`#G8W9p
3) -exec CMD {} \; :
find 的搜索结果作为 shell 程序 CMD 的文件名参数,并执行 CMD 程序。

2@*l:]3R2x-H$n,v程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛eg: find /logs -mtime +5 -exec rm -rf {} \; //
删除/logs 目录中更改时间在 5 日以前的文件

)x.B,x7^2W.O1mtech.techweb.com.cn4) -ok CMD {} \; :
同上,是一种更安全的模式,在执行每个命令前,会提示用户来确定是否执行。
TechWeb-技术社区2c8m)h9C0I$J3o'\*k
+Q-w9U)n8H1M
6.
常用的
OPERATOR ;Q;q:P.y0q0E2u
1) EXPR1 EXPR2
EXPR1 -a EXPR2 EXPR1 -and EXPR2 : 2 EXPR 相与。
tech.techweb.com.cn*J4{3X7y;Q ]
eg: find
~zqf -size +10k -name "*.c" // zqf 的主目录开始搜索大于 10kB C 源程序文件 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛8a:`7K'D/l$d1L/t6D9r
2) EXPRT1 -o EXPR2
EXPR1 -or EXPR2 : 2 EXPR 相或。

/w8@8_3s2l)seg: find . -name "*.c" -or -name "*.cpp" //
从当前目录开始搜索 C C++源程序文件

$`;[2M)F [+r#U5@!Y-gTechWeb-技术社区3) ! EXPR
-not EXPR : EXPR 取反。
tech.techweb.com.cn/W"z0p'`-u0W,I*s0}!k
eg: find
~zqf ! -user zqf // 查找 zqf 的主目录中属主不是 zqf 的文件或目录
0B0U7V"G"j6Btech.techweb.com.cn4) ( EXPR ) :
当出现多个 OPERATOR 时,用来改变 OPERATOR 的运算顺序。

:C(f$W5w,Z4deg: find . ! \( -user zqf -name "*.awk" \) 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛+t,Y/F,O3{'E.}2z
1r8x(j9q*I%R-D/p.e(D;N+A
7.xargs
2o5y,x7M-x!U!Y程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛1) Usage: xargs CMD (
从管道中获取 CMD 命令的参数
) 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛 J3B'r9X9t.N
2) xargs
常常与 find 命令一起使用,用于取代 find -exec 参数。有几个原因
: TechWeb-技术社区"a&T(c;\$n+F$F-K0\+d
find -exec 参数有很多局限。比如,递给 exec 的命令长度有限制,在某些系统上-exec 参数只能调用很少的 shell 命令等。TechWeb-技术社区/}9j%A3Y6v;@ b$i!v

:p,C.R%W*}(J程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛某些系统上-exec CMD 选项会为 find 的搜索结果中的每一个文件名启动一个 CMD 进程,而不是把搜索结果作为一个参数文件列表整个传给 CMD 程序,当搜索结构很多时,会严重影响系统性能。xargs CMD 把从管道获取的参数作为一个参数列表一次传给CMD程序。

引用 回复 顶部
查看积分策略说明快速回复主题
选项 标题 Smilies
禁用 URL 识别
禁用 Smilies
禁用 Discuz!代码
使用匿名发帖
使用个人签名
接收新回复邮件通知
内容





当前时区 GMT+8, 现在时间是 2008-11-23 05:27
京ICP证060517号

本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0 © 2001-2008 Comsenz Inc.
Processed in 0.103706 second(s), 7 queries

清除 Cookies - 联系我们 - TechWeb.com.cn - Archiver - WAP