5 种现代的 Linux 命令行工具替代方案

通过使用更新的替代方案改进旧的命令行工具,获得新的优势。
283 位读者喜欢这篇文章。
Person using a laptop

在我们日常使用 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 看起来像这样

 

与默认的 top 相比

 

此外,htop 在顶部提供系统概览信息,在底部提供命令栏,以使用功能键触发命令,您可以通过按 F2 进入设置屏幕来自定义它。在设置中,您可以更改其颜色、添加或删除指标,或更改概览栏的显示选项。

 

虽然您可以配置最新版本的 top 以获得类似的结果,但 htop 提供了更合理的默认配置,这使其成为一个不错且易于使用的进程查看器。

 

要了解有关此项目的更多信息,请查看 htop 主页

3. tldr 作为 man 的替代品

tldr 命令行工具显示简化的命令使用信息,主要包括示例。它作为社区 tldr 页面项目的客户端工作。

此工具不是 man 的替代品。man 页面仍然是许多工具的规范和完整信息来源。但是,在某些情况下,man 过于冗长。有时您不需要关于命令的所有信息;您只是试图记住基本选项。例如,curl 命令的 man 页面有近 3000 行。相比之下,curltldr 有 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 页面项目

通常,tldr 工具需要访问互联网才能查阅 tldr 页面。Fedora 中的 Python 客户端允许您下载和缓存这些页面以供离线访问。

有关 tldr 的更多信息,您可以使用 tldr tldr

4. jq 作为 sed/grep for JSON 的替代品

jq 是一个命令行 JSON 处理器。它就像 sedgrep,但专门设计用于处理 JSON 数据。如果您是每天使用 JSON 的开发人员或系统管理员,那么这是您工具箱中必不可少的工具。

jq 相对于 grepsed 等通用文本处理工具的主要优势在于,它理解 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 知道数据结构,所以即使文件格式略有变化,它也能提供相同的结果。grepsed 在格式略有更改的情况下可能会提供不同的结果。

jq 有许多功能,涵盖所有这些功能将需要另一篇文章。有关更多信息,请查阅 jq 项目页面、man 页面或 tldr jq

5. fd 作为 find 的替代品

fdfind 命令的简单快速替代方案。它并非旨在取代 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 桌面和笔记本电脑。

您是否使用任何其他工具来帮助您的工作流程?请在下面的评论区中添加它们。

接下来阅读
标签
Avatar
Ricardo Gerardi 是 Enable Sysadmin 和 Enable Architect 的技术社区倡导者。他之前是 Red Hat Canada 的首席顾问,专注于使用 Ansible 和 OpenShift 进行 IT 自动化。

29 条评论

我使用 "meld" 代替 "diff"

谢谢!我从未使用过 "meld"。我会试试看。

回复 ,评论者:S Arun-Kumar (未验证)

不错的列表,谢谢。是的,这里还有一个类似的:ranger。

Ranger 提供了一种更简单的方法,可以通过光标和键盘导航(很像上面 ncdu 的方式)直观地遍历文件和文件夹。在几秒钟内,人们可以在一些文件夹中挖掘,并仅用几个按键即可查看或编辑文件。

它是使用多个 cd/ls 命令,然后使用 less/cat 或您喜欢的编辑器的绝佳替代方案。即使使用制表符补全,有时使用 ranger 也会更快。当查看一个或多个目录中的多个文件时,尤其如此。

感谢您的评论!我喜欢 ranger。它在我的这篇文章的列表中,但我决定专门为它写一篇。敬请期待。

回复 ,评论者:Charlie Arehart (未验证)

如果您喜欢 Ranger,我还建议您看看 'Hunter' - 它与 Ranger 非常相似,具有额外的功能和改进。

在 Github 上查看:https://github.com/rabite0/hunter

回复 ,评论者:rgerardi

exa 代替 ls

谢谢。我会试试看。

回复 ,评论者:Keith Peters (未验证)

另一个(看起来很花哨的)ls 替代方案是 lsd。

回复 ,评论者:Keith Peters (未验证)

Bat 代替 cat,ripgrep 代替 grep,httpie 代替 curl,bashtop 代替 htop,autojump 代替 cd...

这些是很酷的建议。您应该写一篇关于您的选择的文章,并将其发送给我们发表 :-)

我肯定会查看其中的一些,谢谢!

回复 ,评论者:Miguel Perez (未验证)

感谢您的建议。我会查看其中的一些。我之前尝试过 bashtop,但当时它消耗了太多的系统资源,所以我仍然使用 htop。

回复 ,评论者:Miguel Perez (未验证)

所有建议都很棒!谢谢!

回复 ,评论者:Miguel Perez (未验证)

ack 代替 grep 用于文件。速度快百万倍。

yq 命令行实用程序也很有用。它就像 jq,除了用于 yaml 文件,并且能够将 yaml 转换为 json。

刚刚花了几个小时查看本文和评论中的建议。哇!都很棒,谢谢!
ranger 和 autojump 是游戏规则改变者

我很惊讶我没有看到任何人说 ip 代替 ifconfig。

Glances 也是一个很棒的 top 替代品

感谢您的评论。Glances 看起来不错。这是一个有趣的项目。

回复 ,评论者:Matt howard (未验证)

尝试 "mtr" 代替 traceroute
尝试 "hping2" 代替 ping
尝试 "pigz" 代替 gzip

Ack 代替 grep 用于代码

我从未使用过 ncdu,但我推荐 “duc” 作为 du 的替代品 https://github.com/zevv/duc/

您运行单独的 “duc index” 命令以捕获数据库文件中的磁盘空间使用情况,然后可以使用 “duc ui” ncurses ui 非常快速地浏览数据。还有 GUI 和 Web 前端,它们为您提供漂亮的图形饼图界面。

以我的经验,索引阶段比普通的 du 更快。如果您想快速更新某些数据而无需重新扫描所有内容,您可以选择仅重新索引某些文件夹。

glances 作为 htop 的替代品
rg 作为 grep / ack 的替代品

恕我直言,jq 使用的语法对于简单查询来说还可以,但当您需要更复杂的查询时,很快就会变得很糟糕。Pjy 是 jq 的一个明智的替代品,它具有(改进的)python 语法,许多人对此很熟悉,而且更易读:https://github.com/hydrargyrum/pjy

谢谢。从未使用过 "pyj"。我会看看的。对于更复杂的查询,我使用 "jid" 来导航数据并为我创建查询。然后我在 "jd" 中使用输出用于脚本。

回复 ,评论者:wurn (未验证)

Ricardo,感谢您的文章。阅读起来很有趣。在 IBM Netcool 之后,这绝对是职业生涯中一个非常有趣的转变。

同样沿着命令行替代方案的思路,看看 marcel,这是一个现代 shell:https://marceltheshell.org。基本思想是在命令之间传递 Python 值而不是字符串。它与主机命令(以及,大概,此处讨论的替代方案)平滑集成,并且还集成了远程访问和数据库访问。

“tuptime” 代替 “uptime”。
它跟踪系统的历史记录,而不仅仅是当前的记录。

所有这些的一个缺点是需要记住的东西更多了。我从 1976 年在第 6 版上开始学习 find、diff、cat、vi (和 ed)、grep 和其他一些东西。多年来,它们得到了一些增强(为此,我在需要记住时使用 man),并学习了 top 和其他我需要的东西,但我那时所做的事情现在仍然运作良好。KISS 仍然是 "一个东西"。尤其是在将在各种发行版或长时间内使用的脚本中。这些类型的调整很有趣,但增加了复杂性并降低了一个人的跨系统移动性。(不要让我开始说 systemd 8P)。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.