在Linux中,有很多方法可以做到这一点。国外网站LinuxHaxor总结了五条命令,你可以看看自己知道几条。大多数程序员,可能经常使用其中的2到3条,对这5条命令都很熟悉的人应该是不多的。; w, h: B. r+ w" p9 `7 u! M' q/ y9 K. I
1. find
4 k. G$ B9 ]2 w9 a8 I1 |% q! I: U& ]) w$ ~4 ^
find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。( t; ^% I0 ^" y
( S3 u) y- G3 \0 n9 ? find的使用格式如下:" C( P: u) ] c" U- D" \+ W
0 I J2 o9 {# B6 ^" ~ $ find <指定目录> <指定条件> <指定动作>
- J& M ^- y4 _ @8 c! k( V) ~
: G9 _* n# _# l' g3 O' h - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。7 n) ~1 y9 ~# I
7 R; v' M4 h, p+ W
- <指定条件>: 所要搜索的文件的特征。
) g4 Z% R$ {$ b( g) J
6 d# u- F# V4 E2 Y2 |5 j; p - <指定动作>: 对搜索结果进行特定的处理。
* H9 a; E; Z3 w# C+ L& I3 `# [( d' e+ x3 K& U
如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。5 D) {# H( M. ]5 \4 G8 ~) M9 V7 @& c( D
, q" f k5 D7 B) V( `- c8 q' f6 c
find的使用实例:
5 G, S& k- S% R6 C0 b
- ^ q1 p- ~7 z8 A( R0 P $ find . -name 'my*' a' { [6 ?4 J: ]1 J) }7 B
9 \7 \% e- [4 h8 b
搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。
. a4 f) |( V) j$ p$ l: v3 H2 n% c/ ^8 e g0 ~" b
$ find . -name 'my*' -ls# }& A" w Z6 m
, n, ?6 B1 s" V4 B, c A
搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。; @! [* {% C4 H& H) U
' Q$ ]3 t' @! J4 Y
$ find . -type f -mmin -10
5 V" e8 i: L: _5 S. d$ t- ^7 i
4 u9 {. v9 A o+ T3 b6 R& O! \ 搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。
, A- w+ w, @. f6 m# Q' a: E }5 z9 S
2. locate
% f, t. k4 @( \6 l! g# y+ P3 x. s2 F" |8 a7 x( F8 X
locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。2 |9 X q: k2 S4 K, V
8 ` {& ?) X# @: g6 B
locate命令的使用实例:
+ T$ A$ x- \6 Y6 H3 M+ G! F& Q8 u9 `- N/ r. x1 X5 x$ L5 y
$ locate /etc/sh
! `6 n) C' O# [4 E) c% C, @# d' p2 y7 y
搜索etc目录下所有以sh开头的文件。 Z& y- L8 o! _; v* E3 x
6 a/ @3 R* x( b$ v. [7 H% J+ D# X! E $ locate ~/m
- ?) ^/ Z( b5 R) ?, C3 f
D, K9 s( d1 a0 c. n# ~# o! L 搜索用户主目录下,所有以m开头的文件。
. I, B: ~. U9 n* |( `, A Q& v9 ?
$ locate -i ~/m
$ d; I' M$ I0 v2 K2 L2 R: i. x! z) E" e' A0 x' ?. s( ?0 f
搜索用户主目录下,所有以m开头的文件,并且忽略大小写。% v. F* e. t4 e4 v, b& m
7 |( e* M5 [6 ?, [; I( G6 S
3. whereis
# j5 n" ~& K; U/ N, u9 c a0 e- x- B7 l8 B6 y. a, V) d! P
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。 i; Z5 A0 L2 \: o+ @: m
0 j% R" ^$ [/ Q
whereis命令的使用实例: x9 [& {. f" q3 b B7 ~5 Q
! a9 w5 {0 r, W+ e6 w! C) z$ w5 A
$ whereis grep& l4 a# P: J4 f# w. z
( J3 }( `+ ]1 F
4. which
4 P& R7 d" b4 t4 _! k) N4 S2 A: n$ W4 ?8 N6 ?/ h- {# v% g2 l
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。/ y+ W. ^$ t d( g( V' G+ e( I
7 L0 K E! o5 @! k- o$ @3 D
which命令的使用实例:
. m+ D1 M+ P7 D& Q/ h/ o% }
4 N( F0 D( s6 }* Y5 e c* Z! d4 v $ which grep
) O+ h5 r( e, {* K( N- i5 p a. y6 {8 z1 |/ Z6 k
5. type/ z `; o/ n" s+ ]1 {4 ^" D' E% C
2 m$ [5 j9 l( ]4 q/ D type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。" A: q% i4 i# Q4 g
! S6 B _( |1 Q% N& [8 I type命令的使用实例:; l; H# P5 m" ] a' L' r4 W
/ U3 I! o9 j5 E { $ type cd* N N% w' F5 w; b4 v
5 r3 b# x" V! @5 q( V0 ?: Y% K0 q
系统会提示,cd是shell的自带命令(build-in)。
/ b1 |: w) Z% _" f( V, X0 j
- y3 Q8 H9 g6 G0 |: H $ type grep
' F0 y( X' T |) v
2 ^' ?* d) ^. S; C. N 系统会提示,grep是一个外部命令,并显示该命令的路径。
6 m% D3 M/ H; h7 R0 m5 p
4 R( ~" A: o( T t/ X& s: ~ $ type -p grep
. a( ~$ |/ a' I6 q0 A$ @7 e7 _6 S0 N3 \: {% e
加上-p参数后,就相当于which命令。
( ~7 i: h5 ^* ~5 q
# s! e, i% I% M. T* @8 b- y& ~ |
|