网站搜索

几个终端命令组合取代了我用于搜索、日志和磁盘使用的 Linux 应用程序


有好几年,我是那个在我的 Linux 桌面上有十几个 GUI 应用程序的人。它们都有各自的用途:一个用于文件搜索,一个用于查看日志,另一个用于磁盘使用情况。我不断在窗口之间切换以执行工作流程的不同部分。

然而,当我开始将基本的终端命令如 grep、find、du、jq 和 sort 连接起来时,一切都发生了变化。这对我的工作流程是一次宝贵的升级,提高了我的效率,并减少了在 GUI 应用之间切换的时间。我会向你展示我使用的具体组合以及它们如何帮助我。

搜索变得更快了

查找和grep改变了我查找文件的方式

我一直认为文件搜索应该是一个完全独立的任务。这让我在打开文件管理器进行搜索后,再打开另一个应用程序在文件内搜索时感到很自在。它能工作,但问题是效率低下。

理解终端搜索不仅仅是查找文件,这改变了我的一切。有了find,我可以在特定项目中定位.conf文件,并将结果传递给grep来查找过时的路径。只要我使用终端,这些看似独立的搜索就不需要打开第二个应用程序,只需一个像这样的简单命令:

find ~/Projects -name "*.conf" | xargs grep -l "localhost"

在你的 grep 命令中添加 -l(例如 xargs grep -l "localhost")只会返回文件名,而不是每个匹配的行。

我意识到我可以使用这种方法来定位每一个 ISO、旧截图、被遗忘的备份以及各种杂物。即使它们分散在多个目录中,我也不需要逐个文件夹地搜索。

我仍然认为,对于随意浏览,GUI 搜索工具是有其合理性的。然而,它们仍然依赖于像 Baloo 这样的工具进行索引。不同之处在于 find 直接搜索文件系统,因此即使未设置索引,它也能正常工作。

也就是说,更有价值的是,我可以将搜索作为更大工作流程的一部分,因为结果可以立即输入到其他命令中。这使终端成为在 Linux 系统上获取答案最简单的地方。

日志终于有意义了

过滤实时日志比看仪表板感觉更好

经验告诉我,在服务中断之后,浏览 GUI 日志查看器中的菜单是最糟糕的时刻之一。这也是让我真正开始理解终端管道的原因。

我从打开专用应用程序切换到了使用终端。我开始使用 tail -f 来实时查看日志,用 grep 过滤结果,并用 awk 提取重要内容。一开始,这感觉像是额外的工作,但在盯着一大堆日志输出后,它开始变得有意义。例如,通过下面的命令,我可以持续查看系统认证日志,并即时只打印显示密码尝试失败的行。

tail -f /var/log/auth.log | grep "Failed password"

这个命令一直是我处理 SSH 登录失败和实时 Docker 容器错误的首选工具。

GNOME 日志读取与终端访问相同的 journald 流——区别在于展示,而不是信息。

使用终端使排查问题的过程更为平静,因为很多噪音被隐藏了,并且你可以轻松地发现重复的故障、特定的错误代码和时间模式。

存储问题变得更加清晰

du向我展示了GUI分析器延迟的情况

如果在更新时存储空间不足,Linux 软件包可能会更新失败,而且它并不总是会发出任何警告。Baobab 曾经是我的 GUI 磁盘使用分析器;它会扫描并呈现可视化地图。问题是,虽然它提供了准确的信息,但我通常必须等待可视化完成后才能采取进一步的操作。但一个简单的 du 命令完全改变了这一点。

du -h --max-depth=1 ~/ | sort -hr | head -10

它显示我主目录中最大的十个文件夹,按降序排序(人类可读格式),并且几乎在你按下回车键后立即显示结果。

将 ~/ 换成 / 并使用 sudo 运行以审计整个系统(只需注意 /proc, /sys, 和 /dev 会出现,但不包含真实的磁盘数据)。

你可能一开始会觉得它的原始输出不太熟悉,但文件夹模式很快就会变得可识别。它是文本输出,而且你无需显示服务器、渲染或等待就能得到结果。

猴面包树提供了相同的信息,但在它的可视化磁盘地图加载完成之前,我本来就已经完成了。

jq 替换了浏览器标签

我停止将 JSON 粘贴到格式化网站上






我对自己以前处理 API 响应的工作流程不太自豪。它涉及复制 JSON,打开一个格式化网站,将 JSON 粘贴进去,最后滚动查找一个字段。这看起来似乎没什么问题,但当你一天需要多次这样做时,就会变成累积的摩擦。

这是我完全用 jq 替代的工作流程。通过基本的过滤器,我可以直接从终端提取用户名、时间戳或状态码。例如,使用下面的命令,我可以获取 GitHub 个人资料并只提取用户名:

curl -s https://api.github.com/users/octocat | jq '.login'

当我将 curl 与 jq 结合使用时,一个命令的输出会成为另一个命令的输入,并且我可以在不保存文件、不切换窗口或不打开任何新内容的情况下实现这一点。这成为了一种高效清理杂乱 JSON 日志的方法。

虽然这确实提高了效率,但过了一段时间,打开浏览器标签页去阅读 JSON 开始感觉像是走了弯路。

真正的升级是以管道的方式思考

我们常常把终端看作是在使用 Linux 多年后才会使用的强大工具。这种心态可能会让你停滞不前,比必要的时间更长。这更多是关于提出不同的问题,而不是记忆命令。

我从“哪个应用程序处理这个?”转变为“我希望对这些数据做什么?” 对日常工作流程来说,这是一个重大的转变,因为如果你开始将文件搜索、日志流或 JSON 响应视为可以塑造的数据,管道几乎感觉像自己在写一样。

话虽如此,你不必一次性更换所有应用;一次升级一个工作流程通常效果最好。

相关文章