在Linux中,有很多方法可以做到这一点。国外网站LinuxHaxor总结了五条命令,你可以看看自己知道几条。大多数程序员,可能经常使用其中的2到3条,对这5条命令都很熟悉的人应该是不多的。" f. F& p0 }4 u
1. find
* K# V1 W; P$ H& R
! K8 P: F+ W: X) n find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。
% m1 }# W2 J: j$ _0 N0 ~3 @6 K7 G) h
find的使用格式如下:
! Z3 ~( S6 r7 e
' r5 S7 E2 i0 q6 l5 @6 E% X $ find <指定目录> <指定条件> <指定动作>& X0 ^% I6 x+ B6 _9 F
. o" o. {, b* Z5 H - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。( o) K y j& y. o2 ?* i
% a) B0 H) z( g! y - <指定条件>: 所要搜索的文件的特征。! Q# ~* X! c k& a' L, o
3 I$ P' S0 }; I% O. p* n. n9 i) B - <指定动作>: 对搜索结果进行特定的处理。/ `+ }9 r& I( U2 x& p; a. _% _
7 t6 N7 E5 h' U0 ]
如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。
$ Q' @ @$ u. X: I9 B
& o1 W4 Q7 U+ t5 F1 }8 ~! u: X find的使用实例:: V9 Y* a" ]. g! b( n$ Q# g+ V8 q
A3 [/ B; _: f" Q7 S: _0 m
$ find . -name 'my*'
9 \: O0 Z% [: ]6 C8 d7 K! U
& v3 k P$ R! U( T* h! ] 搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。
) i1 T9 n/ J) \% G
+ O+ k! L7 F9 g) P! ` $ find . -name 'my*' -ls
- I7 G- W. R) ^; x. H! n) p9 D7 s8 J" t. r
搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。
1 w6 i% d! g8 O O0 q# f7 P' k6 d) B4 w- @) R0 ^& n1 J' o
$ find . -type f -mmin -103 q5 E# ^% h, s2 u
, C6 f* M2 y# j& l2 o& ?& L Q 搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。
! j7 M! C" Y# N5 j' C3 U- h7 j$ r+ o6 U# \4 g% \
2. locate! P; [) h' _7 @+ S% X
/ q6 V& j, s2 O, \ locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。. K0 ?! y `# E+ y( {6 U M
- H' y2 V! G5 M$ a. x locate命令的使用实例:
; ^1 z5 P- |3 ]& j0 e4 d" y- O" t" p' `4 B$ x. K3 }
$ locate /etc/sh$ n! T7 k' k. t0 p
) w# ` M; N6 K9 p9 v 搜索etc目录下所有以sh开头的文件。+ X4 b; p2 n2 n4 c, C. n' l5 Z- f
) ~! p% r0 P( G" h4 j, S6 ^2 ] $ locate ~/m
* ]4 q9 L9 K4 T$ g/ @4 s3 P. e! ~
搜索用户主目录下,所有以m开头的文件。5 L5 u$ v; ^8 V6 k2 n* x8 w! P; u
& F5 }# c+ @0 r7 D" ]+ O% H
$ locate -i ~/m
# k7 `( J, [/ [8 {0 N
$ N3 A$ Q* y4 a9 b 搜索用户主目录下,所有以m开头的文件,并且忽略大小写。. E' A/ s7 U& D8 l: W1 H
; @3 G# T0 y4 C9 @3 Q7 d 3. whereis
2 x8 ~8 _% g' d/ o- k. q1 J- f7 H# P, U1 ~! Y2 ?
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
( P o, u3 V! q+ \/ u! z! l
1 R1 ~2 ]) q. |' e5 W whereis命令的使用实例:
9 y! l% p7 i/ O6 U, F9 W! T; I: `1 @( ~1 A$ F. X8 t4 ~- \/ }
$ whereis grep
: U9 F4 ]* G: n2 ]* Q7 Y3 T% N9 f1 Q* q; z: n
4. which8 V4 C9 v! ^6 F6 s5 [- \3 V' `: ~. s
6 K/ V8 R1 x8 l! y8 _4 Q which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
% _- C0 `- f% a1 [ |9 @4 t! B, M9 b
which命令的使用实例:# A* X( W: o1 ~' o+ }
' I& B2 Y/ G }' z6 I# I4 l
$ which grep, [3 j d- ~8 b5 U/ x
3 V7 h& k! A; W4 Q( G* K, |* m" t
5. type
4 T0 B7 M* \ _' q% k. h! [ ]5 }0 i# R# Z6 z- A8 c( ^ Y
type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。2 B' @. T7 p5 ]9 f4 r5 p) ^
3 f1 m! ?) N5 s; ^2 {) p+ t$ x
type命令的使用实例:
$ A$ }8 P0 s ?- @. _6 ]
' o% m+ m0 W% p $ type cd$ g# }% J$ V2 ]" I
- [6 A" D2 d, ^% n3 D
系统会提示,cd是shell的自带命令(build-in)。
7 _5 v% M& f% \) S6 i( h x4 ~& W( n$ u1 M2 ?
$ type grep
( X( r; [: v, l& r7 ]- d4 g; C% F4 z$ E
系统会提示,grep是一个外部命令,并显示该命令的路径。
9 ~2 `, ^- K5 q! e9 E! a
* T0 _! A# k/ b2 a& K9 T $ type -p grep8 H5 ]9 @; u, J! b# S
O- c7 _0 g% ? 加上-p参数后,就相当于which命令。3 L- o" `" y5 ^9 g# l
1 J1 S) V$ t* \# L |
|