找回密码
 注册
关于网站域名变更的通知
查看: 313|回复: 1
打印 上一主题 下一主题

简要总结一下linux下find命令即文件查找命令的用法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-12-9 13:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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
   

该用户从未签到

2#
发表于 2019-12-9 20:01 | 只看该作者
看看楼主说的用法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 17:35 , Processed in 0.203125 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表