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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
简要总结一下linux下find命令即文件查找命令的用法) R5 F3 E9 o# Z2 H0 T
- L7 d$ Z" K$ v( M, z& Q
7 T, ?; m# E; i6 Z' Y$ B3 j5 C
前言:我们为什么要学会使用find命令?/ a. m' s4 J$ K8 s5 Y" ^  a
3 z. I4 }, l" [: i
每一种操作系统都有成千上万的文件组成,对于linux这样“一切皆文件”的操作系统来说更不例外,大家应该都能很轻松使用windows下的文件查找功能,但是对linux这一功能可能并不是很熟悉,其实想玩linux的你更要牢牢掌握这个命令,因为linux不像windows那样有固定的文件名后缀,并且因为linux阵营下百家争鸣的特性,一个相同的文件在不同的发行版,可能会有不同,所以如果你能牢牢掌握find命令的使用,你在摸索linux的道路上将会顺利很多,同时你会发现linux下文件查找功能其实很简单,而且要比windows下查找功能强大很多很多!好,下面进入正题
7 @" u; b0 X: ?1 ?, p' I, G% [5 E- `8 j8 V, }. j
; M3 r3 i: x: g! {7 H
Linux下查找文件的命令有两个;locate 和 find7 o6 U7 f" E0 a3 k- G
8 Z, b6 b) ]  b$ D, I' V& [
首先说下locate,locate这个命令是对其生成的数据库进行遍历(生成数据库的命令:updatedb),这一特性决定了用locate查找文件速度很快,但是locate命令只能对文件进行模糊匹配,在精确度上来说差了点,简单介绍下它的两个选项:
7 V/ t" @! S6 p" ~' j+ W& X
0 q: E& A: H- y/ b3 T) ~  #locate 6 f' S% R$ J# p
' ~& J! f% _4 c
             -i        //查找文件的时候不区分大小写 比如:locate  –i   passwd7 g7 a- D' ^$ h* l2 T0 V

# L+ {+ T- B9 _; [. O; F/ L             -n       //只显示查找结果的前N行     比如:locate  -n  5   passwd* ^  B8 r* B! n6 {

; B. U  \* |' P5 [( P# F  n% Q4 \5 V! p
下面重点说下find,find在不指定查找目录的情况下是对整个系统进行遍历查找
& o2 E9 k; ]7 b- d1 F( u& k9 _. k% n3 Y
  使用格式 :   find  [指定查找目录]  [查找规则]  [查找完后执行的action]

7 ~8 J# R3 R% j* k6 Q$ Y) ?7 @' ^3 B, ?* x. }; p6 v, a/ B
  [指定查找目录]例如:
% b% y5 O3 m, `( V/ n) X) J
* f( J8 U! Z* x/ `2 V% b

9 A  t& d; h$ c9 u7 t' Y' x' r# M6 j- A0 ?: e: I( [
这里要注意的是目录之间要用空格分开
% {$ f9 S! O9 Y9 D4 J* `$ I5 @( X( s# O# `1 w7 V: c- N
  [查找规则] 7 l; `* \: y" W6 l; ]" Y

6 L: H6 s, I  u        (1)根据文件名查找0 c- K  u& _& W% F

/ B1 s( B9 E, [' e           #  -name       //根据文件名查找(精确查找)6 `9 w* {) i* I' d" ]+ e

' J0 D" f. l+ Z" E& v' Y; M           #  -iname       //根据文件名查找,但是不区分大小写
4 X! `5 T; O) ]( c$ ]" K8 z7 s) V3 C+ T2 e& M) C
这里另外介绍下文件名通配的知识
( O8 v9 C4 ~" g4 I# G7 S& S6 C, Z: A; p# n  n) f7 Z
*表示  通配任意的字符8 I' ^% k( Z5 Z6 Y3 H! U# I

( X/ Z/ c4 I6 P% U  b

- d) ~" i9 D& x
: U) m/ k! `1 ?9 A6 a. F& G. h  j ?表示  通配任意的单个字符% W0 \7 U, P2 [' C+ h
! Y% U. p: g- B/ ~

- @5 ]$ Q' c. `# p" E6 Y        ( P( |& ?+ ~8 k( l, }
[ ] 表示 通配括号里面的任意一个字符7 j$ k+ l, o' x8 r+ f) Y4 S

/ N2 u& B8 N* n- o# X% x

# ^3 M  S3 U& R5 [0 m( j# U/ s' P) A+ Y8 O  i
     (2),根据文件所属用户和组来查找文件
  E$ K0 s. S9 s9 {& l0 x2 s* a- y5 Q! i
           #  -user         //根据属主来查找文件6 P1 b& m8 }2 w, E, V

: ?. a& ^& n+ C' X5 J           #  -group        //根据属组来查找文件$ Y- U  p) u; z7 G, s  _

2 U1 o- y8 y1 U$ K3 O, B. f$ `2 y: C          (3),根据uid 和 gid来查找用户
2 d/ C& R; v# j$ A4 |. u! v( x2 U' R- _  v
           #find  /tmp  -uid  500  //查找uid是500 的文件* U, i1 y1 H2 W
8 z* \3 x3 k1 L- ]% |. e
           #find  /tmp  -gid  1000 // 查找gid是1000的文件
, V! J- u, j; X  j/ P* }
# N9 S6 w8 K% M: v  T0 H# o          (4),-a  and  -o  and  –not的使用, @% q3 o5 p% u: F/ R; m

/ `- ]; E8 d" H. _           # -a 连接两个不同的条件(两个条件必须同时满足)
3 y- R6 [8 S3 ^% W
, {' ?2 H7 F! a' c; b6 ~! _" }: J

: U" ?0 U2 ?0 G: `; e8 e! f1 m8 P) _: P- E
          # -o 连接两个不同的条件(两个条件满足其一即可)
, K6 _. q; r; M1 J5 u; O1 Z* t5 y! @& [) j- j4 L# N9 y& u
          # -not 对条件取反的% T5 {  @' x/ `" D
1 F* N9 e$ ~0 [+ ^! d
      " R7 h& r1 E  l% `
8 a) r& f1 G4 _/ q! |
    (5),根据文件时间戳的相关属性来查找文件
, O! U5 f, r$ i: B
: V1 C# J$ J% A: B& P( g. `1 r          我们可以使用stat命令来查看一个文件的时间信息 如下:
* p  H- x' S  e; Y5 }; [% q; }+ k! I% ]4 U
$ q" ?  W( b; f

: N- h/ g* w/ R4 Y3 G      
& ?2 W5 \+ C6 p/ O. G           #-atime" x/ f: ~; D  w. o- c
% ?& g  y. ~. p- E% f; U
           #-mtime
- u4 N6 }2 d2 ~$ r* E
8 ?! ~4 ~! l( U$ Y1 g1 Q9 I           #-ctime' v6 n, N9 \1 W( ^4 L' N1 `8 D8 U) ^

) R6 l$ E$ m/ b: n, y& }           #-amin
) A0 `5 }# Z; h
9 v3 U7 g0 P# r' m' D           #-mmin
' L, T* c) O& I5 }
0 }: r: f& [6 Z2 I" R+ Q/ D           #-cmin6 }2 m. C7 [' q4 e7 b. m7 Z
2 W& c. l% J" v, e( X$ b6 b, ^
# u0 p! A8 G) @0 w* y" s, x1 ^( `
   所以这里atime,mtime,ctime就是分别对应的“最近一次访问时间”“最近一次内容修改时间”“最近一次属性修改时间”,这里的atime的单位指的是“天”,amin的单位是分钟  
6 u, Q, [/ A: N# w5 }9 Z- T# t) r. r% c
  S( N6 b" Y7 p6 @3 {8 [          #find  /tmp  –atime  +5           //表示查找在五天内没有访问过的文件2 f/ Q( s. z* g" G- g% S
# y4 v# T9 K# K1 C5 G- ~& _
          #find  /tmp  -atime  -5            //表示查找在五天内访问过的文件
1 r" c+ f  q& E7 q5 Z; @1 Q- U- R' V+ T/ O2 O0 ~' d& J' S
         
6 h! l0 B& U7 `5 F          (6),根据文件类型来查找文件! |0 C. w8 V* k; T+ b
  c$ F* k- _! f2 H
                -type
/ F& z* |% [3 _: ?2 E; z
) E5 K0 ^/ v$ M                      f     // 普通文件
8 U3 j& d* w0 _$ E8 ^9 h+ ?4 }6 ]# O2 ]
                      d     //目录文件. g2 u% F9 T# X

- D; Q4 F( I# X7 `1 M6 U( B7 M                      l     //链接文件5 G# G$ R/ T6 m9 @4 U% L2 {

' B* ^3 Q- f1 x                      b     //块设备文件) }5 e, t! W- c/ ~- r" e
/ `1 a3 c- P6 C  R8 G0 @
                      c     //字符设备文件6 T1 H3 c4 Z$ j' H1 N

, H) O; k- u; M* M# Z4 y' U                      p     //管道文件! w  ?9 S# }0 }/ w- u& }/ H5 J
* \8 g- u6 F$ _  r, `  h
                      s     //socket文件& v% m9 ]7 A% s" J+ d- a
, l8 q5 P3 P/ w! b/ W. A" p& v2 h

$ L0 E8 w( y8 W# i! e' J- S( _8 ]' X7 C7 W# G
2 \8 y3 {) z9 B* `
        (7),根据大小来查找文件
) F! j& X* d; ?+ I$ |% f& y' r8 ^# J0 s) a; X
               -size, n' R) e  _6 X# B' r& [

' R  a3 R- [6 ^, s          #find  /tmp  -size   2M           //查找在/tmp 目录下等于2M的文件
9 B, c3 H7 M( R+ I/ J& b1 m4 W+ {2 d
          #find  /tmp  -size  +2M           //查找在/tmp 目录下大于2M的文件
4 x& t; M# [4 T! I# o5 p8 J( w7 w' W7 s$ W: r1 W
          #find  /tmp  -size  -2M           //查找在/tmp 目录下小于2M的文件
$ }! R% X& c2 M, r( }! z4 z$ g4 S0 M
           (8),根据文件权限查找文件
2 R5 F& V% S3 D" I: [- r+ \$ p; Y' R$ M. T5 {
              -perm
. ^0 n, G% [3 h/ |
: {; Z  P7 t3 o% J          #find  /tmp  -perm  755           //查找在/tmp目录下权限是755的文件
' F8 C, E( _7 W, g: n
: ~, a  V3 ?, A: r8 [          #find  /tmp  -perm  +222          //表示只要有一类用户(属主,属组,其他)的匹配写权限就行2 X+ N+ K; r: d' E

9 S+ N6 E* ]9 }: y          #find  /tmp  -perm  -222          //表示必须所有类别用户都满足有写权限( u3 k& S4 k1 A$ P# t1 |

' p- p9 ]6 d  y/ w1 V           (9),-nouser  and  -nogroup$ g* U! H. y9 Z' L
3 P5 [. |: l$ ?0 p. H" ]# h! {( b
          #find  /  -nogroup –a –nouser       //在整个系统中查找既没有属主又没有属组的文件(这样的文件通常是很危险的,作为系统工程师的我们应该及时清除掉)
4 p# S  X1 E* m
5 H/ D/ d( U; `0 O  [查找完执行的action]
. F) r, ^, ~, g- v+ d& |$ O
1 u+ H1 e5 N0 E8 T         # -print                                 //默认情况下的动作# a5 x* H9 r8 }8 _! U
5 T' c& ?  ~# L3 F( F
         # -ls                                     //查找到后用ls 显示出来3 r; H3 _% M' A" N" n
/ P2 u- m( B' h( n1 i
         # -ok  [commend]                //查找后执行命令的时候询问用户是否要执行
# N  }0 R8 R' R7 R/ X# y2 g! E1 y! l+ f+ v8 B. u" d9 ^
        # -exec [commend]              //查找后执行命令的时候不询问用户,直接执行
- g( I' O6 e. W' o4 {* F
4 a( N& {- U$ o5 W
9 x& O5 y$ U: K$ h' W2 H. j

7 M4 L! F4 f, W; X9 s( m% d; j5 v$ ]( N4 T: e9 D
这里要注意{}的使用:替代查找到的文件
' J$ r! U5 q) z/ b! E2 k
! X/ z$ z: g/ l# B
+ H2 Y) b: p+ X' ^* Y3 `5 k

0 p: D2 I% W; a+ d( s. H' z   & U- u5 p  m9 x2 c- ?! T1 K0 Q
     #find  /tmp  -atime  +30  –exec rm –RF  {}  \; #删除查找到的超过30天没有访问过文件, W9 R! g/ O, ?; {
6 Y  b( |% z$ m% X' _
     我们也可以使用xargs来对查找到的文件进一步操作
# w* L5 w3 L. m: j# ]! n; J. z: d' z& \$ Z! X! s' b. h$ d2 R' J# j

- h  T: |+ o: z/ c: u: v) o   

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 20:50 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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