查找文件

Linux中有几个查找文件的命令,他们分别是whichwhereislocatefind,每个命令都有自己的使用场景。下面我们介绍一些常见用法以备随时查阅,其它用法请参考man手册。

which

which <command>

which用于查找一个命令的可执行文件位置。使用例子如下:

我们可以观察到,如果某个命令是别名或者是shell内置命令,which后都会有所显示。对于git这样的命令,则是直接显示出了它的可执行文件路径。

whereis

where <command>

whereis也是用于查询一个命令,但是不仅会列出该命令的可执行文件位置,还会列出这个命令的源代码和man手册(前提是正确安装了这些附加选项)。例子:

locate

locate命令可能系统没有自带,Ubuntu下可以通过apt包管理器来安装。

apt-get install mlocate

注意我们安装的软件包名叫mlocate,它是locate的一个较新的实现,推荐安装mlocate而不是locate

locate <filename>
locate -r <pattern>

locate用于根据文件名查找一个文件,是最常用的文件查找命令,它不直接遍历磁盘,而是通过数据库索引了所有的文件名,使用该命令时查询的是数据库,因此即使我们的磁盘有几个TB,查询结果还是秒出。缺点是它查询的数据库和当前所有文件夹不是时时对应的,而是通过cron定期刷新这个数据库,对于刚刚创建的文件,locate是查不到的。

默认情况下locate的索引数据库每天更新以此,如果我们需要手动进行更新,可以执行updatedb命令。

updatedb

注:WSL中谨慎安装mlocate和使用updatedb,因为它会通过/mnt扫描到宿主机的所有文件,可能执行速度会非常慢。如果要在WSL中使用mlocate,我们需要在更新数据库前修改配置文件/etc/updatedb.conf,在PRUNEPATHS中增加/mnt路径,否则更新数据库过程中可能长时间卡死。

find

find -name <filename>

find是递归遍历磁盘查找一个文件,遍历的起点就是当前目录。显然find命令对于大量文件会非常慢,因此通常适用于弥补locate的不足,在一个包含少量文件的文件夹内搜索文件。其次,find不仅可以根据文件名查找,还能选择其他条件,不过实际上并不常用,具体请参考man手册。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。