在 Linux 上工作时最常见的操作之一是搜索文件和目录。
Linux 系统上有多个命令允许您搜索文件,其中 find 和locate 是最常用的命令。
The locate
命令是按名称搜索文件和目录的最快、最简单的方法。
在这篇文章中,我们将解释如何使用locate
命令。
安装中locate
(未找到定位命令)#
根据发行版以及系统的配置方式,locate 软件包可能会也可能不会预安装在您的 Linux 系统上。
要检查是否locate
实用程序已安装,打开终端,输入locate
并按Enter
。如果安装了该包,系统会显示locate: no pattern to search for specified
。否则,你会看到类似的东西locate command not found
.
If locate
尚未安装,您可以使用发行版的包管理器轻松安装它。
Install locate
在 Ubuntu 和 Debian 上#
sudo apt update
sudo apt install mlocate
Install locate
在 CentOS 和 Fedora 上#
sudo yum install mlocate
如何locate
Work #
The locate
命令通过由生成的数据库文件搜索给定模式updatedb
命令。找到的结果显示在屏幕上,每行一个。
在安装 mlocate 软件包期间,cron job创建运行updatedb
每 24 小时发出一次命令。这确保了数据库定期更新。有关 cron 作业的更多信息,请查看/etc/cron.daily/mlocate
file.
可以通过运行手动更新数据库updatedb
作为 root 或具有 sudo 权限的用户:
sudo updatedb
更新过程将需要一些时间,具体取决于文件和目录的数量以及系统的速度。
数据库更新后创建的文件不会显示在定位结果中。
相比更强大的find搜索文件系统的命令,locate
运行速度更快,但缺乏许多功能,并且只能按文件名搜索。
如何使用locate
命令#
语法为locate
命令如下:
locate [OPTION] PATTERN...
在最基本的形式中,当不带任何选项使用时,locate
命令将打印与搜索模式匹配且用户具有读取权限的所有文件和目录的绝对路径。
例如搜索名为的文件.bashrc
你可以输入:
locate .bashrc
输出将包括包含该字符串的所有文件的名称.bashrc
以他们的名字:
/etc/bash.bashrc
/etc/skel/.bashrc
/home/linuxize/.bashrc
/usr/share/base-files/dot.bashrc
/usr/share/doc/adduser/examples/adduser.local.conf.examples/bash.bashrc
/usr/share/doc/adduser/examples/adduser.local.conf.examples/skel/dot.bashrc
The /root/.bashrc
文件不会显示,因为我们以没有访问权限的普通用户身份运行该命令/root
目录。
如果结果列表很长,为了更好的可读性,您可以将输出通过管道传递到less命令:
locate .bashrc | less
The locate
命令还接受包含通配符等通配符的模式*
。当模式不包含通配符时,该命令将搜索*PATTERN*
。这就是为什么在前面的示例中,显示了名称中包含搜索模式的所有文件。
通配符是用于表示零个、一个或多个字符的符号。例如,要搜索所有.md
系统上的文件,您可以输入:
locate *.md
要限制搜索结果,请使用-n
选项后跟您要显示的结果数。以下命令将搜索所有.py
文件并仅显示 10 个结果:
locate -n 10 *.py
默认情况下,locate
执行区分大小写的搜索。这-i
(--ignore-case
) 选项告诉locate
忽略大小写并运行不区分大小写的搜索。
locate -i readme.md
/home/linuxize/p1/readme.md
/home/linuxize/p2/README.md
/home/linuxize/p3/ReadMe.md
要显示所有匹配条目的计数,请使用-c
(--count
) 选项。以下命令将返回包含以下内容的所有文件的数量.bashrc
以他们的名字:
locate -c .bashrc
6
默认情况下,locate
不检查找到的文件是否仍然存在于文件系统上。如果您在最新数据库更新后删除了文件,并且该文件与搜索模式匹配,则它将包含在搜索结果中。
仅显示当时存在的文件的名称locate
运行时,使用-e
(--existing
) 选项。例如,以下内容将仅返回现有的.json
files:
locate -e *.json
如果您需要运行更复杂的搜索,请使用-r
(--regexp
) 选项,它允许您使用基本正则表达式而不是模式进行搜索。该选项可以指定多次。
例如,要搜索所有.mp4
and .avi
系统上的文件并忽略大小写,您将运行:
locate --regex -i "(\.mp4|\.avi)"
结论#
The locate
命令在文件系统中搜索名称与给定模式匹配的文件和目录。命令语法很容易记住,结果几乎立即显示。
有关所有可用选项的更多信息locate
命令类型man locate
在您的终端中。
如果您有任何疑问,请随时发表评论。