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