linux下的文件查找

作者 | 2014年10月30日

文件搜寻和查找是常用的操作,这里根据自己的使用体会总结一下常用命令。

which 命令

which命令用于 查找可执行文件的完整路径。 注意其查找对象为用户当前可用的可执行命令,即意味着其查找范围仅限于 $PATH 变量包含的文件夹,以及用户自定义的别名。

命令使用示例:

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文件并执行(可用于语法检测)

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 gcc // 可能的输出为: /usr/sbin//nginx

locate 命令

locate命令根据locate数据库来查找文件。此命令需要索引数据库的支持,从而非常快。

使用示例:

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

grep 命令

grep命令与前几条命令不一样,其是 查找内容包含指定参数的文件。其作用非常强大,与find组合形成linux下最有用的文件查找命令。

用法: grep [选项] [模式] [文件] 常用选项有: -i: 不区分大小写 -r: 递归目录查找 -n: 打印关键字所在行号 -c: 只统计匹配的数目 模式和文件均可使用模糊匹配。

使用示例:

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

综合上述,最常用的是which,最有用的是grep和find。

发表评论

电子邮件地址不会被公开。 必填项已用*标注