在Linux工作时,最常见的操作之一是搜索文件和目录。在Linux,findlocate是你搜索文件最常用的命令。

locate是按文件目录名称进行搜索的最快,最简单的命令。在本教程中,我们将详解如何在Linux使用locate命令。

locate命令并没有预装在大多数Linux发行版。要检查Linux系统是否安装locate命令。

请按快捷键CTRL+ALT+T打开终端,键入locate,然后按Enter。如果你的Linux系统安装locate软件。

终端将会打印消息locate: no pattern to search for specified,否则您将看到消息locate command not found

安装locate 命令

如果你的Linux系统未安装locate命令,则可以使用发行版的软件包管理器apt或者是yum安装locate命令。

如果你的计算机运行的是基于Debian的发行版。例如Ubuntu和Linux Mint。请运行命令sudo apt update && sudo apt install mlocate安装locate命令。

如果你的计算机运行的是基于Redhat的发行版。例如CentOS和Fedora。请运行命令sudo yum install mlocate安装locate命令。

sudo apt update && sudo apt install mlocate
sudo yum install mlocate

locate 命令工作方式

locate命令在updatedb命令生成的数据库记录搜索指定关键词或者模式。然后将搜索结果打印在终端,每行是一个文件的记录。

安装locate命令时,将会创建一个cron作业updatedb命令每24小时运行一次命令。这样可以确保数据库得到定期更新。

你也可以以root或具有sudo权限的用户运行命令sudo updatedb手动更新数据库记录。要了解cron作业的更多信息,请查看/etc/cron.daily/mlocate文件。

sudo updatedb

更新过程将花费一些时间,具体取决于文件和目录的数量以及系统的速度。数据库更新之后创建的文件不会在locate命令搜索结果中出现。

与功能更强大的find命令搜索相比,locate运行速度更快,但缺少许多功能,并且只能根据文件目录名称进行搜索。

locate 命令详解

locate命令的语法的基本形式是locate [OPTION] PATTERN...。其中OPTIONlocate命令的选项,可选项参数,PATTERN是模式可以正则表达式。

当不指定任何选项运行locate命令时,locate命令打印用户具有读取权限且与搜索模式匹配的所有文件绝对路径。

例如命令locate .bashrc搜索.bashrc文件。搜索结果将会打印文件名称包含字符串.bashrc的所有文件。

locate .bashrc
/etc/bash.bashrc
...
/usr/share/doc/adduser/examples/adduser.local.conf.examples/bash.bashrc
/usr/share/doc/adduser/examples/adduser.local.conf.examples/skel/dot.bashrc

文件/root/.bashrc不会在搜索结果显示,因为运行locate命令的用户没有/root目录读取权限。

如果locate命令的搜索结果列表很长,为了提高可读性,可以将locate命令的标准输出通过管道传递给less命令进行分页查看。

locate .bashrc | less

locate 命令搜索模式与通配符*

locate命令的模式可以是通配符*。当模式不包含通配符时,locate命令将搜索模式*PATTERN*

这就是为什么命令locate .bashrc打印名称包含.bashrc的所有文件。当运行命令locate .bashrc时搜索的模式是*.bashrc*

*通配符是用于表示零个,一个或多个字符的符号。例如命令locate *.md搜索所有.md文件。

locate *.md

locate 命令限制搜索结果

如果需要限制搜索结果数量,可以使用locate命令-n选项,后跟要打印的结果数。

例如命令locate -n 10 *.py搜索所有.py文件并仅打印10个结果。

locate -n 10 *.py

locate 命令大小写区分

默认情况下,locate命令执行区分大小写的搜索。可以使用locate命令的-i/--ignore-case选项忽略大小写。

locate -i readme.md

locate 命令匹配总数

要统计所有匹配记录的总数,请使用locate命令-c/--count选项。例如命令locate -c .bashrc打印文件名称包含.bashrc所有文件的总数。

locate -c .bashrc

locate 命令仅显示存在文件

默认情况下,locate命令不检查文件是否仍然存在。如果您在更新数据库后删除了文件并且该文件与搜索模式匹配,locate命令仍然在搜索结果打印已删除的文件。

要在运行locate命令时检查文件是否存在,请使用locate命令的-e/--existing选项。

例如命令locate -e *.json仅在搜索结果中打印仍然在Linux系统文件存在的.json文件。

locate -e *.json

locate 命令正则表达式

如果您需要运行更复杂的搜索,可以使用locate命令的-r/--regexp选项,该选项允许您使用基本正则表达式而不是模式进行搜索。

例如命令locate --regex -i "(.mp4|.avi)"搜索.mp4.avi文件并忽略大小写,-i选项。

locate --regex -i "(.mp4|.avi)"

结论

locate命令在文件系统搜索与指定模式匹配的文件名称并打印文件的绝对路径。locate命令语法易于记忆,并且结果几乎立即显示出来。

要了解locate命令所有可用选项的更多信息,请运行命令man locate。如有任何疑问,请随时发表评论。