在Linux中,有很多方法可以做到这一点。国外网站LinuxHaxor总结了五条命令,你可以看看自己知道几条。大多数程序员,可能经常使用其中的2到3条,对这5条命令都很熟悉的人应该是不多的。) |( [' k8 m' U. x7 c) `, g
1. find
# O* Y/ Q+ z2 d1 h8 Z; z( m4 w: p* P1 f! j v( Y4 c
find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。2 D. x0 W5 c7 C' R; C s o
; _1 G. u5 g/ n' @ find的使用格式如下:
3 U# k; R5 u7 O! M, o
1 o; c; x+ H, A) y5 e* X $ find <指定目录> <指定条件> <指定动作>
/ B3 q+ I$ O8 n: @* t% ?
# ^* K/ `# w5 e ~* i - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。
9 F! i3 L. Y) b; y
+ O$ \" M. p6 B2 b/ l( `7 L - <指定条件>: 所要搜索的文件的特征。
# t6 I5 o( I# q; T. N2 @' D1 C! O# v0 v" G9 o
- <指定动作>: 对搜索结果进行特定的处理。, y u$ n; j7 d( Y6 z/ i4 q
) ~4 E) S' X( h1 o( U
如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。5 ?. f0 Q5 R, o# {: d. s% p
( P9 w/ ^2 \/ M2 e
find的使用实例:+ z; \ y+ ?1 ^+ d! J
; | u. u6 u, j% u H) e0 |! A
$ find . -name 'my*'
$ D6 ]4 ^+ c3 ?8 z0 |; d* ?
; i0 B, I) a) {- D5 v5 o& I 搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。. g8 v' l) q; D9 i$ n
/ [/ G1 {% U, {8 d, j5 ~$ S A3 y5 w $ find . -name 'my*' -ls
/ T5 z$ n \ q0 s1 V3 n" ]# ~. v$ S* Z& [- @
搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。1 \% ~0 R+ `7 L2 R: z: m
5 I1 s9 F, A. y2 E+ R
$ find . -type f -mmin -10
9 V5 f* f2 b3 _: ^ q3 k) s& J6 N8 [
3 F& a* v: c b0 w1 a, J( y 搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。% {' G& P0 i$ Q1 z$ X) `
, P) |- _, O: m+ r1 g 2. locate& ?% \& t3 ]. V2 j2 O6 \' `3 C
# J. t# J0 H& i/ E& n
locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。5 s/ x2 k+ m4 c. b7 W1 {: E
W! P& ~3 A! _% T7 b locate命令的使用实例:
0 r/ Y; q! p6 q
. B. z8 e9 _/ E: Q% `5 r $ locate /etc/sh
) Q1 r; z) M' P; K+ y1 }9 U h; v$ N. j" ~2 |3 B5 C
搜索etc目录下所有以sh开头的文件。& F1 K6 m ^7 ~. s" s- T: s
, |# U3 Q6 ]. g& S $ locate ~/m
" u: y% A) e9 Y% K0 R: ^ z4 m5 T+ r3 h
搜索用户主目录下,所有以m开头的文件。
! X; F3 S% Q* r$ w* l& K3 G* l, I) Y m% l. e) S0 _
$ locate -i ~/m: `& R/ ]2 C7 b; M
8 Q# [; n7 U. \' ]# U& g x 搜索用户主目录下,所有以m开头的文件,并且忽略大小写。( U8 o, i( p1 w
( ?7 p! J, Q6 s4 a; @! b4 P: x k 3. whereis
- g; R t+ t3 n5 a6 `' r6 @- |0 z6 ^5 V, a; `
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
# H7 g* D1 Z/ @: ~) m( q7 t3 `) P- T0 ?4 Y0 J1 o
whereis命令的使用实例:
5 s8 b3 `( _. ^ ?- ^
" ^2 j" Y3 S: f* l $ whereis grep
# R0 N1 L3 ~1 x& x. D' z& L( Q1 f: v$ H: d) b p
4. which- \, X1 q8 c6 i! D3 U$ t2 U$ Q3 l
2 c6 S. L' D5 ~5 _ which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。 @9 }. j% X2 \# }; N& s$ V
* O) o5 l6 [+ d h- L l$ @
which命令的使用实例:2 H8 W) @( n, ^0 l
% m" `+ w* k7 p- z, B% l $ which grep
7 t3 [( |, o) E% t4 W
. P' D) z3 n4 w4 w 5. type1 L: d* G! g, S# g1 c J4 E
% E6 a s$ [( g b# e8 m type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。* Z6 h4 V4 {8 s7 I
9 @" Y6 t* {3 ^$ u% u7 k type命令的使用实例:
/ _$ }7 N" t( ^. Y6 e" M( S3 K2 p' I- t" j( U8 n- I- Q- M
$ type cd
' [* I, a) h- C8 K+ s, U) ~& M4 x) n D0 f- f
系统会提示,cd是shell的自带命令(build-in)。
# Z, z# A! p( v$ |6 r* K) ?! _* W9 a! g7 p g t) O* F$ O! d
$ type grep
. L; z& b- ^# ^9 i; \; H9 q- |; r n/ D7 F3 ` k
系统会提示,grep是一个外部命令,并显示该命令的路径。
4 ?; X8 }8 w& Z6 d# S+ u% j& I
) |4 |+ c- \9 g3 a: |- S* |. G $ type -p grep% }' r6 w6 Q k/ p& X
) \4 n! z" l) |5 ?0 v q
加上-p参数后,就相当于which命令。: m5 |; V9 y6 h, d0 p# { M. o
- [+ C$ d9 b* }; b8 {
|
|