初学者的 Linux 定位命令(8 个示例)初学者的 Linux 定位命令(8 个示例)初学者的 Linux 定位命令(8 个示例)初学者的 Linux 定位命令(8 个示例)
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

初学者的 Linux 定位命令(8 个示例)

在此页

  1. 1。安装定位命令
  2. 2。如何在 Linux 中使用定位命令
  3. 3。 locate 命令如何工作,或者为什么这么快
  4. 4。如何使定位打印输出中匹配条目的数量或计数
  5. 5。如何强制定位仅打印与现有文件相对应的那些条目
  6. 6。如何使定位忽略大小写区别
  7. 7.如何用 ASCII NUL 分隔输出条目
  8. 8.如何查看locate数据库的信息 <李>9。如何使用 locate 搜索准确的文件名
  9. 结论

尽管 find 命令无疑是 Linux 上最流行和最强大的文件搜索命令行实用程序之一,但对于需要即时结果的情况,它的速度不够快。如果您想从命令行搜索系统上的文件并且速度是您的首要任务,则可以使用另一个命令:定位。

在本教程中,我们将通过易于理解的示例来解释 locate 命令。请注意,此处提及的所有说明/示例均已在 Ubuntu 22.04 LTS 上进行测试,我们使用的定位是版本 4.8.0。

1.安装locate命令

locate 命令未预安装在 Ubuntu 和 Debian Linux 上。您可以使用以下命令安装它:

sudo apt install locate

Locate 基于预编译的文件名数据库进行文件搜索,这使得它比例如进行后续搜索时的 find 命令。但在我们使用它之前,我们必须创建和更新文件数据库。运行以下命令创建定位数据库:

sudo updatedb

现在我们准备开始使用 locate。

2.如何在Linux中使用locate命令

locate 命令非常易于使用。您所要做的就是传递要搜索的文件名。

locate [filename]

例如,如果要搜索其中包含字符串 dir2 的所有文件名,那么我可以按以下方式使用 locate 来执行此操作:

注意:命令 locate dir2(无星号)也将作为 locate 将您传递的名称(例如 NAME)隐式替换为 *NAME*。

3. locate 命令如何工作,或者为什么这么快

locate 如此之快的原因是因为它不读取文件系统以查找搜索的文件或目录名称。它实际上是指一个数据库(由命令 updatedb 准备)来查找用户正在寻找的内容,并根据该搜索生成其输出。

虽然这是一个很好的方法,但它也有一些缺点。主要问题是在系统上创建每个新文件或目录后,您需要更新工具数据库才能使其正常工作。否则,该命令将无法找到在上次数据库更新后创建的文件/目录。

例如,如果我尝试在系统的下载目录中查找名称中包含 tosearch 字符串的文件,find 命令会在输出中产生一个结果:

但是当我尝试使用 locate 命令执行相同的搜索时,它没有产生任何输出。

这意味着在系统上创建文件后,数据库定位搜索未更新。因此,让我们更新数据库,这可以使用 updatedb 命令来完成。这是你如何做到的:

sudo updatedb

现在,当我再次运行相同的定位命令时,它会在输出中显示文件:

同样,删除文件或目录后,您需要确保定位数据库已更新,否则,该命令将在搜索时继续在其输出中显示该文件。

4.如何让locate在输出中打印匹配条目的数量或计数

正如我们所见,locate 命令在输出中生成匹配文件的名称及其完整或绝对路径。但如果您愿意,您可以让该工具抑制所有这些信息,而只打印匹配条目的数量或计数。这可以使用 -c 命令行选项来完成。

5.如何强制定位只打印那些对应于现有文件的条目

正如我们在本文前面所讨论的那样,如果从系统中删除了一个文件,那么在您再次更新定位数据库之前,该命令将继续在输出中显示该文件名。但是,对于这种特定情况,您可以跳过更新数据库,并且仍然可以使用 -e 命令行选项在输出中获得正确的结果。

例如,我从系统中删除了 filetosearch.txt 文件。 find 命令证实了这一点,该命令不再能够搜索文件:

但是当我使用 locate 执行相同的操作时,它仍然在输出中显示文件:

我们知道为什么——因为定位数据库在文件被删除后没有更新。但是,使用 -e 选项可以解决问题:

以下是 locate 手册页关于此选项的说明:\“仅打印引用运行 locate 时存在的文件的条目。\”

6.如何让locate忽略大小写的区别

默认情况下,locate 命令执行的搜索操作区分大小写。但是您可以使用 -i 命令行选项强制该工具忽略大小写区别。

例如,我的系统上有两个文件,名为 newfiletosearch.txt 和 NEWFILETOSEARCH.txt。因此,如您所见,文件名相同,只是大小写不同。如果您要求 locate 搜索,比方说,\*tosearch*\,那么它只会在其输出中显示小写名称:

但是使用 -i 命令行选项会强制命令忽略大小写,并且两个文件名都会在输出中产生:

7.如何用ASCII NUL分隔输出条目

默认情况下,locate 命令生成的输出条目使用换行符 ( ) 特点。但是如果你愿意,你可以更改分隔符,并使用 ASCII NUL 而不是换行符。这可以使用 -0 命令行选项来完成。

例如,我执行了我们在上一节中使用的相同命令,但添加了 -0 命令行选项:

所以您可以看到换行符不再存在 - 它已被替换为 NUL。

8.如何查看locate数据库信息

如果您想知道 locate 正在使用哪个数据库,以及有关数据库的其他统计信息,请使用 -S 命令行选项。

9. 如何使用 locate 搜索准确的文件名

默认情况下,当您使用 locate 搜索文件名时,您传递的名称(比如 NAME)会隐式替换为 *NAME*。例如,如果我搜索文件名 testfile,则输出中会生成所有匹配 *testfile* 的名称:

但是,如果要求是搜索名称与 testfile 完全匹配的文件怎么办?那么,在这种情况下,您将不得不使用正则表达式,这可以使用 -r 命令行选项启用。所以,下面是如何使用正则表达式搜索 testfile 的方法:

locate -r /testfile$

如果您不熟悉正则表达式,请使用 shell 的 head cd 命令。

结论

Locate 提供了更多的选项,但我们在这里讨论的选项应该足以让您对命令行实用程序有一个基本的了解,并让您入门。我们建议您在您的 Linux 机器上尝试此处描述的所有选项,然后切换到您可以在工具手册页上找到的其他选项。

如有任何疑问或疑问,请随时发表评论。

©2015-2025 艾丽卡 support@alaica.com