在我们日常使用 Linux/Unix 系统时,我们使用许多命令行工具来完成我们的工作,并了解和管理我们的系统——例如 du
来监控磁盘利用率,以及 top
来显示系统资源。其中一些工具已经存在很长时间了。例如,top
最早发布于 1984 年,而 du
的首次发布可以追溯到 1971 年。
多年来,这些工具已经现代化并移植到不同的系统,但总的来说,它们仍然遵循其最初的想法、外观和感觉。
这些都是很棒的工具,对于许多系统管理员的工作流程至关重要。然而,近年来,开源社区开发了提供额外好处的替代工具。有些只是花哨的东西,但另一些则大大提高了可用性,使其成为现代系统上的绝佳选择。其中包括以下五个标准 Linux 命令行工具的替代方案。
1. ncdu 作为 du 的替代品
NCurses 磁盘使用情况 (ncdu
) 工具提供与 du
类似的结果,但在基于 curses 的交互式界面中,该界面侧重于占用您大部分磁盘空间的目录。
ncdu
花费一些时间分析磁盘,然后显示按您最常用的目录或文件排序的结果,如下所示
ncdu 1.14.2 ~ Use the arrow keys to navigate, press ? for help
--- /home/rgerardi ------------------------------------------------------------
96.7 GiB [##########] /libvirt
33.9 GiB [### ] /.crc
7.0 GiB [ ] /Projects
. 4.7 GiB [ ] /Downloads
. 3.9 GiB [ ] /.local
2.5 GiB [ ] /.minishift
2.4 GiB [ ] /.vagrant.d
. 1.9 GiB [ ] /.config
. 1.8 GiB [ ] /.cache
1.7 GiB [ ] /Videos
1.1 GiB [ ] /go
692.6 MiB [ ] /Documents
. 591.5 MiB [ ] /tmp
139.2 MiB [ ] /.var
104.4 MiB [ ] /.oh-my-zsh
82.0 MiB [ ] /scripts
55.8 MiB [ ] /.mozilla
54.6 MiB [ ] /.kube
41.8 MiB [ ] /.vim
31.5 MiB [ ] /.ansible
31.3 MiB [ ] /.gem
26.5 MiB [ ] /.VIM_UNDO_FILES
15.3 MiB [ ] /Personal
2.6 MiB [ ] .ansible_module_generated
1.4 MiB [ ] /backgrounds
944.0 KiB [ ] /Pictures
644.0 KiB [ ] .zsh_history
536.0 KiB [ ] /.ansible_async
Total disk usage: 159.4 GiB Apparent size: 280.8 GiB Items: 561540
使用箭头键导航到每个条目。如果您在目录条目上按 Enter 键,ncdu
将显示该目录的内容
--- /home/rgerardi/libvirt ----------------------------------------------------
/..
91.3 GiB [##########] /images
5.3 GiB [ ] /media
您可以使用它来深入到目录中,并找到哪些文件占用了最多的磁盘空间。使用 向左 箭头键返回到上一个目录。默认情况下,您可以使用 ncdu
删除文件,方法是按 d 键,并且它会在删除文件之前要求确认。如果您想禁用此行为以防止意外发生,请使用 -r
选项进行只读访问:ncdu -r
。
ncdu
可用于许多平台和 Linux 发行版。例如,您可以使用 dnf
在 Fedora 上直接从官方存储库安装它
$ sudo dnf install ncdu
您可以在 ncdu
网页上找到有关此工具的更多信息。
2. htop 作为 top 的替代品
htop
是一个交互式进程查看器,类似于 top
,但开箱即用地提供了更好的用户体验。默认情况下,htop
在一个令人愉悦且色彩鲜艳的显示中显示与 top
相同的指标。
默认情况下,htop
看起来像这样

(Ricardo Gerardi, CC BY-SA 4.0)
与默认 top
相比

(Ricardo Gerardi, CC BY-SA 4.0)
此外,htop
在顶部提供系统概述信息,在底部提供命令栏,以使用功能键触发命令,您可以通过按 F2 键进入设置屏幕来对其进行自定义。在设置中,您可以更改其颜色、添加或删除指标,或更改概述栏的显示选项。
虽然您可以配置最新版本的 top
以获得类似的结果,但 htop
提供了更合理的默认配置,这使其成为一个不错且易于使用的进程查看器。
要了解有关此项目的更多信息,请查看 htop
主页。
3. tldr 作为 man 的替代品
tldr
命令行工具显示简化的命令使用信息,主要包括示例。它作为社区 tldr pages 项目的客户端工作。
此工具不是 man
的替代品。man 页面仍然是许多工具的规范和完整信息来源。但是,在某些情况下,man
太多了。有时您不需要关于命令的所有信息;您只是想记住基本选项。例如,curl
命令的 man 页面有将近 3,000 行。相比之下,curl
的 tldr
有 40 行长,看起来像这样
$ tldr curl
# curl
Transfers data from or to a server.
Supports most protocols, including HTTP, FTP, and POP3.
More information: <https://curl.haxx.se>.
- Download the contents of an URL to a file:
curl http://example.com -o filename
- Download a file, saving the output under the filename indicated by the URL:
curl -O http://example.com/filename
- Download a file, following [L]ocation redirects, and automatically [C]ontinuing (resuming) a previous file transfer:
curl -O -L -C - http://example.com/filename
- Send form-encoded data (POST request of type `application/x-www-form-urlencoded`):
curl -d 'name=bob' http://example.com/form
- Send a request with an extra header, using a custom HTTP method:
curl -H 'X-My-Header: 123' -X PUT http://example.com
- Send data in JSON format, specifying the appropriate content-type header:
curl -d '{"name":"bob"}' -H 'Content-Type: application/json' http://example.com/users/1234
... TRUNCATED OUTPUT
TLDR 代表 "too long; didn't read"(太长;没看),这是互联网俚语,指长文本的摘要。这个名称对于这个工具来说很合适,因为 man 页面虽然有用,但有时就是太长了。
在 Fedora 中,tldr
客户端是用 Python 编写的。您可以使用 dnf
安装它。对于其他客户端选项,请查阅 tldr pages 项目。
一般来说,tldr
工具需要访问互联网才能查阅 tldr 页面。Fedora 中的 Python 客户端允许您下载和缓存这些页面以供离线访问。
有关 tldr
的更多信息,您可以使用 tldr tldr
。
4. jq 作为 sed/grep for JSON 的替代品
jq
是一个命令行 JSON 处理器。它类似于 sed
或 grep
,但专门设计用于处理 JSON 数据。如果您是每天在任务中使用 JSON 的开发人员或系统管理员,那么这是您工具箱中的一个基本工具。
jq
相对于 grep
和 sed
等通用文本处理工具的主要优势在于它理解 JSON 数据结构,允许您使用单个表达式创建复杂的查询。
为了说明这一点,假设您正在尝试在此 JSON 文件中查找容器的名称
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"labels": {
"app": "myapp"
},
"name": "myapp",
"namespace": "project1"
},
"spec": {
"containers": [
{
"command": [
"sleep",
"3000"
],
"image": "busybox",
"imagePullPolicy": "IfNotPresent",
"name": "busybox"
},
{
"name": "nginx",
"image": "nginx",
"resources": {},
"imagePullPolicy": "IfNotPresent"
}
],
"restartPolicy": "Never"
}
}
如果您尝试直接 grep
name
,这是结果
$ grep name k8s-pod.json
"name": "myapp",
"namespace": "project1"
"name": "busybox"
"name": "nginx",
grep
返回了所有包含单词 name
的行。您可以添加更多选项到 grep
来限制它,并且通过一些正则表达式操作,您可以找到容器的名称。要使用 jq
获得您想要的结果,请使用一个模拟向下导航数据结构的表达式,如下所示
$ jq '.spec.containers[].name' k8s-pod.json
"busybox"
"nginx"
此命令为您提供两个容器的名称。如果您只查找第二个容器的名称,请将数组元素索引添加到表达式中
$ jq '.spec.containers[1].name' k8s-pod.json
"nginx"
因为 jq
了解数据结构,所以即使文件格式略有更改,它也能提供相同的结果。grep
和 sed
在格式稍有更改时可能会提供不同的结果。
jq
有许多功能,涵盖所有这些功能将需要另一篇文章。有关更多信息,请查阅 jq
项目页面、man 页面或 tldr jq
。
5. fd 作为 find 的替代品
fd
是 find
命令的一个简单而快速的替代方案。它并不旨在取代 find
提供的完整功能;相反,它提供了一些合理的默认设置,在某些情况下很有帮助。
例如,当在包含 Git 存储库的目录中搜索源代码文件时,fd
会自动排除隐藏文件和目录,包括 .git
目录,以及忽略来自 .gitignore
文件的模式。一般来说,它提供了更快的搜索速度,并在第一次尝试时获得更相关的结果。
默认情况下,fd
在当前目录中运行不区分大小写的模式搜索,并带有彩色输出。使用 find
进行相同的搜索需要您提供额外的命令行参数。例如,要在当前目录中搜索所有 markdown 文件 (.md
或 .MD
),find
命令是这样的
$ find . -iname "*.md"
这是使用 fd
的相同搜索
$ fd .md
在某些情况下,fd
需要额外的选项;例如,如果您想包含隐藏文件和目录,则必须使用选项 -H
,而在 find
中则不需要这样做。
fd
可用于许多 Linux 发行版。在 Fedora 中使用标准存储库安装它
$ sudo dnf install fd-find
有关更多信息,请查阅 fd
GitHub 存储库。
与经过验证的实用程序并存的优秀替代品
虽然我仍然经常使用所有旧的基本工具,尤其是在远程连接到服务器时,但替代工具提供了一些额外的优势,这些优势在许多情况下都很有价值。它们尤其帮助我管理和处理我的 Linux 桌面和笔记本电脑。
您是否使用任何其他工具来帮助您的工作流程?在下面的评论区添加它们。
29 条评论