在Linux中,有很多方法可以做到这一点。国外网站LinuxHaxor总结了五条命令,你可以看看自己知道几条。大多数程序员,可能经常使用其中的2到3条,对这5条命令都很熟悉的人应该是不多的。
: \- A1 y1 i' k4 o 1. find6 L" s1 x/ j! H* G: T: m
2 K( E6 | {! f/ ]; B* G$ P
find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。. C4 i4 |3 e) F4 i ?5 c
; @) S0 _* v0 L) V: n6 Z; E2 n/ E find的使用格式如下:* A( c, K: X3 V3 `8 p, s
3 n% X! {* c. E' k2 F
$ find <指定目录> <指定条件> <指定动作>' ]6 H, H& y" ^- g% u
3 X( \" V- T$ C( X7 `% Z
- <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。6 D) B$ d8 b' b1 Y: O
1 w0 p0 a8 }4 @. Y- A - <指定条件>: 所要搜索的文件的特征。1 c/ R% i/ D: |
1 m- t: j8 B6 q - <指定动作>: 对搜索结果进行特定的处理。' U* [4 m' v. u3 r* h
- f+ L2 v: e) q; j4 e% @8 k" u8 m
如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。
6 {0 W- M/ d8 }4 H
/ ?; g" y/ M/ H find的使用实例:2 r- f! T/ E7 C$ h5 G1 N' m. k, b+ V
+ E2 j) y. R( B0 a8 b& M0 j $ find . -name 'my*'
; \# K0 L# Q& F8 o+ c3 o- c% q6 ~3 ^
+ V3 _. T+ U8 H3 Q) |+ j 搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。0 K2 y9 E4 A# x, e$ t0 L
0 p. f! J3 @1 s& |. a
$ find . -name 'my*' -ls7 m) |% f* y4 N- i c$ U
8 G5 o% g% }) b8 z8 D
搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。
# S" n* [. @: T% v9 J% n8 n+ ?9 l" M3 F8 o# S
$ find . -type f -mmin -10# W2 ~) P! }8 P
+ _8 N3 j; ?! M; y
搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。
% `: u' @ \" _ ~) c
9 q, G8 Z5 N0 W; J 2. locate6 q, ]' e' {; W I* H7 u6 U/ |
& h7 w( I& ?0 G: ^: j9 H/ J% w, X+ {
locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。. m R* N# `0 V3 t0 [
7 h" O' E8 g; L5 }# ` locate命令的使用实例:
3 u* f: s) l. k& n7 L
% r1 L0 [. n3 y7 X( z! o; f $ locate /etc/sh
- e) r" |' V0 a, M% j }$ U# S# w) w/ u* v1 d e# Y2 A) {" B
搜索etc目录下所有以sh开头的文件。" b$ C1 m2 \+ D$ U' m2 V2 G
I# v, h" [: s $ locate ~/m" C3 [: W; I3 _( `* Y
+ w: d4 L; f5 N7 x 搜索用户主目录下,所有以m开头的文件。7 F0 q9 L2 A* o2 ]' V5 X6 P" E; N
' t( K8 K- i; |9 Z
$ locate -i ~/m
; B" [3 F' Q6 |* t7 o$ S* Q% P7 N; _5 S m9 j: g; @! ~7 D3 F2 | G5 k. o
搜索用户主目录下,所有以m开头的文件,并且忽略大小写。
, H( b$ f' q6 X' j9 J
% H D0 p# L) u' }9 Q 3. whereis9 b d9 B9 F2 j y' {0 L7 W
# H4 r7 Z5 p2 |0 P whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。 c+ D! u# L) D
- y5 N& f! J& W2 K whereis命令的使用实例:
N* A2 h( D8 L4 c0 ~$ {; P7 V) z3 N! C1 |7 J/ Q3 o# k8 n# E8 j
$ whereis grep0 x3 m% M6 ^, `- G2 \
$ Q9 ]- I6 P+ U0 e 4. which
3 k! `4 k0 q8 F
4 {2 {0 }" Z/ S which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
0 h& B* m8 f4 R/ ^
/ `, G; ^$ e$ S2 o Q9 @/ K which命令的使用实例:
3 f* K8 N+ w5 Y o% z! v! @; K9 Y. q4 T0 q: Q8 a
$ which grep
' T- d7 B1 E9 |9 Y
7 N9 N! H5 {# s7 e 5. type" ?. n" r9 l7 {4 Y5 o9 G
- n' Z5 ^, u3 ` type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
# Y- s/ r' k& G% J# r S$ @: ?. W" w3 @. i3 z! h
type命令的使用实例:5 F3 ?$ G) g8 T2 R5 z* e
' t. `" ] z- x: W6 c1 m
$ type cd, k8 r+ p; c3 F1 ^
4 | V7 a( E: P t, j. ?" v( z
系统会提示,cd是shell的自带命令(build-in)。7 }7 E' R% }8 B6 O
+ E; m4 q/ f3 e/ F' [% S3 a, K+ t $ type grep9 r, ]$ ^) `9 G! i2 L
, X0 m7 J# |; V2 ^$ N
系统会提示,grep是一个外部命令,并显示该命令的路径。2 n0 B" w2 n. p
* {) e1 N6 L X: b8 X/ g $ type -p grep
* z' a/ ]! x# {- k8 Y
7 g5 I( ]* h O0 a 加上-p参数后,就相当于which命令。
: F: o+ S! g# }' k1 K, v1 C! h" u e3 t
|
|