Linux locate 命令 | 按名称简单快捷的搜索文件和目录
• 最后修改:2025-07-03 • 阅读量:10
Linux locate ( locate ) 命令用于按照文件或目录的名称快捷、简单的在系统中查找、搜索文件或目录。
locate 命令的定义解释
locate ( locate ) 命令用于按照文件或目录的名称快捷、简单的在系统中查找、搜索文件或目录。在 Linux 和 FreeBSD 系统上有几个用于查找、搜索文件和目录的命令工具,其中 find
和 locate
是最常用的命令。而 locate
命令是按文件名搜索文件和目录最快捷、最简单的方法。
locate
命令使用 updatedb
命令生成的数据库文件搜索给定的模式,搜索到的结果每行显示一个。
可以安装 mlocate 包,它会创建一个 cron 任务,每 24 小时运行一次 updatedb
命令。这样可以确保数据库定期更新。以 root
用户或具有 sudo
权限的用户运行 updatedb
,可以手动更新数据库。
更新过程将花费一些时间,具体取决于文件和目录的数量以及系统的速度。数据库更新后再创建的文件不会出现在数据库中,所以是无法搜索到的。
与搜索文件功能更强大的 find
命令相比,locate
搜索文件快得多,但缺乏许多功能,它只能通过文件名进行搜索。
安装 locate 命令
默认情况下在很多系统中没有安装 locate 命令的,可以在命令行输出 locate 查看输入信息
locate
如果显示以下信息,则说明没有安装 locate 命令:
bash: locate: 未找到命令
那么就需要安装 locate:
可选安装 mlocate
,用于创建 cron 任务,自动运行 updatedb
命令,更新数据库,也可以手动创建 cron 任务更新数据库。
1、Debian、Ubuntu 安装 locate:
sudo apt update
sudo apt install locate
2、RHEL、AlmaLinux、Rocky Linux 安装 locate:
sudo dnf update
sudo dnf install locate
3、FreeBSD 安装 locate:
sudo pkg update
sudo pkg install locate
4、Arch Linux 安装 locate:
sudo pacman -Sy
sudo pacman -S locate
更新数据库
在安装 locate 命令后要运行 updatedb
命令更新数据库,才能搜索文件。
1、手动更新数据库
sudo updatedb
2、创建 cron 任务每 24 小时更新一次数据库(需要编辑超级用户的 cron 文件):
sudo crontab -e
添加如下内容:
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
# m h dom mon dow command
0 0 * * * updatedb
注释内容无需添加,在这里给出是为了好让你明白各字段意思。
locate 命令语法
locate [OPTION] PATTERN...
[OPTION]
:选项,可选[PATTERN]
:文件名模式字符串,可以是精确的字符,也可以使用正则表达式
locate 命令使用示例
使用文件名精确匹配
查找名称为 ”.bashrc“ 的文件:
locate .bashrc
输出信息:
/etc/bash.bashrc
/etc/skel/.bashrc
/home/u1sz/.bashrc
/root/.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
使用正则表达式匹配文件名
使用通配符 *
匹配文件名:
locate *.md
限制输出结果的数量
使用 -l 2
限制只输出两条结果:
locate -l 2 .bashrc
输出信息:
/etc/bash.bashrc
/etc/skel/.bashrc
输出匹配文件的数量
使用 -c (--count)
选项输出匹配文件的数量,而不列出匹配文件的名称:
locate -c .bashrc
输出信息:
7
忽略文件名大小写
使用 -i (--ignore-case)
选项,在匹配文件名时,忽略字符的大小写:
locate -i FILE1.txt
locate 命令选项解释
如下给出了 Linux locate 命令中所有选项的解释说明:
选项 | 解释说明 |
---|---|
-0, --null | 使用 ASCII 码 NUL作为分隔符,而不是换行符 |
-A, --all | 只输出匹配所有非选项参数的名称,不输出匹配一个或多个非选项参数的名称 |
-b, --basename | 如果指定的模式与数据库中列出的文件名的最后部分匹配,则认为匹配成功。最后部分通常被称为“基本名称” |
-c, --count | 不输出匹配的文件名,只输出匹配到的文件的总数量,除非同时使用 --print (-p) 选项 |
-d path, --database=path | 不搜索默认的文件名数据库,而是在 path 中指定的数据库中搜索文件,path 是一个以冒号分隔的数据库文件名列表;还可以使用环境变量 LOCATE_PATH 设置要搜索的数据库文件列表。如果两者都使用,则该选项将覆盖环境变量。路径中的空元素被视为默认数据库文件名的同义词。使用 - 作为 path,则从标准输入读取提供的数据库文件名。 |
-e, --existing | 只输出当前存在的名称(而不是创建数据库时存在的名称);注意,如果数据库中有很多匹配项,这可能会大大降低程序的速度 |
-E, --non-existing | 只打印当前不存在的名称(而不是创建数据库时存在的名称)。注意,如果数据库中有很多匹配项,这可能会大大降低程序的速度。 |
--help | 显示帮助信息后退出 |
-i, --ignore-case | 忽略模式和文件名中的大小写区别 |
-l N, --limit=N | 将匹配的数量限制为 N。如果通过此选项设置了限制,则为 -c 选项输出的结果数量将永远不会大于此数字。 |
-L, --follow | 如果测试文件是否存在(使用 -e 或 -E 选项),则认为断开的符号链接不存在。这是默认值。 |
--max-database-age D | 通常,locate 在搜索超过 8 天的数据库时会发出警告消息。此选项将该值更改为 8 以外的值。指定负值的效果未定义。 |
-m, --mmap | 为了与 BSD locate 兼容,接受该选项但不起任何作用 |
-P, -H, --nofollow | 如果测试文件是否存在(使用 -e 或 -E 选项),则将断开的符号链接视为存在的文件。该选项的 -H 形式纯粹是为了与 find 相似而提供的;建议使用 -P 而不是 -H 。 |
-p, --print | 由于存在 --statistics (-S) 或 --count (-c) ,通常不会输出搜索结果。使用该选项强制输出结果 |
-r, --regex | 指定的模式为正则表达式,而不是 glob 模式。正则表达式的工作方式与 emacs 相同,但在这里 . 不匹配换行符 |
--regextype R | 使用正则表达式方言 R。支持的方言包括 'findutils-default', 'posix-awk', 'posix-basic', 'posix-egrep', 'posix-extended', 'posix-minimal-basic', 'awk', 'ed', 'egrep', 'emacs', 'gnu-awk', 'grep' 和 'sed'。有关这些方言的详细解释,请参阅Texinfo 文档。 |
-s, --stdio | 为了与 BSD locate 兼容,接受该选项但不起任何作用 |
-S, --statistics | 输出关于每个 locate 数据库的各种统计信息,然后退出(不执行搜索,除非给出了非选项参数)。为了与 BSD 兼容,-S 作为 --statistics 的同义词。然而,locate -S 的输出对于 locate 的 GNU 和 BSD 实现是不同的。 |
-v, --version | 显示版本信息后退出 |
-w, --wholename | 与数据库中列出的文件的全名进行匹配。这是默认值。 |
结语
在本教程中我们介绍了如何使用 locate ( locate ) 命令按照文件或目录的名称快捷、简单的在系统中查找、搜索文件或目录。在 Linux 和 FreeBSD 系统上有几个用于查找、搜索文件和目录的命令工具,其中 find
和 locate
是最常用的命令。而 locate
命令是按文件名搜索文件和目录最快捷、最简单的方法。
该 locate 命令可以在 Linux 系统中使用,也可以在 FreeBSD 系统中使用。