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 pages project 的客户端工作。

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

一般来说,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 替代品

尝试使用 "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.