在Linux中,有很多方法可以做到这一点。国外网站LinuxHaxor总结了五条命令,你可以看看自己知道几条。大多数程序员,可能经常使用其中的2到3条,对这5条命令都很熟悉的人应该是不多的。
8 U E- I2 M, B3 e, T8 T2 M7 C! U 1. find" ?& c8 F+ N, [4 G% \8 }
8 E: `, H# `- W! P$ q find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。
* V/ G6 b% {* e+ B
+ ]/ J) x) O5 c, X find的使用格式如下:
( L6 r7 p& g2 ~6 Q8 Q4 E5 v) w
: R3 j; Z' [) v $ find <指定目录> <指定条件> <指定动作>7 E6 I! l4 N6 J3 U7 T# {
; E, Q" r! n, ~ h% I - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。
. o5 [1 I5 ^' a3 T) }: s! A
D4 N( D7 p) l( y - <指定条件>: 所要搜索的文件的特征。% c* N: }5 l v1 s N
, z% e9 y3 y' a! d/ J0 r5 Q
- <指定动作>: 对搜索结果进行特定的处理。
3 m. N/ h* q* n8 x! T7 G
/ o& |% u$ \$ @# x 如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。/ b- O2 z, v- w% N. P$ ?+ G
+ A s C) l2 x# h5 v4 k& y
find的使用实例:
# ?" ?& k* m# d' c9 g% ^7 I
0 D8 ^' N- O" l+ H! ?+ K: L ~% z $ find . -name 'my*'
, V& c! L/ K$ W) O/ F$ Q- h3 X8 h" ]- n& P+ N! h
搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。
7 t) _2 w: ^% @& x% w' `) N+ t
- X1 ?" O, `9 V# j! h $ find . -name 'my*' -ls
: G6 e$ w$ \, \. A. z7 c+ J; b
搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。& C; \% j4 h& b" e. D3 d
. W$ J9 U7 S$ p2 r; y: ^
$ find . -type f -mmin -10
) i$ d, q8 ` W9 g! P& W3 ^' _! b7 l* Z1 L
搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。; Z( b$ N" B9 i1 n2 e2 q8 H
+ [/ o$ |3 U0 I* R
2. locate
9 A; |& J* V( w' x
& g7 @5 \. p4 t- B' n locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
( O/ b- G& Z" N' F9 K& Z" Q T9 d( O$ _: F' r
locate命令的使用实例:
1 T$ @; b0 S- A. }- ]. ^2 Z: {' Z* s
$ locate /etc/sh- i3 I/ W/ A7 U: X6 ^0 g$ c8 o
) w8 w3 B$ \" n+ ]
搜索etc目录下所有以sh开头的文件。
+ }! N$ c3 s5 l7 L& c( t
% W; t) h& _/ k. D9 c- h; Z $ locate ~/m
6 Y/ L- A+ ~; C8 z+ ^
+ H! \ U7 r% n6 {) o. @ 搜索用户主目录下,所有以m开头的文件。
" a+ k# M( B0 k: t
0 }* x9 `, @9 s+ V $ locate -i ~/m
% p4 d+ C4 H' ~
0 @9 |- V5 n) a! p# d( O( g6 ~ 搜索用户主目录下,所有以m开头的文件,并且忽略大小写。
& V! I' S' b$ d1 d' V% C4 f. J1 z) T. H' P8 k; k: E
3. whereis1 x9 `& K: H7 C+ T6 a: v
1 j$ m0 q8 s" g! ^1 g- S whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。2 T% C$ ~7 H. Y2 p- v
# t& {' D) m/ S v c- c4 m
whereis命令的使用实例:
) j$ f: ]9 @- B0 g! A
' w) s$ o+ s3 x8 z- ] $ whereis grep" a6 I7 u" o& J" u/ ^% U, \# Z- c5 q# Z
4 H# k y, A3 p) i" {' e
4. which
8 K1 t9 B; R! H4 j, h3 w* q* X; M/ J, z9 h
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
; G: g2 w- G6 z6 P' @% X }( V4 l g6 ]+ D' q8 |2 v3 {
which命令的使用实例:0 `1 F, o0 |' _' _% k. T
$ E0 ~: k" o+ F+ B
$ which grep
0 l. J9 }+ e% J$ B7 c. D; m3 T! V6 }) e2 ~+ X& Z
5. type
& c: B1 r: _( |" ]
& h" C7 \. l$ W type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
8 F. H, ]; l+ D! i& B% t/ C$ [9 E: m9 R7 ^
type命令的使用实例:/ y: U! H# N* x& q) ^" Y" H: t
+ j( u7 Z/ P$ f0 A $ type cd
4 x+ }$ v! }; n3 b$ X' x8 L2 r6 [$ ]- h1 }- j* ^; X% G5 A7 A! z3 K
系统会提示,cd是shell的自带命令(build-in)。
) c2 \9 Q3 }9 _: ]! ~( v" m5 d( u6 `
$ i' I% R1 n, L $ type grep4 Q4 C- o1 H0 |: A; {) n% E
9 t S; k# j* |# W3 v
系统会提示,grep是一个外部命令,并显示该命令的路径。8 Q$ Y3 I; S/ T; B/ r: f* F y
: \8 L+ ~* J3 O, y; S
$ type -p grep
* w8 F5 g, i/ `5 @: T$ L/ W: [# H1 G2 h0 y
加上-p参数后,就相当于which命令。
9 p7 u# K/ F9 c x% }6 ~ Y _1 G) F( L/ n& r" M
|
|