|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
简要总结一下linux下find命令即文件查找命令的用法6 w. A0 a ]5 B# {1 a# L" k
5 a# S" l: U9 B/ f
( V2 g9 r" E! `- c; C前言:我们为什么要学会使用find命令?5 _- J+ Q! O/ I: i2 u
0 W! z' n! L/ L
每一种操作系统都有成千上万的文件组成,对于linux这样“一切皆文件”的操作系统来说更不例外,大家应该都能很轻松使用windows下的文件查找功能,但是对linux这一功能可能并不是很熟悉,其实想玩linux的你更要牢牢掌握这个命令,因为linux不像windows那样有固定的文件名后缀,并且因为linux阵营下百家争鸣的特性,一个相同的文件在不同的发行版,可能会有不同,所以如果你能牢牢掌握find命令的使用,你在摸索linux的道路上将会顺利很多,同时你会发现linux下文件查找功能其实很简单,而且要比windows下查找功能强大很多很多!好,下面进入正题/ S% w. a# _0 Z: \% G- x
4 ^) ]! y2 R1 O3 U
" z8 p0 N; {: W3 e5 w2 ~( ~
Linux下查找文件的命令有两个;locate 和 find
5 z j8 ]% O+ T! R' o, m4 p* m& L, t. B, a) G6 ~
首先说下locate,locate这个命令是对其生成的数据库进行遍历(生成数据库的命令:updatedb),这一特性决定了用locate查找文件速度很快,但是locate命令只能对文件进行模糊匹配,在精确度上来说差了点,简单介绍下它的两个选项:
6 a) C. n4 b+ ]! }6 H: i/ k7 _
* Q+ N( Y' F% y$ K# Q/ N. D #locate ! g- m7 g( i. A
3 Y0 W( u7 u, X P" r
-i //查找文件的时候不区分大小写 比如:locate –i passwd9 {/ B" P8 G8 u& c( y) e
/ Y- X+ }/ e+ U n2 f' r
-n //只显示查找结果的前N行 比如:locate -n 5 passwd
" v! w- l& [, R& h" L% n2 p A
7 d1 a0 w1 g* W/ J; \: U$ j% V$ o' z6 c
下面重点说下find,find在不指定查找目录的情况下是对整个系统进行遍历查找" s( R8 }: t- `/ P: C; z
! G: z- u* S6 K( H
使用格式 : find [指定查找目录] [查找规则] [查找完后执行的action], h3 R! p9 Z: K D0 u+ b9 P
! R& N9 d+ U+ \7 I- f- [1 [
[指定查找目录]例如:% l/ u6 f9 O5 W- T6 B1 @( K
/ _: ^! L- c0 \ Z& H+ @0 u. t7 N6 `
! b1 U* m) z& @( L/ p' ]
- M2 L0 U. H6 g- V7 k0 ^6 L这里要注意的是目录之间要用空格分开" W6 K5 Z+ f) v$ I! v3 N2 D
5 l3 h x1 {! @; J2 w [查找规则]
- L6 f! m" c1 S# B0 Z4 T8 Z2 X
7 x6 \# [! F. N* N, z# J (1)根据文件名查找$ a; v% p) z$ X# Q) i! w, F
% K3 j) s9 X6 m) D
# -name //根据文件名查找(精确查找)/ n* s3 ^8 B0 |2 a. I
. J1 k; p n' A y ^: A3 m
# -iname //根据文件名查找,但是不区分大小写
( R! [7 o! \# [. j* q
$ B( h. }) o. j! M+ [5 k这里另外介绍下文件名通配的知识
4 d* x2 c4 ?9 @4 s5 f. b# F# h1 N- g. U4 F$ W% N9 C
*表示 通配任意的字符
* A! e; {5 u/ ?4 `& ^! Z3 Q
4 \7 j: T, C7 n( B( C
; T. R0 x& N8 D
, a/ m f! o; u- |2 @
?表示 通配任意的单个字符
+ k7 ~) |+ r- s6 f# K% P1 l4 X6 ? a( L
C# L6 S4 J4 ]: s7 i6 c
# m2 k4 j. r2 v9 n9 x+ `[ ] 表示 通配括号里面的任意一个字符
. d- X4 x! O. q0 e1 e) [" E) V! b: N
; ?& K' D2 q" [9 G( u- g; m
9 L4 {+ N: w& N( W% Z& N (2),根据文件所属用户和组来查找文件# W, w+ E9 M; |9 Q) M# N/ E3 u
7 L6 v5 U0 S% y4 ^ q) G" L
# -user //根据属主来查找文件
0 k: \1 z9 A: l1 f2 X
8 b# }) B7 n, h- x: Z9 A # -group //根据属组来查找文件& ]. a3 \( _5 V8 w
4 {8 [0 u% _# f4 T9 \8 K
(3),根据uid 和 gid来查找用户
0 Y* q3 u. S Y1 `' `, b4 J( `# F! ` W# x; L$ Q7 y4 V! ?9 p
#find /tmp -uid 500 //查找uid是500 的文件" j+ L+ b+ l6 [" \+ D& l0 s7 _+ j
+ f6 `1 L$ }* w" N0 B$ |' t #find /tmp -gid 1000 // 查找gid是1000的文件# S, {" o! H h$ p! L$ H
& N( q/ Q0 m" \$ s6 L. `/ U. ], ? R (4),-a and -o and –not的使用) p) l2 ~8 x0 `
0 i* _. Z, X9 k" M( m8 \1 Q # -a 连接两个不同的条件(两个条件必须同时满足): P. e6 F" g% L) j
) S8 U( m3 r; z$ G
8 @+ h' ^6 V y. @+ s: `
; h* M L \& C3 ?
# -o 连接两个不同的条件(两个条件满足其一即可)' ^2 t/ ^: @# j3 w5 ^
; I% x0 i9 R2 F& s& D& w: p/ u # -not 对条件取反的- L* c: B5 {3 x0 i- T6 O7 G
$ @9 i2 C& e, b1 ?3 E' J4 R7 J
5 D$ J( A# o0 m( C. n( w; x/ v# d; j8 ]
- J, |) U! r/ Z9 [9 k9 g- c' V0 `! G (5),根据文件时间戳的相关属性来查找文件, G, N& R, P7 S6 B: ?
4 ]- p9 u( P8 ~8 h8 ], U 我们可以使用stat命令来查看一个文件的时间信息 如下:5 r* k4 \, N' w& q8 ]" c
8 b/ B& M6 A( D. Y
/ v& S& V1 i$ z( Q0 r2 L, \9 t0 c1 z
8 G( L4 {& t4 A% X, j( U 4 h, H8 r% W) H
#-atime
. U7 g# y' q. V! V5 u7 f1 V( n) s0 @' K3 m( P* P
#-mtime( P. ?$ B' `# I- n( N F3 r
/ f& h/ Q4 W3 y. y- n% l
#-ctime, V+ u2 }# f$ ]. f, n5 N
$ A1 p. \/ }# R O% k
#-amin
4 |& ~6 k5 f: H8 Z! G' S" S5 w( k' [1 o5 \3 X# [7 {4 o& B! L
#-mmin+ V2 d& _" v( J0 d8 j
6 w$ U: e- F0 b% S' C$ ^ G! s r0 ? #-cmin1 P1 Q& ^7 \6 P1 r9 Z3 u
' q3 a9 ~6 h; S9 H# r/ X* ~ f* A% L: |9 J+ i& n; z
所以这里atime,mtime,ctime就是分别对应的“最近一次访问时间”“最近一次内容修改时间”“最近一次属性修改时间”,这里的atime的单位指的是“天”,amin的单位是分钟 ) q- l3 z- V3 x2 k) G( w
! X8 i: O# r! r. f' t6 A" f6 h
#find /tmp –atime +5 //表示查找在五天内没有访问过的文件0 m. D, e% W2 @
% r A3 ^! l, F2 r/ j8 u( l
#find /tmp -atime -5 //表示查找在五天内访问过的文件
/ n: U) Q: D7 ^3 o# D! H! D8 h- u' i# r) D' F
' p. w$ L$ P7 O) h
(6),根据文件类型来查找文件5 t. O* U" Y2 Y* H) R. `8 X2 |
* v. M4 i& Y5 |) }7 E -type4 D9 @9 c# H- `
% y J9 k' Q d+ h# e
f // 普通文件1 l5 `* q+ @! n* d( P8 T, m
) w. \! D) m0 b/ M d //目录文件3 V* {7 W q% e: v6 [, j
0 p( c) ~6 z% F$ y5 c& h; v l //链接文件6 h- j# s$ @$ c5 m1 K
6 z/ L8 V' B0 O% Y1 s b //块设备文件
7 A# ]% r+ \2 @ f) Y5 S1 t1 @& @' H6 e! t
c //字符设备文件
7 k; m7 g& g2 D' |2 r7 G$ v: C" c; A9 ]& G1 |3 ^% b2 n6 W( k5 O
p //管道文件
4 [9 L" J2 z K* ~0 H/ H- I0 Z" f- L+ ^- A9 y
s //socket文件
5 P1 q. O2 i: \5 R6 o/ ~7 L% X: v& k. h; b, \7 L
- x5 N2 H; }% @$ s( l# q5 R
* V0 D+ W( _+ Y2 m9 g, v2 m1 _$ |6 F; S
(7),根据大小来查找文件. X9 q' L/ ]- t- V
8 z1 N. v7 q0 K -size
* _- {) ]! ~5 D, I) ?
7 i8 d; ?! ~% [- [2 B# g #find /tmp -size 2M //查找在/tmp 目录下等于2M的文件. f: p0 x9 q7 r4 i
3 H7 e- x7 n2 @: _' Z4 G8 T& k
#find /tmp -size +2M //查找在/tmp 目录下大于2M的文件
- i E) ?( ?1 A5 l9 Y# Y @' S$ Y3 t2 G7 M: f
#find /tmp -size -2M //查找在/tmp 目录下小于2M的文件2 c: `0 X( J) s# j6 { V" x2 D
$ d6 V4 z3 J0 d) c
(8),根据文件权限查找文件1 Z6 _3 J1 N- Y1 p' ]+ N( D
5 c- W8 X8 r8 e$ F -perm
* ^# Z9 P% M& n# x [0 L# b9 u5 g* g) u) P& ]/ e9 Y+ f2 ]/ u
#find /tmp -perm 755 //查找在/tmp目录下权限是755的文件1 @! M6 B2 D8 ] R. d$ M4 O
. B5 P7 S: g; f5 c #find /tmp -perm +222 //表示只要有一类用户(属主,属组,其他)的匹配写权限就行
; O1 ^$ i$ t- n7 @2 l
v! e+ _, [9 G #find /tmp -perm -222 //表示必须所有类别用户都满足有写权限
1 d5 T! v* N8 x! t- h5 C; i- c7 H4 ^' y
(9),-nouser and -nogroup; C. _' I8 e' w/ }% k5 y3 a
/ \' R3 m1 B6 T
#find / -nogroup –a –nouser //在整个系统中查找既没有属主又没有属组的文件(这样的文件通常是很危险的,作为系统工程师的我们应该及时清除掉)
, y0 C4 l8 a, L! }. r
- r3 o; P( r6 e+ h [查找完执行的action]
: o6 z0 C; p- M8 O! I$ p# ^% ~! j; ^, s) I I8 P% R4 a. Q6 y
# -print //默认情况下的动作( \, J: u" ^* V6 b; ~/ D
# y9 } j# n8 Y# {0 d # -ls //查找到后用ls 显示出来; g* Z e$ m+ D7 Y/ u( l0 C
- v# _* Z/ [7 @+ i # -ok [commend] //查找后执行命令的时候询问用户是否要执行+ S. H( R2 k) }3 v7 t4 p/ u5 U
: Z* Z5 l+ E+ C+ i9 _
# -exec [commend] //查找后执行命令的时候不询问用户,直接执行
/ l1 E- A0 p0 V$ o* q+ E0 W4 `$ I( O" ?" i- a9 n' S* e
# ?+ e8 ?* \2 i" ~1 h- a( @
2 U* s+ L% l5 P
$ G5 D$ V) l: D; ]- Q! u) b
这里要注意{}的使用:替代查找到的文件
- I$ D Z" j8 `; r4 A* E1 k$ H+ i/ u1 ], D4 \
, |8 r( o' n4 ~: \9 Q: u/ H
; n* e( d2 M& P3 G$ d
) Z' ]' q% E, ~
#find /tmp -atime +30 –exec rm –RF {} \; #删除查找到的超过30天没有访问过文件6 v; H9 s$ c/ z; j9 b
% ^( G4 N* a9 J8 g) D3 F% H5 `9 h" { 我们也可以使用xargs来对查找到的文件进一步操作
0 B4 z/ {+ X0 H$ `
% X& y9 G {5 Q$ G# o8 Y
8 h4 e' F: Y: G$ }4 P8 Y9 {8 I
|
|