文件查找和搜索是常用操作,本文总结Linux文件查找的方法,并简要说明各个查找命令的异同。

which

which命令 查找可执行文件的完整路径。 注意其查找对象为用户当前会话可用的可执行命令,即范围仅限于 $PATH 变量包含的文件夹,以及用户自定义的别名。如果某个命令路径不在当前会话的$PATH变量中,which不会全局搜索去查找。

命令使用示例:

which nisdomainname     // 查找nisdomainname的完整路径,正常输出 /bin/nisdomainname
which gcc               // 查找gcc的完整路径, 可能的输出为 /usr/bin/gcc
which la                // la是自定义的别名,可能的输出为 alias la='ls -A' /bin/ls
which me                // me命令未定义,可能的输出为 /usr/bin/which: no me in (路径字符串)

find

find命令查找符合条件的指定文件,用法为:

find [路径] [选项] [操作]

常用选项有:

-(i)name: 根据名字匹配,可以使用*等匹配符
-maxdepth: 定义查找深度
-user|group: 根据文件属主|用户组查找文件
-type: 根据文件类型过滤文件(d:目录,l:符号链接,f:普通文件)
-mtime: 根据文件变动时间修改, -n表示距离今天n天之内改变的文件,+n表示在n天之前改动的文件

常用操作八廓:

-print: 将匹配结果输出到标准输出(默认)
-exec: 对匹配的文件执行shell命令,格式为: command {} \;,其中{}个 \之间必须有空格
-ok: 与-exec类似,不过执行前需确认

使用示例:

find . -name *.cpp // 查找当前目录下的所有c++源文件
find . -mtime -5 -name *.cpp // 查找5天内改动的c++源文件
find . -user tlanyan -name *.cpp // 查找属主为tlanyan的c++源文件
find /var/www -maxdepth 2 -name *.php -exec php {} \; // 查找/var/www下二级目录内的php文件并执行

find 除了常与 -exec 参数结合,另一个最佳搭档是配合管道的 xargs。例如删除过期日志:

find /var/log/nginx -mtime +15 | xargs rm -rf

whereis

whereis 命令用于定位 某个命令的可执行文件、源文件或者文档的位置,其which命令类似,查找对象是可执行命令。

用法:

whereis [选项] [路径] 文件名

常用选项有:

-b: 只查找可执行文件
-m: 只查找文档
-s: 只查找源代码

路径选项相应为:

-B: 限定查找可执行文件的路径,-M, -S同理

使用示例:

whereis gcc
# 输出: /usr/bin/gcc /usr/lib/gcc /usr/libexec/gcc /usr/share/man/man1/gcc.1.gz

whereis -b gcc
# 输出: /usr/bin/gcc /usr/lib/gcc /usr/libexec/gcc

whereis -b -B /usr/sbin -f nginx
# 输出:nginx: /usr/sbin/nginx

locate

locate命令在某些系统上未安装,CentOS手动安装命令是:yum install -y mlocatelocate使用数据库来查找文件,因此非常快。如果索引数据库不存在,则无法工作,可用 updatedb 命令创建和更新索引数据库。

使用示例:

locate *.cpp
locate -c *.cpp  // 仅统计数量
locate -n 20 *.cpp // 仅显示结果的前20条

grep

grep命令与前几条命令不一样,其 查找包含指定字符串的文件。作用非常强大,是搜索字符串的必备命令。

用法:

grep [选项] [模式] [文件]

其中模式和文件均可使用模糊匹配。

常用选项有:

-i: 不区分大小写

-r: 递归目录查找

-n: 打印关键字所在行号

-c: 只统计匹配的数目

使用示例:

grep -in vector *        // 当前目录下查找包含vector内容的文件,不区分大小写
grep -rn vector *        // 在当前路径下递归查找
grep -rc vector /        // 统计根目录下包含vector的文件数目

总结

which: 查找可执行命令

find: 查找符合条件的文件

whereis: 查找可执行文件及相关信息

locate: 使用数据库快速查找系统中的任意文件

grep: 搜索字符串

参考

  1. Linux查看硬盘信息方法总结