|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
简要总结一下linux下find命令即文件查找命令的用法2 @3 x7 P. O! n& X" u4 U" ~& T+ i
8 `% t2 W7 ~1 k, I8 `( _+ |/ P3 L u$ g
前言:我们为什么要学会使用find命令?$ D$ \- F+ \9 n+ M s! f
. D( L3 Q# n9 S
每一种操作系统都有成千上万的文件组成,对于linux这样“一切皆文件”的操作系统来说更不例外,大家应该都能很轻松使用windows下的文件查找功能,但是对linux这一功能可能并不是很熟悉,其实想玩linux的你更要牢牢掌握这个命令,因为linux不像windows那样有固定的文件名后缀,并且因为linux阵营下百家争鸣的特性,一个相同的文件在不同的发行版,可能会有不同,所以如果你能牢牢掌握find命令的使用,你在摸索linux的道路上将会顺利很多,同时你会发现linux下文件查找功能其实很简单,而且要比windows下查找功能强大很多很多!好,下面进入正题0 e2 K) c' E0 i! P: A- Y# U
4 e- p' U" E3 p, \9 m. t3 m" ]( t* K
4 R7 U/ L6 D# }7 gLinux下查找文件的命令有两个;locate 和 find3 @" L) [- ?& N: X+ l
7 h2 {, e4 P* r& S1 h
首先说下locate,locate这个命令是对其生成的数据库进行遍历(生成数据库的命令:updatedb),这一特性决定了用locate查找文件速度很快,但是locate命令只能对文件进行模糊匹配,在精确度上来说差了点,简单介绍下它的两个选项:
1 ~1 A) R8 u, Y1 {. }/ e7 u6 n) D1 D7 Y+ N4 b. S/ t! Q
#locate * ?. {+ r# a. ?# I- F8 k; s( R- z
- m i5 P5 \7 R+ @+ Z
-i //查找文件的时候不区分大小写 比如:locate –i passwd* S5 V+ A, y, I7 P9 M; n
' Z! n* {" s/ O# Y$ @' O+ M -n //只显示查找结果的前N行 比如:locate -n 5 passwd* V0 K# K' n! H- x7 O
8 p4 `. u9 f2 ^1 C* R4 O- _" R' N
8 A* b4 A8 U% y# }5 e$ R- U下面重点说下find,find在不指定查找目录的情况下是对整个系统进行遍历查找
. f; y2 t' A0 l6 n' {0 o T9 c; C/ p/ C8 C6 x
使用格式 : find [指定查找目录] [查找规则] [查找完后执行的action]
3 J$ g$ S; ?9 E F# E2 r! \' C2 O% e0 V" V+ ]6 d
[指定查找目录]例如:
7 a v' [* S) r
2 H2 W# t8 I- q
0 x2 _4 `8 O! u4 n6 C. S5 E8 |
0 v2 Y8 s: ]4 E+ [( p这里要注意的是目录之间要用空格分开
5 L1 ` p. o+ X( M8 E
; }- z# [+ A& G3 C* j2 _ x [查找规则]
& ~5 t4 H2 e& |$ J
~2 j% w `2 g" ]! P1 H (1)根据文件名查找& |+ b) o* ]9 |/ B# t
4 W9 l, ?+ r( }+ E: \! t
# -name //根据文件名查找(精确查找)# Z9 s# M( \! _8 W
* m# a$ O5 v% S5 Y# r/ r
# -iname //根据文件名查找,但是不区分大小写 * S. X/ Z: ?% ]$ C% f4 ]
, L* t+ _7 T% V+ f! z" K9 W这里另外介绍下文件名通配的知识; l2 g( T- v+ o/ E2 `
& D+ H; h" F+ P& X: r1 S*表示 通配任意的字符
4 z- g, g( }) v8 C7 J& t& b. p$ s
: v4 C! `" S, n+ n/ q3 z
# B7 W' O" ]& m! P P
& w0 |: b4 Q0 @: S/ [+ B ?表示 通配任意的单个字符$ m2 M' l! @/ F
( i. k" p4 z- p! K, b3 B
$ V* W8 S- ?* [) U : L2 T' J; r u' s& w
[ ] 表示 通配括号里面的任意一个字符 B0 B4 D4 F' R
( A# Q- m8 F! O8 n# ^, V
* r; u9 T! `4 h
( A' s# j8 t5 x1 P5 _* @ (2),根据文件所属用户和组来查找文件7 I- \+ [* C4 S; i0 P- x0 K$ e- _
- B: \2 f& t5 W4 y # -user //根据属主来查找文件8 `( z" b& u+ r9 C
+ _3 @3 Z3 R3 g1 t8 K) }4 y
# -group //根据属组来查找文件
- ]4 g* l5 v( y* q6 |% _( [ D& G4 d) {: v y1 v% B& A
(3),根据uid 和 gid来查找用户/ R% j9 j' o% S4 ]4 a
5 C# g9 u, {6 S% A# k6 M
#find /tmp -uid 500 //查找uid是500 的文件* q& K& d0 M9 g" W
+ t3 k" _" u8 H2 v+ G7 Q3 s2 t2 x5 n #find /tmp -gid 1000 // 查找gid是1000的文件: d& {$ O, p+ ^% g& C6 w( p
3 K" g$ f; e( p8 c
(4),-a and -o and –not的使用7 g0 \; h; ^ } i$ o* X
; ^+ M' c* t- H. v2 Z5 d- `, A # -a 连接两个不同的条件(两个条件必须同时满足)4 ]& a4 S6 L l9 B' z2 h
1 P4 g I9 r* K7 d: @" [
6 W: d& t: ?! \9 A, T
0 M+ m1 X% ^" K
# -o 连接两个不同的条件(两个条件满足其一即可)
9 w. q9 Z% D: ^' q& E- d0 [0 @, q! E5 w- f5 y4 k$ Z
# -not 对条件取反的" q5 R6 n5 y% V% U
; l' K0 b+ i C* G6 m1 V
! o7 |5 a3 V3 n3 v# c$ \: M/ r+ Q! E 6 D' n6 q# C8 k
(5),根据文件时间戳的相关属性来查找文件
% o. T5 [5 E- i: I0 w- i2 ^! q, K( {; I8 L9 r
我们可以使用stat命令来查看一个文件的时间信息 如下:
% H% K' a5 l. \$ T4 [- I/ X7 W0 T/ _
( v; ^+ }, F {6 V( ~1 H
1 ^! n: G+ ~2 n1 s# b, W+ l9 k * i# _; L2 v$ v8 I1 ~+ O- K/ v
#-atime! r/ ]" k7 [$ p3 Y7 c, f5 R& k
9 d2 K2 l: e8 M4 w, u4 }- o
#-mtime
; u; c% P1 [ B+ V, ?, w8 `+ D" Y# R; H* ]: _5 x; g
#-ctime
. B% k" `" d9 c" T0 k- R# x3 z, r
#-amin2 _* x g9 U O* b- X0 ^
' U; ?7 A3 k& H3 s4 w
#-mmin
" t' P o9 y+ X3 m/ M* ^. _" f; k
#-cmin! @) g, ^, o6 S1 ^0 r" m4 W
) q+ y* \. _9 W' ]/ B
+ \2 ~! M) R# a( G2 }
所以这里atime,mtime,ctime就是分别对应的“最近一次访问时间”“最近一次内容修改时间”“最近一次属性修改时间”,这里的atime的单位指的是“天”,amin的单位是分钟 . c( \ r- @1 d
* k% U) {- d8 W' Y9 G
#find /tmp –atime +5 //表示查找在五天内没有访问过的文件$ e' H2 D$ C5 }
3 @5 d0 h) Q' i1 i& e0 J
#find /tmp -atime -5 //表示查找在五天内访问过的文件5 ]* P9 n3 D, b. O2 j8 J
4 Y/ j2 Y5 {: J" q* ^
/ T+ b$ h% J8 V* t" r: s6 q
(6),根据文件类型来查找文件
: F+ x' ]. |6 Q4 f5 u! y- L
) y# \- O8 l6 k9 E6 [0 D1 ]$ ~3 H -type
, _) i8 S8 V9 `/ [2 [& `5 R
& C2 y2 o' r+ N1 Q+ E8 @; k f // 普通文件" r" Y: g8 b+ M
& S: e9 Y u1 }2 _6 @4 h d //目录文件
; i) i0 I5 p- L- ?) W( u
) Q: c* e9 ]2 `, U; o# o l //链接文件
i! ]6 o, s+ O2 D+ `2 Q# U) N+ e( V6 C/ E. C' u% r6 C; r# X
b //块设备文件
P7 K: _5 F$ O6 C0 D: K7 L, Q- y, `5 w5 k7 }4 S$ ~7 b
c //字符设备文件
6 @' g( Y' J2 P: s% \' _+ _6 y( A) h
p //管道文件4 m5 U9 t3 a+ c) P& |+ O6 i
! F0 Z4 g% S( e6 Y0 S+ j s //socket文件
, W7 P8 O/ F" m, V" \6 K) k
0 d/ t7 A4 Z: k- b. |7 l! f4 i5 Q
9 H) e- t5 N! t* U1 r& Z; ]- z
0 {8 W0 W) N: W$ ?+ Q4 T( O7 Y5 V. X
e1 Y H, M' L8 A (7),根据大小来查找文件
8 t5 j9 [+ m0 y2 v! V+ d; j) s4 M' m/ f8 M
-size
: G# @3 u5 L/ a
( ^; C/ u/ @* ?5 a #find /tmp -size 2M //查找在/tmp 目录下等于2M的文件
. d1 R5 I H) d' Q' l
8 G/ E" x% a7 ?) X+ f# y5 a #find /tmp -size +2M //查找在/tmp 目录下大于2M的文件
z. b$ h. a# T) n% n% w1 D" W9 \7 u+ I/ T- S. d+ E/ q
#find /tmp -size -2M //查找在/tmp 目录下小于2M的文件5 x# q$ x) z6 c" a# ?
* U! _2 x( |9 S+ n d3 \# d
(8),根据文件权限查找文件 j5 P4 {, I( l; c/ w
% o9 Y; o3 b5 z$ j, \
-perm
6 e' i7 e4 k0 ~& z! L
8 b7 \" F: R; N/ q* }% h #find /tmp -perm 755 //查找在/tmp目录下权限是755的文件7 ] E; G7 N# h; B! z5 [/ s$ M% H0 [
! e" ~$ G1 E$ C7 d# I# @; w% t3 ^ #find /tmp -perm +222 //表示只要有一类用户(属主,属组,其他)的匹配写权限就行7 ^2 `4 f& c+ b# a; f8 J2 }
1 _, Q, z4 Z0 Y7 u3 U0 x( ]8 d0 Y6 k #find /tmp -perm -222 //表示必须所有类别用户都满足有写权限5 v; \) c4 m1 x5 h/ r0 i2 V, N
4 x& w5 {* u' G6 |- h5 R (9),-nouser and -nogroup
6 f) r5 Q, W% _; C
7 q4 ~+ n; r# B$ \5 O& x #find / -nogroup –a –nouser //在整个系统中查找既没有属主又没有属组的文件(这样的文件通常是很危险的,作为系统工程师的我们应该及时清除掉)" `; U U: B8 b: K
. U0 `3 W$ W o* \$ Q) V6 h [查找完执行的action]. h- Y3 d4 Y7 k
$ C, L9 l. G% z) e' z7 i
# -print //默认情况下的动作: n3 \0 a9 m: t1 Q# ]
6 g5 ^" ?. `, J( }/ I
# -ls //查找到后用ls 显示出来
0 ]% Q% m9 y7 `! R. K
% Y+ o6 j% A( t- L) N # -ok [commend] //查找后执行命令的时候询问用户是否要执行2 I3 J4 @; i' [
" T5 Y! @5 u8 C # -exec [commend] //查找后执行命令的时候不询问用户,直接执行- E. ` U4 h" }
1 D. X7 c7 t7 q6 C% Z
0 Z) K& D4 m% n( C) a9 c8 Y
9 g- \- I* Q) e$ G* r
2 B9 r( i9 t0 G这里要注意{}的使用:替代查找到的文件4 [7 R/ ], L2 C5 C
1 }. H& \# P; \: _) ~+ Z X
' c+ q7 n% `9 t, C% S1 f$ m- _5 b7 }' R+ j# h. Q
* K: x) H# V: p
#find /tmp -atime +30 –exec rm –RF {} \; #删除查找到的超过30天没有访问过文件
5 x$ y3 j2 V" S x5 ~
# V5 g( B, H6 K 我们也可以使用xargs来对查找到的文件进一步操作
! |8 E% n& b! r- N8 E7 J1 Y
7 I$ _3 p' A8 A# ^7 V9 z1 F
$ c7 ~8 h0 K) x3 I' C
|
|