Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

1. locate 命令是什么?

locate 是一个用于快速查找文件名的命令。它的工作原理非常直接:它不是实时地在整个文件系统中搜索,而是搜索一个预建好的文件名数据库

这个数据库通常包含了整个文件系统中所有文件和目录的路径名。正因为如此,locate 的搜索速度极快,几乎是瞬间完成,远比 find 命令快得多。

2. 工作原理与优势/劣势

2.1. 工作原理

  1. 系统通过一个名为 updatedb 的程序(通常由定时任务 cron 每天自动运行一次)来创建和更新文件名数据库(通常是 /var/lib/mlocate/mlocate.db)。
  2. locate 命令直接在的这个数据库中查询匹配的模式,并将结果返回给用户。

2.2. 优势

  • 速度极快:因为是搜索数据库,而不是遍历真实的文件系统。
  • 使用简单:语法简单,易于记忆和使用。

2.3. 劣势

  • 结果非实时:由于数据库不是实时更新的,locate 无法找到在最近一次数据库更新后新建或改名的文件。同样,它也会列出已经被删除的文件(如果数据库还没更新的话)。
  • 只能按文件名查找locate 只能根据文件名进行搜索,而不能根据文件内容、所有者、权限、时间戳等元数据进行搜索(这些是 find 命令的强项)。

3. 安装

在 Ubuntu 上,locate 命令通常包含在 mlocate 软件包中。如果你的系统没有预装,可以使用以下命令安装:

1
2
sudo apt update
sudo apt install mlocate

安装完成后,需要手动初始化数据库(之后系统会每天自动更新):

1
sudo updatedb

4. 基本语法

1
locate [选项] 模式...

5. 常用选项与用法示例

5.1. 基本搜索

直接加上要查找的文件名或关键字即可。

1
2
3
4
5
# 查找所有名字中包含 "passwd" 的文件和目录
locate passwd

# 查找所有名字精确为 "ssh_config" 的文件(会包含路径中任何位置出现的 ssh_config)
locate ssh_config

5.2. 限制搜索数量 (-n, --limit)

如果搜索结果太多,可以使用 -n 选项来限制输出的数量。

1
2
# 只显示前 5 个包含 "passwd" 的结果
locate -n 5 passwd

5.3. 计数 (-c, --count)

不显示具体文件名,只显示匹配到的结果数量。

1
2
# 统计有多少个文件包含 "firefox"
locate -c firefox

5.4. 忽略大小写 (-i, --ignore-case)

默认情况下,locate 的搜索是区分大小写的。使用 -i 选项可以忽略大小写。

1
2
# 查找所有包含 "report" 的文件,不区分大小写 (如 Report, REPORT, rEpOrT)
locate -i report

5.5. 显示存在的文件 (-e, --existing)

之前提到,locate 可能会列出已被删除的文件。使用 -e 选项可以只显示在运行命令时确实仍然存在的文件。

1
2
# 只显示当前仍然存在的包含 "passwd" 的文件
locate -e passwd

5.6. 使用正则表达式 (-r, --regexp)

允许使用基本正则表达式(BRE)进行更复杂、更精确的模式匹配。

1
2
3
4
5
# 查找所有以 ".jpg" 结尾的文件
locate -r "\.jpg$"

# 查找所有以 "/usr/bin/z" 开头的文件
locate -r "^/usr/bin/z"

注意:对于简单的模式,locate 本身就支持通配符(*, ?, []),但如果要使用更强大的正则表达式,就需要 -r 选项。

1
2
# 使用通配符查找所有名为 "passwd" 后面跟一个数字的文件 (例如 passwd1, passwd2)
locate "passwd[0-9]"

6. 重要补充:更新数据库 (updatedb)

既然 locate 依赖于数据库,那么保持数据库最新就非常重要。

  • 手动更新:如果你刚创建了一些文件,并希望立即能用 locate 找到它们,你需要手动更新数据库。这需要 root 权限

    1
    sudo updatedb

    这个过程可能需要几秒钟到几分钟,取决于你的文件数量和速度。

  • 自动更新:系统通常配置了每天自动运行一次 updatedb(通过 /etc/cron.daily/mlocatesystemd 定时器)。你一般不需要担心这个问题。

7. locate 与 find 的简单对比

特性 locate find
速度 极快(搜索数据库) 较慢(实时遍历文件系统)
实时性 非实时(结果可能过时) 实时(结果绝对最新)
搜索依据 仅限文件名 文件名、大小、时间、权限、所有者等所有元数据
使用场景 快速查找你知道名字但忘记位置的文件 需要复杂条件、实时性要求高、查找文件内容等高级搜索

8. 总结

locate 是一个“一招鲜”的工具,它的优势非常突出——。当你只记得文件名的一部分,并且想在整个系统中快速找到它时,locate 是你的首选命令。只需记住它的局限性(非实时、仅限文件名),并在需要时用 find 命令作为补充即可。

常用命令组合

  1. locate keyword -> 快速初步查找。
  2. 如果没找到,sudo updatedb 后再试(确认文件是否新创建)。
  3. 如果需要更复杂的条件,使用 find

评论