5个基本Linux命令行工具的现代化替代品

2020 年 7 月 19 日

5个基本Linux命令行工具的现代化替代品

在日常使用 Linux/Unix 系统时,我们会使用许多命令行工具来完成我们的工作,并理解和管理我们的系统,像 du 用于监视磁盘利用率,top 用于显示系统资源。其中一些工具已经存在很长时间了。例如,top 于 1984 年首次发布,而 du 的首次发布要追溯到 1971 年。


多年来,这些工具已经被现代化并移植到不同的系统,但是,通常,它们仍然延续着它们最初的思想和体验。


这些都是很好的工具,对于许多系统管理员的工作流来说都是必不可少的。然而,最近几年,开源社区已经开发出了可以带来额外好处的替代工具。虽然有些华而不实,但另外一些则极大地提高了可用性,使它们成为现代化系统上的最佳选择。这包括以下五个标准 Linux 命令行工具的替代品。


作为 du 替代品的 ncdu


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
复制代码


你可以使用它下钻目录并查找哪些文件占用的磁盘空间最多,使用左箭头键可以返回上一级目录。在默认情况下,可以按下 d 键使用 ncdu 删除文件,在删除之前,它会跟你确认删除请求。如果你想禁用此行为以防止发生意外,请使用 -r 选项进行只读访问:ncdu -r。


ncdu 可用于许多平台和 Linux 发行版。例如,你可以使用 dnf 直接从官方存储库把它安装到 Fedora 上:


$ sudo dnf install ncdu
复制代码


要了解关于这个工具的更多信息,请查看 ncdu 页面


作为 top 替代品的 htop


htop 是一个类似于 top 的交互式流程查看器,但它提供了更好的开箱即用的用户体验。默认情况下,htop 会用令人愉快的彩色显示与 top 相同的指标。


默认情况下,htop 是这样的:



相比之下,top 默认是这样的:



此外,htop 在顶部提供了系统概览信息,在底部提供了一个命令栏,可以使用功能键来触发命令,而且,你还可以按 F2 进入设置界面对它进行定制。你可以更改其颜色、添加或删除指标,或更改概览栏的显示选项。


虽然对于最新版本的 top,你也可以通过配置实现类似的结果,但 htop 提供了更合理的默认配置,这使得它成为一个漂亮且易于使用的流程查看器。


要了解关于这个项目的更多信息,请查看 htop 首页


作为 man 替代品的 tldr


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


这个工具不能代替 man。man 页面仍然是许多工具规范而完整的信息源。然而,在某些情况下,man 提供的信息太多了。有时候,你不需要一个命令的所有信息;你只是试着记住基本的选项。例如,curl 命令的 man 页面几乎有 3000 行。相反,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 pages。Fedora 中的 Python 客户端允许你下载并缓存这些页面以供脱机访问。


要了解有关 tldr 的更多信息,可以使用 tldr tldr。


作为 sed/grep 替代品的 jq


jq 是一个命令行 JSON 处理器,类似于 sed 或 grep,但专门设计用于处理 JSON 数据。如果你是在日常任务中会用到 JSON 的开发人员或系统管理员,那么这是你工具箱中必不可少的工具。


与 grep 和 sed 等通用文本处理工具相比,jq 的主要优点是它理解 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。


作为 find 替代品的 fd


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 台式机和笔记本电脑上的工作帮助很大。


你的工作流中是否使用了其他工具?欢迎在下面的评论区补充。


作者介绍


Ricardo Gerardi 是加拿大红帽公司的高级顾问,他专门从事基于 Ansible 和 Openshift 的 IT 自动化。他有丰富的电信行业经验,曾在 TELUS 担任高级架构师,并曾在 IBM 巴西和 IBM 加拿大担任网络管理解决方案的高级顾问和售前专家长达 13 年。Ricardo 是一个超过 20 年的 Linux 爱好者。他目前感兴趣的是用 Go 编程来破解东西。


英文原文


5 modern alternatives to essential Linux command-line tools


2020 年 7 月 19 日 09:374229
用户头像
小智 InfoQ 主编

发布了 395 篇内容, 共 306.8 次阅读, 收获喜欢 1709 次。

关注

评论

发布
暂无评论
发现更多内容

探秘RocketMQ源码【1】——Producer视角看事务消息

阿里云金融线TAM SRE专家服务团队

开源 RocketMQ 中间件 开源代码 消息中间件

面试官都爱问的ThreadLocal

花火

ThreadLocal 哈希表 弱引用

区块链的常识之,什么是区块链股份授权证明机制DPoS?

CECBC区块链专委会

区块链 共识机制

区块链司法可信存证,版权维护应用落地

t13823115967

区块链司法可信存证 版权维护应用落地

linux开发各种I/O操作简析,以及select、poll、epoll机制的对比

良知犹存

linux开发

想了解物联网应用的自动部署,看这篇就够了

华为云开发者社区

服务器 华为云 部署

对于CRM之于现代化企业的影响以及作用的分析

Learun

敏捷开发 CRM 客户关系管理

SpringCloud Alibaba微服务实战一基础环境准备

AI乔治

Java 架构 微服务 Spring Cloud

区块链商品溯源系统开发,数据上链应用落地方案

WX13823153201

大整数算法

落曦

基于ELK的日志平台介绍

Rayzh

ELK 日志系统

今年最火的 Golang 云原生开源项目,可能就是它了!

阿里巴巴云原生

go 开源 Kubernetes 云原生

第11代酷睿处理器出色体验的奥秘原来是这个!

intel001

字节跳动的这份《算法中文手册》火了,完整版PDF开放下载!不少小伙伴靠这份指南成功掌握了算法的核心技能,成功拿到了 BATJ等大厂offer。

Java架构之路

Java 程序员 架构 面试 编程语言

从资源管理角度认识K8S

LorraineLiu

Kubernetes 云原生 k8s k8s入门

2020年10月公有云性能评测:盛大云-华东蝉联冠军,腾讯云-北京无缘前三

BonreeAPM

云计算 腾讯云 ucloud 公有云 评测

阿里P8熬夜完成这两份800页Java面试核心知识原理+框架

马士兵老师

Java 程序员 面试 编程语言 架构师

一文带你读懂!华为云在ACMUG技术沙龙上都透露了些啥?

华为云开发者社区

数据库 大数据 数据

新思科技:ISO/SAE 21434标准即将发布 你准备好了吗?

InfoQ_434670063458

新思科技 汽车软件安全

架构师训练营第 1 期 -week9

习习

SpringCloud Alibaba微服务实战二 - 服务注册

AI乔治

Java 架构 微服务 Spring Cloud

重点人员管控系统开发,情报研判系统搭建

t13823115967

重点人员管控系统开发 情报研判系统搭建

年轻人你不讲武德,自己偷着学习!spring Security五套「源码级」笔记哪里来的?我也要!

Java架构追梦

Java 源码 架构 面试 spring security

anyRTC uni-app 跨平台SDK 发布!总有一款适合你!

anyRTC开发者

uni-app 音视频 WebRTC RTC

软件测试流程

测试人生路

软件测试

区块链能修复企业云计算吗?

CECBC区块链专委会

区块链 云计算

聊聊在国企当程序员的这三年,这样的生活真的是你想要的吗?

Java架构师迁哥

利用区块链数字化人民币,中国有望从追随者变为新秩序的领导者

CECBC区块链专委会

区块链 数字人民币

数据库:我没有带闪,不讲武德

比伯

Java 编程 程序员 面试 计算机

OpenKruise:阿里巴巴 双11 全链路应用的云原生部署基座

阿里巴巴云原生

Kubernetes 运维 云原生 中间件 存储

很认真的谈一谈程序员的自我修养

linux亦有归途

程序员自我修养

5个基本Linux命令行工具的现代化替代品-InfoQ