如何在 Linux 中查找文件

使用这些简单的 Linux 实用程序,根据类型、内容等快速查找文件。
376 位读者喜欢这篇文章。
How to find files in Linux

Lewis Cowles, CC BY-SA 4.0

如果您是 Windows 用户或 OSX 的非高级用户,您可能使用 GUI 来查找文件。您可能也会发现界面有限、令人沮丧,或两者兼而有之,并且已经学会擅长组织事物和记住文件的确切顺序。您也可以在 Linux 中这样做,但您不必这样做。

Linux 最好的事情之一是它提供了多种做事方式。您可以打开任何文件管理器并使用 ctrl+f,您可以使用您正在使用的程序手动打开文件,或者您可以简单地开始键入字母,它将过滤当前目录列表。

Screenshot of how to find files in Linux with Ctrl+F

如何使用 Ctrl+F 在 Linux 中查找文件的屏幕截图

但是,如果您不知道您的文件在哪里并且不想搜索整个磁盘怎么办? Linux 在这方面以及各种其他用例方面都配备了完善的工具。

通过命令名称查找程序位置

如果您习惯于将东西放在您喜欢的任何地方,那么 Linux 文件系统可能看起来令人生畏。对我来说,最难适应的事情之一是找到程序应该存在的位置。

例如,which bash 通常会返回 /bin/bash,但是如果您下载了一个程序,并且它没有出现在您的菜单中,那么 which 命令可能是一个很棒的工具。

一个类似的实用程序是 locate 命令,我发现它对于查找配置文件很有用。我不喜欢输入程序名称,因为像 locate php 这样的简单名称通常会提供许多需要进一步过滤的结果。

有关 locatewhich 的更多信息,请参阅 man 页面

  • man which
  • man locate

Find

find 实用程序提供了更高级的功能。以下是我安装在许多我管理的服务器上的脚本中的一个示例,该脚本旨在确保特定文件模式(也称为 glob)仅存在五天,并且删除所有比这更旧的文件。(由于其上次修改,使用小数来解释最多 240 分钟的差异。)

find ./backup/core-files*.tar.gz -mtime +4.9 -exec rm {} \;

find 实用程序有许多高级用例,但最常见的是在结果上执行命令,而无需链接和按类型、创建日期和修改日期过滤文件。

find 的另一个有趣的用途是查找所有具有可执行权限的文件。这可以帮助确保没有人在您的昂贵服务器上安装比特币矿工或僵尸网络。

find / -perm /+x

有关 find 的更多信息,请使用 man find 查看 man 页面。

Grep

想要按内容查找文件? Linux 已经涵盖了这一点。您可以使用许多 Linux 实用程序来有效地搜索与模式匹配的文件,但 grep 是我经常使用的一个。

假设您有一个应用程序,它正在传递带有代码引用和堆栈跟踪的错误消息。您在日志中找到这些错误消息。 Grepping 并不总是首选方法,但如果问题出在提供的 value 上,我总是使用 grep -R

越来越多的 IDE 正在实现查找功能,但是如果您正在访问远程系统或由于任何原因没有 GUI,或者如果您想就地迭代,那么请使用:grep -R {searchterm} 或在支持 egrep 别名的系统上;只需将 -e 标志添加到命令 egrep -r {regex-pattern}

去年我在 Raspbian 中修补 dhcpcd5 时使用了这项技术,这样我就可以继续在来自 Raspberry Pi Foundation 的较新 Debian 版本上运行网络接入点。

哪些技巧可以帮助您在 Linux 上更有效地搜索文件?

标签
Lewis Cowles, Circa 2022
我在伦敦一家金融科技初创公司工作。我真的很喜欢结对编程、认知和教育以及可重复性。请与我讨论测试、自动化或您热衷的任何事情。

7 条评论

> find ./backup/core-files*.tar.gz -mtime +4.9 -exec rm {} \;

这里 "-exec" 的动机是什么? 不使用任何替换,只使用 "-delete" 不是更好吗?

所以我实际上并没有执行 delete,所以我错误地替换了一个不同的命令,该命令不是标准 Linux 的一部分,因此没有意义。 不过,抓得好 ;-)

回复 作者 dogsleg

find ./somdirectory -name "somename*" -print xargs | grep something

将在 somedirectory 中找到文件 "somename.txt/c/(ext)",然后允许您在文件中 grep "something"。 当我知道我要查找的文本但不知道确切的文件名或确切的目录时,我经常使用它。

感谢 Don 的分享。

如果您使用 grep -R / egrep -R,它基本上做同样的事情。 真正酷的事情是知道您分享的内容,您可以绝对组合更高级的 find 命令来 grep 具有特定权限或修改/更改日期的文件,这也使上述内容更加强大。

对我来说,Linux 最好的事情是能够以多种方式做事。

回复 作者 Don (未验证)

我喜欢结合使用 mate-search-tool 和 searchmonkey。

为什么要让新手感到困惑? 只需下载磁盘使用情况分析器。

您好 Ashcoal,

您能否更详细地解释一下您打算如何使用磁盘使用情况分析器在 Linux 中查找文件? 也许您发现了它我没有看到的用途。 这是一个很棒的工具,但我不明白您将如何使用它来查找单个文件。

回复 作者 ashcoal (未验证)

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.