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