在使用Linux时,最常用的操作之一是搜索文件和目录。
在Linux中有几个查找文件的命令,其中find和locate命令应该是用的最多的。而且locate命令是通过文件和目录的名称搜索文件的最快,最简单的方法。
locate命令快是因为它查的是updatedb命令所生成的数据库。locate命令被安装的时候会创建一个cron作业,该作业每24小时运行一次updatedb命令。这样可以确保数据库得到定期更新。有关cron作业的更多信息,可查看/etc/cron.daily/mlocate文件,当然也可以手动执行updatedb来更新数据库文件。
1
sudo updatedb
更新过程将花费一些时间,具体取决于文件和目录的数量以及系统的速度。
与find命令相比,locate的运行速度更快,但缺少很多其他功能,并且只能按文件名进行搜索。
如何使用locate命令
locate命令基本的语法如下:
1
locate [OPTION] PATTERN...
当使用最基本的模式,不带任何选项时,locate命令将打印出条件匹配的并且有读取权限的文件及其绝对路径。
例如,要查找名为.bashrc的文件:
1
locate .bashrc
将打印出所有名称中包含.bashrc的文件。
/root/.bashrc文件将不会显示,因为我们用普通用户的身份执行了命令,所以没有/ root目录的访问权限。
如果结果列表很长,为了提高可读性,可以将输出管道给less命令:
1
locate .bashrc | less
locate命令还可以结合通配符使用,当匹配条件不包含通配符的时候,该命令将搜索PATTERN,这就是为什么在上一个示例中显示了所有名称中包含.bashrc文件的原因。
通配符是用于表示零个,一个或多个字符的符号。例如,要搜索系统上的所有.md文件,可以使用:
1
locate *.md
使用-n选项,可以限制搜索结果。例如,以下命令将搜索所有.py文件并仅显示10个结果:
1
locate -n 10 *.py
默认情况下,locate命令是区分大小写的。 -i(–ignore-case)选项用于忽略大小写。
1
locate -i readme.md
想要显示所有匹配文件的数量,可使用-c(–count)选项。以下命令将返回名称中包含.bashrc的所有文件的数量:
1
locate -c .bashrc
默认情况下,locate不会检查找到的文件在文件系统上是否仍然存在。如果文件在数据库更新后被删除,而该文件与搜索模式匹配,则它将包含在搜索结果中。
想要查看当前在文件系统中存在的文件名,应使用-e(-existing)选项。下面的命令只显示当前系统中存在的.json文件:
1
locate -e *.json
结合-r(–regexp)选项,可以使用正则表达式做匹配。
例如,要搜索系统上的所有.mp4和.avi文件,并忽略大小写,可执行:
1
locate --regex -i "(\.mp4|\.avi)"
locate命令在文件系统中搜索名称与给定模式匹配的文件和目录。该命令语法易于记忆,并且搜索结果很快能显示出来。