在Linux中,有很多方法可以做到这一点。国外网站LinuxHaxor总结了五条命令,你可以看看自己知道几条。大多数程序员,可能经常使用其中的2到3条,对这5条命令都很熟悉的人应该是不多的。( Z' ?8 X! x! F
1. find% b: K+ ?! o$ h
; F' [ r- {9 m# S5 R5 D
find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。
* B7 g \/ j& H4 E }
5 L: r2 ?; w- F$ i. U) |' i! T find的使用格式如下:
* o- Q( A, [. ^+ X, G; l, H' h* L2 @ i
$ find <指定目录> <指定条件> <指定动作>: ?/ g8 Y* R) R# R
* s. ^2 a% z U9 ], g' g6 H p+ }
- <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。" Z; p$ I5 O( A0 Z- Q8 N3 b) V# K
4 v" a- ^( b' m, z+ } - <指定条件>: 所要搜索的文件的特征。1 ?( {" q! q2 C g# E* L
/ G) F _; T7 t1 p - <指定动作>: 对搜索结果进行特定的处理。- m M7 t3 X# o' Y7 k/ o7 `1 Q
% ~, F! B: G$ {1 _8 v6 [ 如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。8 D6 i! s& o3 |
2 d; l( ^/ H5 G6 | find的使用实例:
- n# B" Q' }; O) K! l5 J8 z, N! t# F1 ~" a% M
$ find . -name 'my*'7 N( L! @( \; l6 s
2 O5 R$ j) Z0 R 搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。* m' Z' b" F3 e, T6 k0 O) [
9 N: ^% I, A( M5 c: j2 w- e j
$ find . -name 'my*' -ls1 ?, m8 l. T+ {) b$ S- X
- ^2 e+ P7 w: Y# \! ? 搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。
$ o! f9 U. t+ I1 \3 x' C9 k2 T+ i$ F. p% E4 \
$ find . -type f -mmin -102 A& a1 [ x" j* ?/ `
+ E% {9 u3 T, Z( f5 {
搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。+ z p5 v @8 g9 ]( W( S2 G
7 x. ^; J& ?* w* s- u4 |* m* {; t 2. locate( O) k- F) P" G8 d
' F; j. n/ J( e
locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。* V3 n- ?" j9 v6 p
3 _% ^( U7 ?8 a# T locate命令的使用实例:/ ^- m7 f* U% k3 A& b- d8 h
# }1 P, F0 R: C9 @0 {
$ locate /etc/sh
- T; i; ` }0 P9 {3 k6 h3 p2 l+ U' f! c4 H/ W/ f, H
搜索etc目录下所有以sh开头的文件。
& J) l0 R7 Z3 X( H8 z' m
; C5 u+ P* E, g& d1 O1 X2 B9 \% B $ locate ~/m
. B9 A6 [6 s# N9 e" o* F& L: c2 k' X' e/ \* J- B4 E
搜索用户主目录下,所有以m开头的文件。/ p) D$ V% D. G: n* I( {; k
, G$ ]3 _5 | ^1 z7 x
$ locate -i ~/m9 s2 ]$ s" O6 f% ~: n% {
4 C6 o2 M4 j+ s8 R% _8 B; G
搜索用户主目录下,所有以m开头的文件,并且忽略大小写。( w+ N% G4 L3 t7 F L5 _
! `, g3 X- _: w8 K; o
3. whereis
# ~" n1 W8 N" c/ {( Y
0 y: j. j9 I. M2 C4 N4 q" p whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。9 u3 b2 }, I# `( [2 R2 L9 R9 K
0 H* s9 ~8 Y: F1 ~2 M: ~8 a whereis命令的使用实例:/ N9 Q% |# r' B$ v0 w/ K
# w; a( R- z/ G) ]7 b$ I $ whereis grep5 W6 @/ E# a% L( x& ~: f2 v
/ g6 \ c7 Q! t. y9 C* {
4. which
* l. n' r7 u& d8 R8 C3 \! A; V: M* ~" {2 m! f. h2 \6 T
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
3 @3 n7 e$ e) h3 r3 R3 a4 J
* k* ?1 V& {9 b, C- A$ ~ which命令的使用实例:
7 Y- ]" |; a, n9 O& |3 w- d
- I- j8 }$ v' Z, Y2 L( k $ which grep g5 _+ ?, D% G8 K. z1 P# l6 k* |
1 G( {7 m6 l6 u; k/ p* ^ 5. type: B2 `: t0 L8 O0 T( r" U5 u
h, k) e1 H# e. B& S! g6 I7 V$ p; `
type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
( a c! k' Z0 K: e! u! ~! b2 V; V( A" P
type命令的使用实例:
6 |. G5 W" X% F7 x2 V: H/ J; R# H" b1 \& l& l4 S
$ type cd1 l( u& ~: h" m' Q
/ f4 |* ~( d# y2 @- C5 z+ D6 g
系统会提示,cd是shell的自带命令(build-in)。
. x5 ]8 a# m; L* k7 D) Y) R# \# F3 t4 k. B8 B* @- X) h
$ type grep
) x7 w. d7 p9 _& s: J, D1 S, H* O; y8 T: Y- r3 q1 R
系统会提示,grep是一个外部命令,并显示该命令的路径。! g/ c9 s9 y) h2 h" _+ S' g
1 Q% w7 c: _ N0 R$ r $ type -p grep. x! }" S. `' X7 m
7 z \& _2 O7 r& [) _
加上-p参数后,就相当于which命令。, K: ~: b1 H! H9 G/ R |
3 o% j2 S/ G2 X# } _7 u |
|