在Linux中,有很多方法可以做到这一点。国外网站LinuxHaxor总结了五条命令,你可以看看自己知道几条。大多数程序员,可能经常使用其中的2到3条,对这5条命令都很熟悉的人应该是不多的。
0 m8 K4 e6 |0 S$ D5 w" V 1. find
; x% I# b3 n5 y, a8 C3 E5 u4 }, M9 X0 w% {+ X
find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。
6 `7 t6 d9 W- |: w. E( l9 @0 L- E6 b: S5 x
find的使用格式如下:
7 Q& w1 x/ C$ R; v* g% t% B! S* i$ ~/ G
$ find <指定目录> <指定条件> <指定动作>- ~8 j, {/ r* w8 y
- H a/ R0 P7 q4 r4 I" b6 @ - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。
0 H$ X a I4 ~: d+ s
}: F6 x6 s5 _- N - <指定条件>: 所要搜索的文件的特征。
+ A- A' {& _+ A$ |7 @! T
; b; O! H% K. X+ F, I' N - <指定动作>: 对搜索结果进行特定的处理。
/ u( k( o F e2 {3 V" a Y' p' m5 c" x) d$ I
如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。) a s+ E1 V- @" y
0 M4 i4 g5 ~2 _7 I6 u2 Y: d find的使用实例:& g6 n' X- \; d- ~* }+ c
$ _ I4 q/ |1 u7 N3 ] $ find . -name 'my*'8 j/ \3 U5 r$ b) V' h
% g# y5 W1 z1 I/ T; r: v
搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。
- F* h! U9 j8 s& q+ I0 }
& \, g- i0 l h8 k $ find . -name 'my*' -ls( I8 v5 ^0 |7 [& l7 h x
8 a0 [: s: m2 A6 X6 E5 E2 {
搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。$ P2 Q* s# w, X' e. {- p
4 `2 z" L2 D- P5 U+ X3 c* D+ a
$ find . -type f -mmin -10
- N, v' ]# t8 s- c* n6 N& p' P9 b- D( I% J" H; J. C/ k
搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。
|$ f( V# |6 u# o1 w- |" H4 z8 X! X( Q0 j$ f
2. locate
# c# Y+ i- ?8 c
0 o0 _/ l9 `* h: M5 m+ L locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
7 l1 P T0 ]: D) V( [; c$ m( Q- p% M5 s8 O
" C# z1 v& j7 ^ locate命令的使用实例:
4 Q+ k# a" ^* \: a( ^, x E2 ]3 q& `# W9 [; b$ d% e5 a+ U
$ locate /etc/sh
6 r; a* _ B3 [+ Y$ s7 @) R" E1 @8 c! P* h: l, p$ l* A
搜索etc目录下所有以sh开头的文件。
/ J S6 l8 `6 R" `/ y5 D4 w3 W6 m4 ?( @+ S2 g
$ locate ~/m
7 [3 }) d m" x n6 D; k; _$ f, k6 H+ l8 T( y6 a" K
搜索用户主目录下,所有以m开头的文件。7 R6 `8 J$ t4 `, A' l+ k4 `
% A0 b/ t0 Q. H
$ locate -i ~/m8 F7 [5 W/ X/ A, q; o+ W% T
0 x" B+ C3 V m5 G/ ]& L
搜索用户主目录下,所有以m开头的文件,并且忽略大小写。9 l8 v- e! M, ~
! J* z5 M! g5 q% r, V; c. t
3. whereis; ~ H- ]2 ?- @# w% S& y
; m1 y( {, c0 U8 m/ ~( K8 q
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
) T, s7 j8 V) M/ `% y* H" b( j7 I/ I. B
whereis命令的使用实例: n4 f# v8 e, }0 o1 S: [8 ~
. T) g% x1 c& X/ M
$ whereis grep
, J8 M" y$ n. m, O, A) _* R: k3 Z* W' |
4. which
) e& B" H+ w& H% m. _* T: u) o
- E& L! ?+ t4 O$ ]: D( L3 c# A which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。 y+ M8 F4 ~2 m( }* H: \( [
. }8 ^. H3 M: W$ x9 t+ t' X( e which命令的使用实例:
1 c5 c g) X: ?) [0 ` {( i: \
4 @/ k9 B* c- b& ?9 O2 O $ which grep# a& v3 X$ N8 a- V- a2 T+ x: C- Q
0 s: U& @) [ {& K 5. type
1 P. Y% f, z. ]( V- h$ Q# M1 @
& F3 a) u- j' b. {" `2 D& o type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
; s0 b/ m a8 k7 `
N* k/ k4 {! J" O3 [ type命令的使用实例:0 p8 n( s# ^. t* N4 E7 L
5 N# F6 k4 P k $ type cd
! r( ` E4 ], r' A
% x# ]6 \+ ~9 U0 Z 系统会提示,cd是shell的自带命令(build-in)。4 X3 w, q2 ]6 x/ a' N- N" {
/ X9 ]2 e! C2 H1 U+ G0 A' B $ type grep
( q% [! n+ X+ C1 g& O3 O+ S! n C" j6 t5 ?& r2 B. n/ ~# G, ~+ m
系统会提示,grep是一个外部命令,并显示该命令的路径。- c/ g* Z+ _* V9 b4 T
! I" ]0 k2 T ?8 m# k8 x5 y% j $ type -p grep
# @) v7 K: E& L: j# K4 o
; M. Z' ^4 h, v T% {) U 加上-p参数后,就相当于which命令。3 G: F. ]4 L# }8 N1 _ O1 D$ J
$ `4 s* H% w( ?# h# {( E! r
|
|