Linux命令之locate
在Linux操作系统上工作时最常见的操作之一是搜索文件和目录,我们可以在Linux系统中安装locate并使用locate命令来操作,因为该命令是按名称搜索文件和目录的,使用它处理起来相当的简单,在本文中,我们将解释如何使用locate命令
在Linux系统上安装locate
要检查Linux系统上是否安装了locate实用程序,请打开终端,输入locate,然后按Enter键,如果安装了软件包,系统将显示locate: no pattern to search for specified,否则将看到locate command not found。
1、在Ubuntu和Debian上安装locate,运行:
$ sudo apt update
$ sudo apt install mlocate
2、在CentOS和Fedora上安装locate,运行:
$ sudo yum install mlocate
locate工作介绍
locate命令通过updatedb命令生成的数据库文件搜索给定模式,找到的结果显示在屏幕上,每行一个。
在安装mlocate软件包期间,会创建一个每24小时运行updatedb命令的cron作业,这可确保定期更新数据库,有关cron作业的更多信息,请检查/etc/cron.daily/mlocate文件,也可参考在Linux系统下使用Crontab UI安全管理Cron定时任务。
可以通过以root身份运行updatedb命令或使用sudo权限的用户手动更新数据库:
$ sudo updatedb
更新过程将需要一些时间,具体取决于文件和目录的数量以及系统的速度。
数据库更新后创建的文件不会显示在定位结果中。
与搜索文件系统的更强大的find命令相比(参考:在Linux系统中使用ls、tree和find快速定位文件),locate运行速度更快但缺少许多功能,并且只能通过文件名进行搜索。
使用locate命令
locate命令的语法如下:
locate [OPTION] PATTERN...
在最基本的形式中,当使用没有任何选项时,locate命令将打印与搜索模式匹配且用户具有读取权限的所有文件和目录的绝对路径。
例如,要搜索名为.bashrc的文件,可以输入:
$ locate .bashrc
参考:什么是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
/root/.bashrc文件将不会显示,因为我们将命令作为普通用户运行,该用户对/root目录没有访问权限。
如果结果列表很长,为了更好的可读性,可以将输出传递给less命令:
$ locate .bashrc | less
locate命令还接受包含通配符的模式,例如通配符*,当模式不包含通配符时,命令会搜索*PATTERN*,这就是为什么在前面的示例中显示了名称中包含搜索模式的所有文件。
通配符是用于表示零个,一个或多个字符的符号,例如,要搜索系统上的所有.md文件,你将使用:
$ locate *.md
要限制搜索结果,请使用-n选项,后跟要显示的结果数,例如,以下命令将搜索所有.py文件并仅显示10个结果:
$ locate -n 10 *.py
默认情况下,locate执行区分大小写的搜索, -i(--ignore-case)选项tels定位忽略大小写并运行不区分大小写的搜索:
$ 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不会检查找到的文件是否仍存在于文件系统上,如果在最新数据库更新后删除文件,如果文件与搜索模式匹配,则它将包含在搜索结果中。
要仅显示运行定位时存在的文件的名称,请使用-e(--existing)选项,例如,以下内容仅返回现有的.json文件:
$ locate -e *.json
如果需要运行更复杂的搜索,可以使用-r(--regexp)选项,该选项允许你使用基本正则表达式而不是模式进行搜索,可以多次指定此选项。
例如,要搜索系统上的所有.mp4和.avi文件并忽略大小写,你将运行:
$ locate --regex -i "(/.mp4|/.avi)"
结论
locate命令在文件系统中搜索名称与给定模式匹配的文件和目录,命令语法易于记忆,结果几乎立即显示。有关定位命令的所有可用选项的更多信息,请在终端中输入man查询。