在Linux中,有很多方法可以做到这一点。国外网站LinuxHaxor总结了五条命令,你可以看看自己知道几条。大多数程序员,可能经常使用其中的2到3条,对这5条命令都很熟悉的人应该是不多的。
9 U6 r2 h, b/ E* b 1. find! l3 e1 v7 e0 x! A G+ Y2 ?# \
: o9 Q. s4 l8 `4 B: F7 g3 K9 w find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。
, ~ E+ q5 d- S U7 E" e/ X/ ?" x1 ?9 m9 ~, ]
find的使用格式如下:
0 U0 D" Q" _7 A' `# J2 m- M) |4 Q7 f" y( R
$ find <指定目录> <指定条件> <指定动作>
" n5 v# x* X3 Y9 \2 v5 B0 V: l4 l# k/ g9 x3 ~5 q& }
- <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。 N& b5 x7 y% r7 q) u
7 w2 y' U$ Y! N0 [0 b, ^ - <指定条件>: 所要搜索的文件的特征。
: H7 X4 B3 [- `0 q* }
^! z" x. Q% k r$ v2 z$ E) u - <指定动作>: 对搜索结果进行特定的处理。 D! o; L1 C& g5 f, G- g9 @
9 I- m3 W. @' l8 c1 o/ D
如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。
3 T* b! F. a \- Q, e; h. g0 g3 Z2 g. W4 [: ~# a4 p4 q3 ?
find的使用实例:: N! G" {! p' V: \. X0 E7 z0 N
9 ]5 h" `9 t Q/ U: j9 @0 h
$ find . -name 'my*'! z6 G* S5 {, g
* t6 [+ u- S% h( L
搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。
! M1 t1 ]* [+ a; V" B+ e" R2 h" E6 L: ^+ a1 T* H
$ find . -name 'my*' -ls
* |8 M2 Z `8 j: L H' y. r( ^( _# S% g+ @" F. z" f1 P/ e( Q' }8 h; j
搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。3 c6 I6 |3 C) B8 @* o
* k( Y4 m4 r. | $ find . -type f -mmin -10
. ~7 s8 Z: M8 U, Q+ {
0 _ _6 n. W: a" O 搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。; q; u4 D) C6 T8 _; E S8 x% R1 u; u
$ r7 Z* ~- ]4 T- _ N: H% g3 z
2. locate
) ?3 t g- z% o0 Z
" w2 ]4 Q% g3 } locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。. t* D, ?) w7 S. o! A/ C1 }8 ?
/ a) b; l, D( b- s2 ~ locate命令的使用实例:
7 U+ u2 U) A: @1 m0 O# K7 B2 \- z: [5 o7 O9 d4 m% i3 i5 {- H0 Z
$ locate /etc/sh- i" { q; s' ]+ \" }% D; d0 Q: Q9 ~
0 y D8 }+ _3 C9 @' v 搜索etc目录下所有以sh开头的文件。
5 @9 y; d: ^4 [. O5 \# u% q" A% ]
$ locate ~/m
9 }" y$ G' A$ s2 `5 F% { D( Y: I
8 l' u. D4 T8 t) U! w% A6 o! B; n 搜索用户主目录下,所有以m开头的文件。8 n9 o! ^5 b2 H7 ]% S
/ ~& [. C. \# _$ V $ locate -i ~/m
6 \0 V! I: G8 I. W7 {3 o
; l$ [- Z( q# s$ C* p3 ] 搜索用户主目录下,所有以m开头的文件,并且忽略大小写。: G2 o+ _' g I* V5 Q1 O& e3 v
+ t; U& O9 Z: [- c6 |/ Q
3. whereis; ^4 j, ^& i, S# D) j" Q
& Q" J+ O6 P- I$ o+ Q' V4 y; ?
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。2 ]9 e" b/ e1 w& Z/ C2 d/ b
, l1 {! R }, {9 V/ e3 h2 b1 a9 e' d whereis命令的使用实例:
% ^" L$ W/ Q! Q: B. h
* x3 J2 u7 H. P# j4 p( `4 \. q $ whereis grep
. \6 q1 C4 y' a: m! n% S" z; C f2 V0 k$ \7 w! N {0 e5 j
4. which+ C. S9 u& T2 r; Y$ {. j8 Q
1 o; ?7 d# j! c7 O0 u which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。2 s# d" G8 [. U' U, H5 d/ V3 q/ X
& K0 R' x) C1 e! B) [, n which命令的使用实例:6 ` ^- b& q1 x- d
* P$ G3 |2 `3 S* e7 ?% S
$ which grep% ~+ C: l6 ~$ ]: u2 R& f
% q3 a! L% H1 x( Q m
5. type/ d; F0 {1 X( K! s/ Z+ v+ h
) j. R2 w# }' l3 l
type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。5 q' X" v+ n+ {2 [' e7 o
' F) ~4 W! D; d; k' F type命令的使用实例:
7 Q8 M+ Z- L% h
8 n! @1 y& Z5 H4 h. A $ type cd
# Z8 K$ r6 E# W, F2 D4 F* g; Y6 M& c% E9 u* ~
系统会提示,cd是shell的自带命令(build-in)。
- I% X- O& Y7 {0 O; [8 `
6 c7 _- g/ M. w $ type grep- h( }* w4 j8 E" C6 |, J" d6 u
, w+ O5 Z& W: @+ g, e
系统会提示,grep是一个外部命令,并显示该命令的路径。: h+ q$ F3 H+ E: D9 L
" ?# X) u0 p3 c9 ]4 s. o/ w' w7 S
$ type -p grep7 g6 O$ v/ ]& L& ]3 w0 x4 H
. n8 a" F4 j! y/ ~, o8 ^* E 加上-p参数后,就相当于which命令。
4 I! `9 I: j4 L6 u) e
9 J. U$ F; |$ M! \' c) i0 \ |
|