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 项目的客户端工作。

此工具不是 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 项目

一般来说,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"

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

Ranger 提供了一种更简单的方法来可视化地遍历文件和文件夹(通过光标和键盘导航,很像上面的 ncdu 所做的那样)。在几秒钟内,人们可以深入到一些文件夹中,并仅用几个按键即可查看或编辑文件。

它是使用多个 cd/ls 命令,然后使用 less/cat 或您喜欢的编辑器的绝佳替代品。即使使用 tab 补全,有时使用 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.