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

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

[复制链接]

该用户从未签到

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

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   

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 14:04 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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