Linux Note / 运维笔记

20个非标准命令行工具

Einic Yeo · 10月27日 · 2019年

这篇文章是我近年来发现的一些最佳非标准命令行工具展示系列的一部分。如果使用命令行,则可能在此页面上至少找到一件事,这将使您的生活更轻松。

1、z跳转

现代浏览器地址栏可以智能模糊搜索,节省了大量时间。想要刷下推特?只需在地址栏输入「tw」然后回车。

相比之下,在命令行下使用 cd 访问文件系统,方式就太陈旧了。谢天谢地,z 给命令行带来了浏览器风格的导航。

短暂的学习期之后,z 能让你从任意位置跳转到一个目录,只需输入目标目录名的子字符串。z 会跳转到哪个目录取决于你提供的字符串参数、访问目录的频繁程度、访问目录的最近时间。这称为「频近度 (frecency)」。

z 不仅提高了速度,还降低了认知负担。使用 cd 时,你需要准确回忆目标目录在目录树的位置,并计算到达目录的路径。有了 z,只需知道目录的名称。

z 也已经移植到了其他 shell (例如 fish 和 zsh)。类似的项目有 autojump

安装 z

  • 在 macOS 上使用 Homebrew 安装 bash 版本:brew install z
  • 在 macOS 上使用 Fisher 安装 fish 版本fisher add jethrokuan/z

2、fzf快速模糊搜寻器

安装 fzf 后,在命令行的任何地方按下 Ctrl + T,就可以开启交互式模糊搜索界面,递归搜索当前目录下的文件。输入搜索项后,上、下键选择结果,回车上屏:

在上面的例子中,我输入了 bat(还可以是其他任何命令,例如 lesscd 等),接着按下 Ctrl + T。接着输入 five,回车,插入路径 src/five.rs 至版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!光标所在处,而不必先输入 src,再按 tab 键,再输入 fi,再按 tab 键——路径很长或者不好记的时候,这样很麻烦。

安装 fzf

  • macOS (Homebrew): brew install fzf
  • fish 绑定: fisher add jethrokuan/fzf

3、bat带语法高亮的文件查看

bat 助你快速查看文件,有语法高亮。bat 可以无缝替换 cat

如果输出过大(如上面的例子所示版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!),bat 会将输出传给 less,自动分页。

安装 bat

  • macOS (Homebrew): brew install bat

4、bench代码性能测试

bench 是极为有用的测试代码性能的工具。它是用 Haskell 写的,从这点上说,算是这篇文章中最酷的。任何可以在终端中运行的命令都可以传给它(加引号),bench 会重复运行该命令,测量执行时间。测试完成后,bench 会输出有用的统计数据。

衡量代码执行时间,相比系统内置的 time 命令,bench 更为强大。

类似的工具有 hyperfine (https://git.io/fhZwN) ,是用 Rust 编写的。

安装 bench

  • macOS (Homebrew): brew install bench

5、asciinemasvg-term录制终端为 SVG 动画

如何实现类似于Jumpserver koko一样的终端录制回放功能呢?

这篇文章中的终端剪辑实际上是 SVG 动画!使用 SVG 而不是视频文件有不小的优势:

  • 任意缩放 ?
  • 可以像其他图像一样嵌入 Markdown 文件 ?
  • 文件较小 ?
  • SVG 动画比视频酷太多 ?

asciinema由以下三个子项目构成:

  • asciinema:基于命令行的终端会话记录器
  • asciinema.org:提供API供上传录像和展示的网站
  • javascript player:用于在web上播放录像的js播放器

这里使用asciinema录制终端。输入asciinema rec即可开始录制。完成后按Ctrl+D,选择本地保存或上传asciinema.org

svg-term 可以根据 asciinema 录制文件生成 SVG 动画。如果你将录制文件上传到了 asciinema,需要访问 asciinema 链接将其设为公开。

转换录制文件为 SVG 动画,需要提供录制 ID (公开 asciinema 页面后可以在 URL 中找到 ID),输出文件名,还有其他一些可选参数。例如,我使用如下命令将上面例子中的终端录制 (https://asciinema.org/a/219486) 转换为 SVG 文件:

svg-term --cast=219486 --out ~/somewhere/out.svg --padding 18 --height 8 --width 80

或者,如果你不想把录制文件上传到 asciinema,你也可以直接使用 svg-term 转换本地录制文件(感谢 svg-term-cli 的作者 Mario Nebl 指出这一点):

asciinema rec cast.json
cat cast.json | svg-term-cli

安装asciinemasvg-term

  • 在 macOS 上安装 asciinemabrew install asciinema
  • 在 macOS 上安装 svg-term: npm install -g svg-term-cli

6、wrk测试 HTTP API 性能

wrk是个方便的小工具,可以测试 API 性能。为了演示它的用法,我在本地的 8001 端口运行了一个最小化的 Python HTTP API 服务器,它只有一个端点(/hello)。用wrk测试它的性能(5 秒内,使用 12 个线程发起 200 个连接)。

调整线程数、连接数、时长可以测试不同负载下 API 的表现。它不能代替 Locust 和 JMeter 这样的性能测试工具,但很轻量,在许多场景下够用。

很不幸,基于 wrk 的命令行接口发起 POST 请求很笨拙:需要用 Lua 编写一个小脚本,作为参数传给命令(详见文档)。

安装wrk

  • macOS (Homebrew): brew install wrk

7、exa替代ls

exa 是 ls 的现代替代品,其彩色输出更为易读,并提供了更多控制输出如何呈现的选项。

加上 --git-ignore 参数会根据 .gitignore 忽略对应文件,使用 -T 参数则能以树型结构列出目录。

安装exa

  • macOS (Homebrew): brew install exa

8、fd查找文件和目录

通常使用 find 命令基于正则表达式查找文件或目录。fd 是用 Rust 编写的 find 替代品。使用合理的默认值,提供更方便的界面,速度也更快。

fd 遵循 .gitignore 文件,也支持并行命令执行。并行命令执行可以在搜索返回的每个文件和目录上(并行)执行命令。fd 文档中的一个例子是找出所有 .jpg 文件,并行转换为 .png 文件(使用 convert 命令):

fd -e jpg -x convert {} {.}.png

安装fd

  • macOS (Homebrew): brew install fd

9、rg(ripgrep) 查找文件中的字符串

rg 是 grep 的替代品,它比 grep 快很多。

rg 是用 Rust 编写的,VS Code 编辑器的搜索功能其实是通过调用 rg 实现的。在性能评测中,rg 一贯超过类似工具。

安装 ripgrep

  • macOS (Homebrew): brew install ripgrep

10、peco交互式过滤

将任何命令的输出通过管道传给 peco,便能交互式地过滤输出,查找所需信息。你可以把它想成交互式 grep,随着输入实时更新结果,让搜索过程更直观。

你可以使用上下键选择搜索结果,然后用回车键确认。按下回车后,peco 会输出结果。

安装peco

  • macOS (Homebrew): brew install peco

11、hexyl十六进制查看器

检查二进制文件时通常查看文件的十六进制表示。hexyl 是个命令行下的十六进制查看器。

界面分为三栏:

  • 偏移量当前所在的字节数
  • 十六进制文件的十六进制表示(自身又分为两栏,不过在上面的 gif 例子中不可见)
  • 表示尝试将文件显示为文本(同样分为两栏,gif 例子中未显示)

hexyl 显示的每个字节的颜色取决于其类型(NULL、ASCII、non-ASCII等),这很有助于可读性。

小窍门 查看二进制文件或大的文本文件时,输出经常会超出屏幕,所以你可以把 hexyl 的输出传给 bat 或 less,以支持分页。如果用 less,需要加上 --r版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!aw-control-chars/-r 参数以正确显示颜色。

hexyl 由 David Peter 使用 Rust 编写,他也是 batfdhyperfine 的作者,我在本系列的第一篇文章中介绍过这些工具。

安装hexyl

  • macOS (Homebrew): brew install hexyl

12、pomo番茄钟计时器

番茄工作法是提升生产效率的好方法。如果你还没听说过,那么它大概是这样的:

  1. 你心无旁骛地工作 25 分钟
  2. 放松 5 分钟,做任何你想做的事情(只要不是工作 ?)
  3. 重复以上步骤 4 次(根据需要调整这个数字),接着休息 15 分钟

根据番茄工作法这一理论,遵循这一计划能让你在相对较短的时间内完成相对较多的事情。这也许不适用于每个人,但我个人验证了它的有效性!

pomo 是一个简单的命令行工具,助你依照番茄工作法管理时间。

安装pomo

在 macOS 上安装:

  1. 从 GitHub 下载二进制文件:curl -L -o pomo https://github.com/kevinschoon/pomo/releases/download/0.6.0/pomo-0.6.0-darwin-amd64
  2. 设置权限:chmod +x pomo
  3. 加入 PATHmv pomo /usr/local/bin
  4. 初始化数据库:pomo init

13、ncdu分析、清理磁盘空间

如果你的计算机上有很多项目版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!,最近也没有清理过磁盘。那么你几乎一定能找到一个占用大量磁盘的文件夹(我发现旧项目的 node_modules 文件夹特别容易占用大量空间)。ncdu 是我最爱的修复工具。事实上,在创建下面的 ncdu 演示例子时,我清理了 10 GiB 的磁盘空间!

只需运行 ncdu 即可使用。它会扫描当前目录下的所有子目录,所以如果在家目录运行 ncdu,也许需要较长时间扫描。

ncdu 的 ncurses 界面可以使用方向键,也可以使用 vim 风格的快捷键。

安装ncdu

  • macOS (Homebrew): brew install ncdu

14、HTTPiecurl的现代替代品

HTTPie 是一个更简单(不像 curl,每次使用都要 Google 下用法)、功能更多、更美观的 curl 替代品,可以在命令行调用 HTTP 的 API。到目前为止,我介绍的工具中,它是最流行的,而且有很精良的文档

http 命令的输出足够与 cURL 区分开来。输出的 JSON 响应带语法高亮,十分美观,可读性要好很多。如果你偏爱图形 UI,那么你也许会喜欢 Insomnia、Postman 或 Paw (Paw 需要购买许可,并且只适用于 macOS)。

安装 HTTPie

  • macOS (Homebrew): brew install httpie

15、tig交互式地浏览 git 仓库

有了 tig,无需离开命令行,就能交互式地浏览 git 仓库。

tig 的使用简单直观,提供了 stash、staging、log 等视图。

感谢 Renato Suero @renatosuero 在 DEV 上向我推荐 tig

安装tig

  • macOS (Homebrew): brew install tig

16、PathPicker (fpp) 快速选择文件

PathPicker 是由 Facebook 推出的命令行文件速选库。下面的动画摘自 PathPicker 文档。

摘自PathPicker 官网

PathPicker 接受各种各样的输入 —— git 命令的输出,grep 结果,搜索 —— 几乎任何输入都支持。解析输入后,PathPicker 呈现出供你选择文件的美观界面。选中文件后,可以用你偏爱的编辑器打开,或执行任意命令。

感谢 Nikolay Dubina (@nikolayid) 推荐这一工具。

安装 PathPicker

  • macOS (Homebrew): brew install fpp

17、tldr使用命令行工具的实用示例

tldr 助你快速查看使用命令行工具的实际示例。简而言之,「tl;dr」版本的 man 页面。

tldr 的例子由社区维护,存储于 tldr 的 GitHub 仓库

安装tldr

版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!
  • 推荐使用 npm 安装:npm install -g tldr
  • macOS (Homebrew): brew install tldr

18、gron查看 JSON

gron 将 JSON 文本转换为离散的赋值语句,以便查找。我特别喜欢组合 fzf 使用(我在本系列的第一篇文章中提到过这个工具),这样可以交互式地查看 API

gron 也可以用来转换 JSON 对象(例子)。不过这不是 gron 的主要使用场景,使用 jq 这样的专门工具解决这类任务大概更合适。

安装gron

19、thefuck 快速修正命令行手误

输入命令时拼错了,输入 fuck ,thefuck 会给出一些候选的正确命令。

很不幸,这个命令的名称稍微有点黄暴,你也许想要起个别名。

安装 thefuck

  • macOS (Homebrew): brew install thefuck

20、explainshell 解释命令

如果你手头有一行很复杂的命令,想要了解它做了什么,又不想一个个查 man 或 tldr,那么你可以使用 explainshell

参考文献

https://darrenburns.net/

0 条回应