|
在日常使用 Linux/Unix 系统时,我们会使用许多命令行工具来完成我们的工作,并理解和管理我们的系统,像 du 用于监视磁盘利用率,top 用于显示系统资源。其中一些工具已经存在很长时间了。例如,top 于 1984 年首次发布,而 du 的首次发布要追溯到 1971 年。 多年来,这些工具已经被现代化并移植到不同的系统,但是,通常,它们仍然延续着它们最初的思想和体验。 这些都是很好的工具,对于许多系统管理员的工作流来说都是必不可少的。然而,最近几年,开源社区已经开发出了可以带来额外好处的替代工具。虽然有些华而不实,但另外一些则极大地提高了可用性,使它们成为现代化系统上的最佳选择。这包括以下五个标准 Linux 命令行工具的替代品。 1作为 du 替代品的 ncduNCurses 磁盘利用率(ncdu)工具提供了与 du 类似的结果,但是在一个基于 curses 的交互式界面中,它重点关注那些占用磁盘空间比较多的目录。 ncdu 会花一些时间分析磁盘,然后根据你最常用的目录或文件显示结果,如下所示:
$ A; D# x @) s! m S- ncdu 1.14.2 ~ Use the arrow keys to navigate, press ? for help3 p% q1 Q/ N+ r8 v- P1 O( F0 J
- --- /home/rgerardi ------------------------------------------------------------- {% A' x' |& k
- 96.7 GiB [##########] /libvirt- N1 C! _' \- [6 [
- 33.9 GiB [### ] /.crc" [- Z! m4 C% t8 q+ ^0 W: o
- 7.0 GiB [ ] /Projects t; N' Z7 S. a$ X+ I- b
- . 4.7 GiB [ ] /Downloads* W6 }) n9 E! \: d) M' X. f! B6 H
- . 3.9 GiB [ ] /.local! b) e3 i+ V! g, I. I) A5 n
- 2.5 GiB [ ] /.minishift1 s0 G6 ?1 B$ | H
- 2.4 GiB [ ] /.vagrant.d9 B( ^' h: q0 R; e
- . 1.9 GiB [ ] /.config& n" E( F, K" H X/ E
- . 1.8 GiB [ ] /.cache
' r1 f H6 y1 [. a! v6 {5 J) O - 1.7 GiB [ ] /Videos" P! g) C. C( Q# M
- 1.1 GiB [ ] /go
+ f4 N: i9 G, p6 I) r9 C7 ~ - 692.6 MiB [ ] /Documents$ v$ C- O! I9 b4 f
- . 591.5 MiB [ ] /tmp7 X! C1 W( Y. y$ C. n6 f9 J! j& _
- 139.2 MiB [ ] /.var
* }; \6 H, s6 a4 x# x# _% o% f - 104.4 MiB [ ] /.oh-my-zsh9 F# y; i( F, R. g+ K7 T" h* m
- 82.0 MiB [ ] /scripts; r. a* W+ C2 [3 b
- 55.8 MiB [ ] /.mozilla
5 b% b5 l W: t1 p* z1 p! M, p - 54.6 MiB [ ] /.kube
4 l0 x0 V% l$ `1 \8 A! C6 p) _ - 41.8 MiB [ ] /.vim
8 M3 z/ b+ t8 r' Y - 31.5 MiB [ ] /.ansible
. J6 v* q$ N7 s; o - 31.3 MiB [ ] /.gem
1 f8 @/ Y3 J9 G4 q, v9 i - 26.5 MiB [ ] /.VIM_UNDO_FILES
4 w) W. _% S( g* _. f3 N% j - 15.3 MiB [ ] /Personal8 l% d! M) k# M6 t. c, a' J
- 2.6 MiB [ ] .ansible_module_generated( [2 I7 x3 z @; d& ]
- 1.4 MiB [ ] /backgrounds8 e, O" c0 V; |' ]- \/ m
- 944.0 KiB [ ] /Pictures4 k9 y! N) E7 ?, o) f4 e* q
- 644.0 KiB [ ] .zsh_history3 A# @, @: `9 n1 A
- 536.0 KiB [ ] /.ansible_async
4 f" e/ ~) a: h: E& E, B1 L8 c - Total disk usage: 159.4 GiB Apparent size: 280.8 GiB Items: 561540
复制代码
: q5 A+ f F4 u& b
使用方向键导航到每个条目。如果你在一个目录条目上按下 Enter 键,ncdu 将显示该目录的内容: - ' f" P i8 i/ \6 [( B0 v/ x& M p
- --- /home/rgerardi/libvirt ----------------------------------------------------
% w+ S& g1 m5 y# \" X - /..
' P/ n$ S/ e6 _) ]& `; Y2 x/ ? - 91.3 GiB [##########] /images
7 c' ?8 H4 m* c9 \ - 5.3 GiB [ ] /media
复制代码
8 b' r9 t' \8 M! w; H l5 [
你可以使用它下钻目录并查找哪些文件占用的磁盘空间最多,使用左箭头键可以返回上一级目录。在默认情况下,可以按下 d 键使用 ncdu 删除文件,在删除之前,它会跟你确认删除请求。如果你想禁用此行为以防止发生意外,请使用 -r 选项进行只读访问:ncdu -r。 ncdu 可用于许多平台和 Linux 发行版。例如,你可以使用 dnf 直接从官方存储库把它安装到 Fedora 上: - $ sudo dnf install ncdu/ J/ \+ z/ n V0 m" x& h8 {
要了解关于这个工具的更多信息,请查看 ncdu 页面。 http://dev.yorhel.nl/ncdu 2作为 top 替代品的 htophtop 是一个类似于 top 的交互式流程查看器,但它提供了更好的开箱即用的用户体验。默认情况下,htop 会用令人愉快的彩色显示与 top 相同的指标。 默认情况下,htop 是这样的:
相比之下,top 默认是这样的:
此外,htop 在顶部提供了系统概览信息,在底部提供了一个命令栏,可以使用功能键来触发命令,而且,你还可以按 F2 进入设置界面对它进行定制。你可以更改其颜色、添加或删除指标,或更改概览栏的显示选项。 虽然对于最新版本的 top,你也可以通过配置实现类似的结果,但 htop 提供了更合理的默认配置,这使得它成为一个漂亮且易于使用的流程查看器。 要了解关于这个项目的更多信息,请查看 htop 首页。 http://hisham.hm/htop/ 3作为 man 替代品的 tldrtldr 命令行工具显示简化的命令用法信息,主要包括示例。它是作为社区项目 tldr pages 的客户端。 这个工具不能代替 man。man 页面仍然是许多工具规范而完整的信息源。然而,在某些情况下,man 提供的信息太多了。有时候,你不需要一个命令的所有信息;你只是试着记住基本的选项。例如,curl 命令的 man 页面几乎有 3000 行。相反,curl 的 tldr 页面只有 40 行,如下所示:
- x& j& [% {1 [ \ g. _- $ tldr curl
; D8 n% ], T! m9 @; E" ~1 p - # curl
6 V" q) D1 F; C7 M - Transfers data from or to a server.1 [, `0 T) r# j# E, E
- Supports most protocols, including HTTP, FTP, and POP3.6 V, Z& ^% h( ^. t, z1 l
- More information: <http://curl.haxx.se>.$ J. |$ O2 R# ]. i E r# f$ ]% J
- - Download the contents of an URL to a file:1 o2 j& w! [" U/ |6 ?+ ~
- curl http://example.com -o filename
' _$ X, j: }. }* O9 K8 V9 _/ b - - Download a file, saving the output under the filename indicated by the URL: E0 T# Z" \; ?% V0 v
- curl -O http://example.com/filename
7 q( G! G8 U$ @ - - Download a file, following [L]ocation redirects, and automatically [C]ontinuing (resuming) a previous file transfer:8 _. P- d! r" d3 z
- curl -O -L -C - http://example.com/filename
7 I: A; H0 J9 h k4 V! s - - Send form-encoded data (POST request of type `application/x-www-form-urlencoded`):
! {) l, r3 O( T! i' b - curl -d 'name=bob' http://example.com/form
4 t3 z; P8 u1 q - - Send a request with an extra header, using a custom HTTP method:
" O. a" c' n2 _+ H# ^ - curl -H 'X-My-Header: 123' -X PUT http://example.com ; B( M% N$ I% |8 V
- - Send data in JSON format, specifying the appropriate content-type header:
( e' Q) D# D7 Y% O0 J - curl -d '{"name":"bob"}' -H 'Content-Type: application/json' http://example.com/users/1234; l+ m( \! W( Z6 _) g0 H! P
- ... TRUNCATED OUTPUT
复制代码; X* A. y; G: G
TLDR 是网络俚语“too long; didn't read”的缩写,指对一篇很长的文章进行总结。这个名称很适合这个工具,因为 man 页面虽然有用,但有时太长了。 在 Fedora 中,tldr 客户端是用 Python 编写的。你可以使用 dnf 安装它。要了解其他客户端选项,请参阅 tldr pages 项目页面。 http://tldr.sh/ 一般来说,tldr 工具需要访问互联网以查阅 tldr pages。Fedora 中的 Python 客户端允许你下载并缓存这些页面以供脱机访问。 要了解有关 tldr 的更多信息,可以使用 tldr tldr。 4作为 sed/grep 替代品的 jqjq 是一个命令行 JSON 处理器,类似于 sed 或 grep,但专门设计用于处理 JSON 数据。如果你是在日常任务中会用到 JSON 的开发人员或系统管理员,那么这是你工具箱中必不可少的工具。 与 grep 和 sed 等通用文本处理工具相比,jq 的主要优点是它理解 JSON 的数据结构,允许使用单个表达式创建复杂的查询。 举例来说,假设你试图在这个 JSON 文件中查找容器的名称: - 5 ?5 S9 c& S. j7 N) h) {+ V
- {
( D, F" k3 E( W; z) }6 Y" ?! u - "apiVersion": "v1",' C# W8 ~8 u. e# W0 j& ]
- "kind": "Pod",
3 x' J& T0 E' R X- Z9 z% ~ - "metadata": {4 d# v' P, b$ N) L2 E" h, U
- "labels": {" h: ~/ Q0 `$ ]8 D' p: d$ M
- "app": "myapp"# T3 `* W. Y- k; m
- },0 X5 v( k+ Q3 Y4 `+ O
- "name": "myapp",5 z) X% M3 l9 w. p- Z! U
- "namespace": "project1"1 |; U/ b$ R# n9 S" p a
- },+ e L' i8 h8 W( m/ L& T7 o9 T
- "spec": {3 m, {7 l, C- I# _# v
- "containers": [4 R- {0 m9 E4 o: l9 P# o
- {4 ~7 [( a$ h4 q, m# e5 k" ?
- "command": [5 ?( u7 a& n( f" j, {4 T. L
- "sleep",
# R0 f6 H6 u& }6 m" \* A; F: A - "3000"
% w4 h; E: n7 k; f `5 P - ],
6 B% i4 N, ?4 S7 o. D& U - "image": "busybox",
. t6 L, L& t2 s7 P& K, x - "imagePullPolicy": "IfNotPresent",
4 T/ s8 ^/ }. D2 V2 S - "name": "busybox"0 r5 X7 N! j n5 q
- },- O7 N A6 G+ i- H8 _+ Q- P
- {
# O6 J- D7 a6 A - "name": "nginx",
+ }. r5 C( F7 ^* V: K - "image": "nginx",
% J8 ]) m- k9 a4 L% s - "resources": {},( _& e9 T0 H" M, n5 b
- "imagePullPolicy": "IfNotPresent"
3 ]' d! M# c0 w" S3 q* E+ m( i - }8 ?& y- }: A4 a1 C! _* S; |5 S( @
- ],
# q, z. k S" [* [ G5 q& E - "restartPolicy": "Never"
8 [) _* k0 b) c - }( f+ H( o# C+ A9 v
- }
复制代码4 `* p- O7 \. Q' M, S- [6 y
如果你直接使用 grep 查找 name,则写法如下:
- Q+ l) L6 m8 x3 m, B3 h* H- $ grep name k8s-pod.json
- j* ]* D6 W; m# b2 C - "name": "myapp",
4 {7 E( ]' M5 }3 F - "namespace": "project1"
. ^0 u' g l# q7 O' ~) g- @2 Q4 f' \ - "name": "busybox"5 h* p; w" |& }5 N& i' j
- "name": "nginx",
4 N) H! e" v: s5 ]4 H9 w2 a
复制代码grep 返回包含单词 name 的所有行。你可以向 grep 添加更多选项来限制它,借助一些正则表达式操作来找到容器的名称。如果是使用 jq 获得你想要的结果,则可以使用一个表达式来模拟向下导航数据结构,如下所示:
6 ~; g& V" C5 b! z+ y* w7 @- ^- $ jq '.spec.containers[].name' k8s-pod.json3 u+ Q& S/ G5 v/ W1 m
- "busybox"
1 r" W! ?" L2 N - "nginx"
复制代码
6 E Z, J7 [7 j w7 S
这个命令提供这两个容器的名称。如果你只是在查找第二个容器的名称,则可以在表达式中添加数组元素索引: - / H G" N$ t2 V2 C( O- @: r
- $ jq '.spec.containers[1].name' k8s-pod.json
* V2 | ], e! ?. f# B5 _. P- K! _5 f - "nginx"
复制代码
+ t5 J. x# e1 i4 K- b
因为 jq 知道数据结构,所以即使文件格式稍有变化,它也能提供相同的结果。而只要格式稍有变化,grep 和 sed 就可能提供不同的结果。 jq 有许多特性,要介绍所有这些特性的话,需要另写一篇文章。要了解更多信息,请参阅 jq 项目页、man 页面或 tldr jq。 http://stedolan.github.io/jq/ 5作为 find 替代品的 fdfd 是 find 命令的一个简单而快速的替代品。它的目的不是取代 find 提供的全部功能;相反,它提供了一些合理的默认值,在某些情况下非常有用。 例如,在包含 Git 存储库的目录中搜索源代码文件时,fd 会自动排除隐藏的文件和目录,包括. .git 目录,并忽略.gitignore 文件中的模式。一般来说,它的搜索速度更快,而且第一次搜索时提供了更多相关的结果。 默认情况下,fd 在当前目录中执行不区分大小写的模式搜索,输出是彩色的。使用 find 进行相同的搜索需要你提供额外的命令行参数。例如,在当前目录中搜索所有的 markdown 文件(.md 或.MD ),find 命令如下: - $ find . -iname "*.md"
4 C6 i8 ^! J" }: a8 I! t
使用 fd 进行同样的搜索: - $ fd .md0 M9 [* E" c0 ~6 D
在某些情况下,fd 需要额外的选项;例如,如果你想包含隐藏文件和目录,则必须使用选项 -H,而这在 find 中是不需要的。 fd 可用于许多 Linux 发行版。执行以下命令,可以使用标准存储库在 Fedora 中安装: - $ sudo dnf install fd-find
# ?1 ~0 D) K$ v% @- W$ J# t
要了解更多信息,请查阅 fd GitHub 存储库。 http://github.com/sharkdp/fd/ 6其他替代品虽然我仍然经常使用所有旧的基本工具,特别是在远程连接到服务器时,但这些替代品额外提供了一些在许多场景中都非常有用的好处。特别是,它们对我在 Linux 台式机和笔记本电脑上的工作帮助很大。 你的工作流中是否使用了其他工具?欢迎在下面的评论区补充。 7作者介绍Ricardo Gerardi 是加拿大红帽公司的高级顾问,他专门从事基于 Ansible 和 Openshift 的 IT 自动化。他有丰富的电信行业经验,曾在 TELUS 担任高级架构师,并曾在 IBM 巴西和 IBM 加拿大担任网络管理解决方案的高级顾问和售前专家长达 13 年。Ricardo 是一个超过 20 年的 Linux 爱好者。他目前感兴趣的是用 Go 编程来破解东西……
) m {0 E! d6 W1 D |