|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
简要总结一下linux下find命令即文件查找命令的用法# a6 s( O, h5 T& K) k/ g2 Q- v& u
+ m: ^5 g4 y, d2 ~, w" n$ j6 b" ^
# U6 M& S& p* b) j# o% x e1 Z+ G前言:我们为什么要学会使用find命令?" n7 N( C: s6 z/ K4 T/ J: R
) _1 u" C5 o# c" [2 q7 B
每一种操作系统都有成千上万的文件组成,对于linux这样“一切皆文件”的操作系统来说更不例外,大家应该都能很轻松使用windows下的文件查找功能,但是对linux这一功能可能并不是很熟悉,其实想玩linux的你更要牢牢掌握这个命令,因为linux不像windows那样有固定的文件名后缀,并且因为linux阵营下百家争鸣的特性,一个相同的文件在不同的发行版,可能会有不同,所以如果你能牢牢掌握find命令的使用,你在摸索linux的道路上将会顺利很多,同时你会发现linux下文件查找功能其实很简单,而且要比windows下查找功能强大很多很多!好,下面进入正题" |' i1 H$ ?) ^7 Q4 }
1 M! g" Z$ I5 X) P g( ]% F+ P! i1 B4 s. y
Linux下查找文件的命令有两个;locate 和 find# k" K9 _ |' G% P
6 z7 Y2 H7 h3 z
首先说下locate,locate这个命令是对其生成的数据库进行遍历(生成数据库的命令:updatedb),这一特性决定了用locate查找文件速度很快,但是locate命令只能对文件进行模糊匹配,在精确度上来说差了点,简单介绍下它的两个选项:
4 h t1 o+ q' B' ?. \" w9 }4 T! N& k6 ~, O' v: s+ b6 V, P- u, p
#locate 8 Y8 `' t. I/ a @
' a6 t, f) n9 j1 x -i //查找文件的时候不区分大小写 比如:locate –i passwd
8 C* R5 }2 o( g" X
# Q0 |0 c3 h7 W7 C' o -n //只显示查找结果的前N行 比如:locate -n 5 passwd% ]3 A& C) A5 o- r/ Y
8 w: v/ \* q$ ^) I6 _# Y# x
" z& R8 b1 k! l下面重点说下find,find在不指定查找目录的情况下是对整个系统进行遍历查找
; W# f+ W/ s) D8 I0 ~; A& } G2 {+ P& k8 J! r
使用格式 : find [指定查找目录] [查找规则] [查找完后执行的action]
" |* T# L+ }% r L4 j ]) m; ]* e. q7 Q2 q3 X2 O2 ]
[指定查找目录]例如:; a3 `) u1 v* j+ X: n: f7 h
9 u# d0 t3 @1 p! ]
" ]# B Q. b" d2 O
- w5 b# l; e( Z) Z这里要注意的是目录之间要用空格分开
W5 o' x& Q& E! N- a* Z( o& z3 y% v7 V* N% @
[查找规则] : G! ~& c, D+ V! p- e. Z5 D
1 w9 k5 f$ R2 {; t4 e4 J& _ (1)根据文件名查找
' F: |$ q& `5 S+ ^$ U* Q) s% {0 S% N4 k! k9 n
# -name //根据文件名查找(精确查找)
4 a$ K# L" q6 n6 z( V! _
* ^* q$ P$ }3 F, S, Q # -iname //根据文件名查找,但是不区分大小写
1 K8 w G1 @' {' m. q; s8 h1 i+ E5 Y9 h+ t3 i
这里另外介绍下文件名通配的知识
! u: p8 S. ?$ j% A/ }5 q: s+ W$ B9 G R0 j
*表示 通配任意的字符0 N# s* a. k& _$ K
& S; L, X% B( I T- q* C! T
, g+ k+ v3 D" ?% z4 ?; }* e
* a. j, B8 E; `7 n. [' |; D) [* W9 Q ?表示 通配任意的单个字符
( x# [& i; N- c9 N/ Q% ~- B
2 O! C- X5 m4 G9 W0 g' K2 L1 u
1 |5 y& Q5 g3 s. v1 J( a6 Q @# |; V: H j! p1 q% F [
[ ] 表示 通配括号里面的任意一个字符
2 _( b& P3 ?" A, Y4 `0 G$ n& c; r: l# Q' t D* y7 P. _* |
5 j' V4 w# X. @* {
$ b" l9 D2 z* m5 M: ?
(2),根据文件所属用户和组来查找文件
0 \% P1 f+ X1 P* q. r) p9 O1 w8 I
& N# `. R6 P) q e2 { # -user //根据属主来查找文件
* A4 n3 c% ^/ T6 Y
2 j# U4 \4 I6 w # -group //根据属组来查找文件# B+ E' c# x& Z D# J; k7 O; [. O
* [' H9 t' K/ t% `3 T0 n9 X (3),根据uid 和 gid来查找用户5 `+ [5 F3 G3 U" R9 |, P. N% e
- O z0 [3 N) y3 m( h5 U5 d #find /tmp -uid 500 //查找uid是500 的文件+ h" h0 O/ @5 N) n8 ]
0 B% R" R7 ^. n
#find /tmp -gid 1000 // 查找gid是1000的文件
+ f! L8 Z m. O4 T) M; G0 v4 A
( p( ~; [" m0 x* }( h (4),-a and -o and –not的使用7 b# Q+ z7 N$ ], F1 h) ?
6 h& G0 \- E' C$ L. A* x* }
# -a 连接两个不同的条件(两个条件必须同时满足)' m5 [) A) K1 {3 W
0 X$ L9 T7 r& C/ V6 d: T/ w
$ p& a [8 p% N5 e2 O4 o( V! b/ T: c: e5 C6 A5 i [9 d
# -o 连接两个不同的条件(两个条件满足其一即可)1 F' [& J' N" L% g
* R! f0 Q# U6 v+ ~% x
# -not 对条件取反的
( b) A' i9 j9 u1 z( M* }! k
% w& j" g+ n: X/ S) K" }" l
( N* M4 v$ c6 ]9 A7 d4 k9 U
1 b& a( Y3 k0 ?/ c* U0 k
(5),根据文件时间戳的相关属性来查找文件- g3 ^4 ?8 J9 N
, `: d" x$ d- z 我们可以使用stat命令来查看一个文件的时间信息 如下:
' L7 S) Y% Q$ o c9 R' t4 z8 _- N+ L5 r/ K! O
0 ~1 f$ r. c3 i: {# I7 u( U, }! W: k% t; g6 O# [: q6 ?
( p; L c) G9 z' y
#-atime' r ]6 d5 h( T/ Q! }
4 C5 N4 h! z- U5 w7 S- p. C! | #-mtime* F1 Q* _5 ?. n1 ^1 }$ c# ^7 E3 J
( o; H7 f* r2 f' G5 g2 Z4 ^5 d0 ? #-ctime. h3 x" I$ N2 @9 \
' O" Y, i+ o) }. O4 j0 Z/ T0 ^# M
#-amin. Y% @% N4 N9 I1 {; N( s5 q
8 O" ^4 a/ L4 p) t
#-mmin
$ Q# i3 c. E4 w* c- w3 l0 g% U# Z; D; g
#-cmin( B( L4 e! H/ P9 O9 V
1 H$ W2 Y1 ]2 T5 Y+ A7 [
2 l! J y2 b5 |! h$ ^8 X1 V# d 所以这里atime,mtime,ctime就是分别对应的“最近一次访问时间”“最近一次内容修改时间”“最近一次属性修改时间”,这里的atime的单位指的是“天”,amin的单位是分钟 6 r/ R/ f' d) R) {) z
. _% Q0 J0 V# U5 O5 P9 |
#find /tmp –atime +5 //表示查找在五天内没有访问过的文件
, |0 m8 n; H: S
. D5 X, x" C8 b$ _1 m" H6 Z& D #find /tmp -atime -5 //表示查找在五天内访问过的文件
: J; B5 v1 v( U7 e, F% `$ M- X
, E+ r& m# q. M$ h6 H5 D
(6),根据文件类型来查找文件
/ g+ m6 q3 V8 _! h1 b7 o- }3 N9 e. @7 d! Y' U% h1 g3 J
-type' l* x* }1 ]' L9 L
. |0 m" d3 R9 A A
f // 普通文件' j' s, n- ]9 v9 W: ~: a
+ {6 Z! M7 \1 G6 z& P( Z
d //目录文件
1 s! j1 M7 I2 U6 j6 s
* S t# t5 v& P1 ~) r+ @ l //链接文件2 y% u3 K0 o1 A; y8 z
. E6 q7 N5 A8 g1 M5 L0 z
b //块设备文件. A3 I! z3 u. d0 C; ~ G/ ^$ L, ]
* A9 C1 K* s# j |# N
c //字符设备文件
; T) ^, {/ r1 R+ L" v2 @6 C$ F7 B2 p) M- T- ]! R# P7 i
p //管道文件
+ P* j/ u- c, X: E
! W, L `1 `& i; J7 M) F/ C s //socket文件/ @0 r/ U8 \ A- e
- ^) Z9 q) Z/ O+ o
" [' o/ ^) ~. e- C% h
4 x5 @6 L+ R7 V$ y+ p" J! |. n1 Y* |' P! r5 t" F8 K3 x% S( a
(7),根据大小来查找文件
& A/ C K, ]1 s) I. M" r/ Q0 k4 l. E) R" U& @3 b' D
-size
7 B4 W1 I4 z6 i- Z# x1 {& h" o' x
#find /tmp -size 2M //查找在/tmp 目录下等于2M的文件
( u. E' y# J5 b3 H8 I& u* ?/ H
- g! n& ^# l) N" Y; t$ G0 ? #find /tmp -size +2M //查找在/tmp 目录下大于2M的文件, m, x1 i I9 Y
+ b. ?- \4 D' ~& I, C #find /tmp -size -2M //查找在/tmp 目录下小于2M的文件* l+ _$ b( }& G
+ I: `; j4 W3 W (8),根据文件权限查找文件
/ q1 {! w, [. U
/ N% P6 Y& B! y( k# v' w -perm( I4 N; D+ |6 {$ I' e) V
6 S5 w9 k! x+ c8 P8 u #find /tmp -perm 755 //查找在/tmp目录下权限是755的文件
; v% D3 U2 @4 n9 Q; [% @# C% l5 N7 n+ A. G3 M; }1 L
#find /tmp -perm +222 //表示只要有一类用户(属主,属组,其他)的匹配写权限就行
6 i6 F$ `1 g7 g/ L: g
. q7 B& W F% u' j3 m% }+ w- b #find /tmp -perm -222 //表示必须所有类别用户都满足有写权限
1 c+ Y9 ~" {& Y( e& }/ S* _3 d4 J
Q8 p4 F5 S8 ]" X# J+ y* t& k! F! P6 r (9),-nouser and -nogroup8 }5 K, Z p2 V M4 j4 P$ `
9 |1 r# a p2 N8 n5 e #find / -nogroup –a –nouser //在整个系统中查找既没有属主又没有属组的文件(这样的文件通常是很危险的,作为系统工程师的我们应该及时清除掉)
# U9 E$ h2 _6 n S$ @+ h2 W* ^3 D H& d2 |- k
[查找完执行的action] u V: \6 K8 t' e, c* W8 q
9 U ?6 D) |) h9 f
# -print //默认情况下的动作
7 ^8 \) ?7 T2 T# f
/ j9 J& o$ f! {. { # -ls //查找到后用ls 显示出来, O" W9 f1 V% `
5 M! z* t7 c& }$ r3 H% d8 ~ Y
# -ok [commend] //查找后执行命令的时候询问用户是否要执行
+ q E; v/ b+ t3 l& D0 C+ K6 w9 j! Q) ?% v+ _* i) S1 L' @
# -exec [commend] //查找后执行命令的时候不询问用户,直接执行5 F! y. y3 B* n- |. l
& _+ G% o& T ?5 p, z7 x7 l
( A# f, T" Z" `8 _/ ^0 Y
4 @" J" s# G& ]6 H! a2 s; E: r; A/ V& a
这里要注意{}的使用:替代查找到的文件( r; V8 M( ?- I9 y
4 Z- U8 h' W* E& Y' _ Z0 g
j: E; {2 ^1 j% J+ C0 e% f }
' b# Y& V9 v, N$ c) A0 X# r( ~. s & e. B* |% A) z5 G% {) L1 l
#find /tmp -atime +30 –exec rm –RF {} \; #删除查找到的超过30天没有访问过文件
! _# G. O0 X. N, X) t8 z6 h0 i7 G. g6 t: V
我们也可以使用xargs来对查找到的文件进一步操作
1 w. U4 n2 H3 b. V! E( n% h0 x5 e7 P: t: o& ?7 Y
0 F% r: X4 Q2 ]* h; e |
|