在Linux工作时,最常见的操作之一是搜索文件和目录。在Linux,find
和locate
是你搜索文件最常用的命令。
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...
。其中OPTION
是locate
命令的选项,可选项参数,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
。如有任何疑问,请随时发表评论。