五款新型 Linux 命令行工具,实用!

系统 Linux
近年来,开源社区开发了不少更具优势的替代工具。虽然有些工具华而不实,但有些则大大提高了实用性,成为了现代系统的绝佳选择。在本文中,我将介绍五种标准Linux命令行工具的替代品。

[[419356]]

使用新的替代工具来改进旧的命令行工具。

在Linux/Unix系统的日常使用中,我们需要使用很多命令行工具来完成工作,以及理解和管理我们的系统,例如使用du来监视磁盘利用率、top来显示系统资源。有些工具已经有很长的历史了。例如,top于1984年首次发布,而du的首次问世可追溯至1971年。

多年来,这些工具已经过现代化的改造,并移植到了不同的系统中,但总的来说,它们仍然保留了最初的想法、外观和感觉。

这些工具都非常优秀,对于许多系统管理员的工作流程来说都是必不可少的。但近年来,开源社区开发了不少更具优势的替代工具。虽然有些工具华而不实,但有些则大大提高了实用性,成为了现代系统的绝佳选择。在本文中,我将介绍五种标准Linux命令行工具的替代品。

du的替代:ncdu

NCurses磁盘使用率(NCurses DiskUsage,即ncdu)工具提供了与du类似的结果,但其基于curses的交互式界面可以显示消耗了大部分磁盘空间的目录。

首先Ncdu需要花一些时间分析磁盘,然后按照最常用的顺序显示目录或文件,如下所示: 

  1. ncdu 1.14.2 ~ Use the arrow keys to navigate, press ? for help  
  2. --- /home/rgerardi ------------------------------------------------------------  
  3.    96.7 GiB [##########] /libvirt  
  4.    33.9 GiB [###       ] /.crc  
  5.     7.0 GiB [          ] /Projects  
  6. .   4.7 GiB [          ] /Downloads  
  7. .   3.9 GiB [          ] /.local  
  8.     2.5 GiB [          ] /.minishift  
  9.     2.4 GiB [          ] /.vagrant.d  
  10. .   1.9 GiB [          ] /.config  
  11. .   1.8 GiB [          ] /.cache  
  12.     1.7 GiB [          ] /Videos  
  13.     1.1 GiB [          ] /go  
  14.   692.6 MiB [          ] /Documents  
  15. . 591.5 MiB [          ] /tmp  
  16.   139.2 MiB [          ] /.var  
  17.   104.4 MiB [          ] /.oh-my-zsh  
  18.    82.0 MiB [          ] /scripts  
  19.    55.8 MiB [          ] /.mozilla  
  20.    54.6 MiB [          ] /.kube  
  21.    41.8 MiB [          ] /.vim  
  22.    31.5 MiB [          ] /.ansible  
  23.    31.3 MiB [          ] /.gem  
  24.    26.5 MiB [          ] /.VIM_UNDO_FILES  
  25.    15.3 MiB [          ] /Personal  
  26.     2.6 MiB [          ]  .ansible_module_generated  
  27.     1.4 MiB [          ] /backgrounds  
  28.   944.0 KiB [          ] /Pictures  
  29.   644.0 KiB [          ]  .zsh_history  
  30.   536.0 KiB [          ] /.ansible_async  
  31.  Total disk usage: 159.4 GiB  Apparent size: 280.8 GiB  Items: 561540 

你可以通过方向键导航到每个结果。如果在选中的结果上按下Enter,则ncdu将显示该目录的内容: 

  1. --- /home/rgerardi/libvirt ----------------------------------------------------  
  2.                          /..  
  3.    91.3 GiB [##########] /images  
  4.     5.3 GiB [          ] /media 

你可以深入各个目录,找出哪些文件占用的磁盘空间最多。使用左方向键可以返回到上一个目录。在默认情况下,你可以按d键删除文件,但在删除文件之前ncdu会要求确认。如果你想禁止删除操作以防止发生意外,则可以通过-r选项设置只读访问:ncdu -r。

ncdu可用于许多平台和Linux发行版。例如,你可以使用dnf从官方代码库直接将其安装在Fedora上: 

  1. $ sudo dnf install ncdu 

更多有关该工具的信息,请参见:https://dev.yorhel.nl/ncdu。另外,Linux 系列面试题和答案全部整理好了,微信搜索Java技术栈,在后台发送:面试,可以在线阅读。

top的替代:htop

htop是一个类似于top的交互式进程浏览器,提供了更好的用户体验。在默认情况下,htop显示的各项指标与top相同,而且是漂亮的彩色。

默认的htop如下所示:

与默认的top相比:

此外,htop的顶部还提供了系统的概述信息,底部的命令栏则显示了功能键命令,你还可以按下F2进入设置页面来自定义界面。在设置页面中,你可以更改其颜色,添加或删除指标、更改概述栏的显示选项。

虽然top的最新版本也可以通过配置获得相似的结果,但htop提供的默认配置更为合理,作为一个进程浏览器更加易于使用。

如果想了解有关该项目的更多信息,请查看htop主页(https://hisham.hm/htop/)。

man的替代:tldr

tldr命令行工具显示可以简化的命令文档,而且大部分文档都提供示例。它是tldr pages项目(https://tldr.sh/)的客户端。

这个工具不是man的替代品。man pages仍然是许多工具的规范以及完整的信息源。但是,在某些情况下,man的内容太多了。有时,你不需要有关命令的所有信息。你只需要记住基本选项。例如,curl命令的man page几乎有3,000行。相比之下,curl的tldr只有40行,如下所示: 

  1. $ tldr curl  
  2. # curl  
  3.   Transfers data from or to a server.  
  4.   Supports most protocols, including HTTP, FTP, and POP3.  
  5.   More information: <https://curl.haxx.se> 
  6. - Download the contents of an URL to a file:  
  7.   curl http://example.com -o filename  
  8. - Download a file, saving the output under the filename indicated by the URL:  
  9.   curl -O http://example.com/filename  
  10. - Download a file, following [L]ocation redirects, and automatically [C]ontinuing (resuming) a previous file transfer:  
  11.   curl -O -L -C - http://example.com/filename  
  12. - Send form-encoded data (POST request of type `application/x-www-form-urlencoded`):  
  13.   curl -d 'name=bob' http://example.com/form                                                                                          
  14. - Send a request with an extra header, using a custom HTTP method:  
  15.   curl -H 'X-My-Header: 123' -X PUT http://example.com                                                                                 
  16.  - Send data in JSON format, specifying the appropriate content-type header:  
  17.   curl -d '{"name":"bob"}' -H 'Content-Type: application/json' http://example.com/users/1234  
  18. ... TRUNCATED OUTPUT 

TLDR的全称是“too long; didn'tread”(太长;未读),这是一句网络流行语,表示文章太长。这个名字非常适合这个汇总工具,因为manpages虽然非常实用,但内容太长。

在Fedora中,tldr客户端是用Python编写的。你可以使用dnf安装。有关其他客户端选项,请参见tldr pages项目(https://tldr.sh/)。

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

有关tldr的更多信息,请运行tldr tldr。推荐一个 Spring Boot 基础教程及实战示例:https://github.com/javastacks/spring-boot-best-practice

用sed/grep查找JSON数据的替代:jq

jq是JSON的命令行处理器。就像sed或grep一样,但主要是为了处理JSON数据。如果你是日常任务需要使用JSON的开发人员或系统管理员,那么这是你的工具箱中必不可少的工具。

与通用文本处理工具(例如grep和sed)相比,jq的主要优点在于它了解JSON数据结构,你可以通过一个表达式创建复杂的查询。

举例说明,假设你正在尝试在下列JSON文件中查找容器的名称: 

  1.  
  2.   "apiVersion": "v1",  
  3.   "kind": "Pod",  
  4.   "metadata": {  
  5.     "labels": {  
  6.       "app": "myapp"  
  7.     },  
  8.     "name": "myapp",  
  9.     "namespace": "project1"  
  10.   },  
  11.   "spec": {  
  12.     "containers": [  
  13.       {  
  14.         "command": [  
  15.           "sleep",  
  16.           "3000"  
  17.         ],  
  18.         "image": "busybox",  
  19.         "imagePullPolicy": "IfNotPresent",  
  20.         "name": "busybox"  
  21.       },  
  22.       {  
  23.         "name": "nginx",  
  24.         "image": "nginx",  
  25.         "resources": {},  
  26.         "imagePullPolicy": "IfNotPresent"  
  27.       }  
  28.     ],  
  29.     "restartPolicy": "Never"  
  30.   }  

如果你利用grep直接查询name,则结果为: 

  1. $ grep name k8s-pod.json  
  2.         "name": "myapp",  
  3.         "namespace": "project1"  
  4.                 "name": "busybox"  
  5.                 "name": "nginx", 

grep会返回所有包含单词name的行。你可以在grep中添加一些其他选项来限制查询结果,并通过正则表达式操作找到容器的名称。在使用jq获得所需结果时,你只需要使用一个模拟向下导航数据结构的表达式,如下所示: 

  1. $ jq '.spec.containers[].name' k8s-pod.json  
  2. "busybox"  
  3. "nginx" 

该命令会返回两个容器的名称。如果你只想查看第二个容器的名称,则可以在表达式中添加数组元素索引: 

  1. $ jq '.spec.containers[1].name' k8s-pod.json  
  2. "nginx" 

因为jq能够理解数据结构,所以即使文件格式稍有变化,它也可以提供相同的结果。但对于grep和se来说,格式稍有变化提供的结果就会完全不同。

jq还有很多功能,我需要用另写一篇文章才能介绍其所有的功能。有关更多信息,请参见jq项目页面(https://stedolan.github.io/jq/)、manpages或tldr jq。

find的替代:fd

fd是find命令的一种简单快速的替代。它的目的不是替换find的功能,而是提供一些合理的默认值,在某些情况下非常有用。

例如,在包含Git代码库的目录中搜索源代码文件时,fd会自动排除隐藏的文件和目录(包括.git目录),并忽略.gitignore文件中的模式。通常,它可以更快地查询,并提供相关度更高的结果。

在默认情况下,fd会针对当前目录执行不区分大小写的模式搜索,并输出彩色的结果。使用find进行的相同搜索时,你需要提供其他命令行参数。例如,搜索当前目录中所有的markdown文件(即.md或.MD文件),find命令如下所示: 

  1. $ find . -iname "*.md"$ find . -iname "*.md" 

而如下fd搜索能够返回相同的结果: 

  1. $ fd .md 

在有些情况下,fd也需要其他选项。例如,如果想让搜索包括隐藏的文件和目录,则必须使用选项-H,而find则不需要。

fd可用于许多Linux发行版。在Fedora中安装fd可使用标准代码库: 

  1. $ sudo dnf install fd-find 

有关更多信息,请请见fd的GitHub代码库(https://github.com/sharkdp/fd/)。

优秀的替代工具与久经考验的实用程序

尽管我还是习惯使用旧工具,尤其是在远程连接到服务器时,但新的替代工具提供了额外的好处,而且在许多情况下都很有帮助性。特别是帮助我在Linux台式机和笔记本电脑上管理和工作。

你是否使用其他工具来处理工作流程?请在下方留言。另外,关注公众号Java技术栈,在后台回复:面试,可以获取我整理的 Linux 系列面试题和答案,非常齐全。 

 

责任编辑:庞桂玉 来源: Java技术栈
相关推荐

2014-07-31 10:09:12

Linux命令归档工具

2014-02-12 13:30:16

Linux命令行终端工具

2010-08-24 09:10:14

Linux命令行工具

2016-10-25 15:36:49

Linux命令工具

2017-09-05 08:57:02

Linux命令行技巧

2013-04-11 09:21:21

Linux性能监测命令行工具

2018-03-14 14:27:00

2010-04-26 15:26:13

Linux网络配置

2022-07-13 08:21:38

开源命令行工具Linux

2022-04-05 00:18:33

工具终端命令行

2019-08-27 10:32:01

Linux操作系统Windows

2019-09-04 09:00:00

LinuxPngquantr工具

2011-01-24 15:52:07

2022-01-14 07:28:20

Linux 命令行组合

2017-02-28 08:32:12

Linux数据分析工具

2021-11-16 14:55:50

命令行Linux开源

2016-10-20 09:57:58

Linux转换工具

2020-12-10 16:16:08

工具代码开发

2020-12-11 06:44:16

命令行工具开发

2017-01-03 08:30:01

Linux命令行工具
点赞
收藏

51CTO技术栈公众号