which

which [-a] command

其中-a选项表示在PATH目录中可以找到的指令都列出,而不单单是第一个被查找的指令名称,–all的简写。 例如,我们可以查找在系统中gcc命令所处的路径,当第一个搜索出来的路径是在我们自行安装的gcc版本,指定-a选项搜索多出来的一个路径是ubuntu系统自带的gcc版本。

>sxiong@sxiong-X450JF:~$ which gcc
/usr/local/bin/gcc
>sxiong@sxiong-X450JF:~$ which -a gcc
/usr/local/bin/gcc
/usr/bin/gcc

关于which指令,需要注意的地方是,它只会搜索PATH变量指明的路径,其它未在此路径下的命令不会被搜索到。

whereis

whereis [-bmsu] 档案或目录名

这个使用起来并不太方便,个人习惯使用locate的类似于“模糊查找”来满足日常的需求。

locate

locate [-ir] keyword
#查找以“/home/sxiong/rj/x64”开头的文件
sxiong@sxiong-X450JF:~$ locate -ir ^/home/sxiong/rj/x64
/home/sxiong/rj/x64
/home/sxiong/rj/x64/.rgsusfexit
/home/sxiong/rj/x64/README
/home/sxiong/rj/x64/SuConfig.dat
/home/sxiong/rj/x64/fileReg.ini
/home/sxiong/rj/x64/lib
...
#查找以"selinux/makEfile"结尾并忽略大小写的文件
> sxiong@sxiong-X450JF:~$ locate -ir selinux/makEfile$ 
/usr/src/linux-headers-3.2.0-29/scripts/selinux/Makefile
/usr/src/linux-headers-3.2.0-29/security/selinux/Makefile
/usr/src/linux-headers-3.2.0-29-generic/scripts/selinux/Makefile

这个命令比whereis好用之处在于它支持正则匹配查询,可以查找所有与查询字段相关的所有文件,而非二进制文件、说明文件、源代码文件等。

find

find [PATH] [option] [action]

这个指令功能十分强大,在此仅说明一些常见的用法。

-name 按照文件名查找文件

#在当前文件夹下查找所有java后缀文件
> sxiong@sxiong-X450JF:~$ find . -name "*.java"

-type 按照文件类型查找文件

类型主要有:一般正规档案 (f),装置档案 (b, c), 目录 (d), 链接 (l), socket (s),及 FIFO (p) 等属性。

#查找rj目录下的目录文件
>sxiong@sxiong-X450JF:~$ find rj/ -type d
rj/
rj/x86
rj/x86/lib
rj/x64
rj/x64/lib
rj/x64/log

-size 按照文件大小查找文件

#查找rj目录下大于1MB的文件
>sxiong@sxiong-X450JF:~$ find rj/ -size +1M
rj/x86/rjsupplicant
rj/x86/lib/libcrypto.so.6
rj/x64/rjsupplicant
rj/x64/lib/libcrypto.so.6

关于find在查找到文件后进行命令操作,这个自己平时用到比较少,在此不做说明。

总结

参考链接

鸟叔的私房菜