原文做者: Darren Burnsgit
翻译:weakish@LeanCloudgithub
原文连接:url.leanapp.cn/darrenweb
我打算写一系列文章,展现下近些年发现的一些很棒的非标准命令行工具,这是第一篇。若是你用命令行,那么这些工具中大概至少有一个能让你的生活更舒心。正则表达式
z
跳转现代浏览器地址栏能够智能模糊搜索,节省了大量时间。想要刷下推特?只需在地址栏输入「tw」而后回车。shell
相比之下,在命令行下使用 cd
访问文件系统,方式就太陈旧了。谢天谢地,z
给命令行带来了浏览器风格的导航。npm
短暂的学习期以后,z
能让你从任意位置跳转到一个目录,只需输入目标目录名的子字符串。z
会跳转到哪一个目录取决于你提供的字符串参数、访问目录的频繁程度、访问目录的最近时间。这称为「频近度 (frecency)」。json
z
不只提升了速度,还下降了认知负担。使用 cd
时,你须要准确回忆目标目录在目录树的位置,并计算到达目录的路径。有了 z
,只需知道目录的名称。浏览器
z
也已经移植到了其余 shell (例如 fish 和 zsh)。相似的项目有 autojump
。bash
z
fzf
快速模糊搜寻器安装 fzf
后,在命令行的任何地方按下 Ctrl + T
,就能够开启交互式模糊搜索界面,递归搜索当前目录下的文件。输入搜索项后,上、下键选择结果,回车上屏:服务器
在上面的例子中,我输入了 bat
(还能够是其余任何命令,例如 less
、cd
等),接着按下 Ctrl + T
。接着输入 five
,回车,插入路径 src/five.rs
至光标所在处,而没必要先输入 src
,再按 tab 键,再输入 fi
,再按 tab 键——路径很长或者很差记的时候,这样很麻烦。
fzf
brew install fzf
fish
绑定: fisher add jethrokuan/fzf
bat
带语法高亮的文件查看bat 助你快速查看文件,有语法高亮。bat
能够无缝替换 cat
。
若是输出过大(如上面的例子所示),bat
会将输出传给 less
,自动分页。
bat
brew install bat
bench
代码性能测试bench
是极为有用的测试代码性能的工具。它是用 Haskell 写的,从这点上说,算是这篇文章中最酷的。任何能够在终端中运行的命令均可以传给它(加引号),bench 会重复运行该命令,测量执行时间。测试完成后,bench 会输出有用的统计数据。
衡量代码执行时间,相比系统内置的 time
命令,bench 更为强大。
相似的工具备 hyperfine
,是用 Rust 编写的。
bench
brew install bench
asciinema
和 svg-term
录制终端为 SVG 动画这篇文章中的终端剪辑其实是 SVG 动画!使用 SVG 而不是视频文件有不小的优点:
我使用 asciinema
录制终端。输入 asciinema rec
便可开始录制。完成后按 Ctrl+D
,选择本地保存或上传 asciinema.org
svg-term
能够根据 asciinema 录制文件生成 SVG 动画。若是你将录制文件上传到了 asciinema,须要访问 asciinema 连接将其设为公开。
转换录制文件为 SVG 动画,须要提供录制 ID (公开 asciinema 页面后能够在 URL 中找到 ID),输出文件名,还有其余一些可选参数。例如,我使用以下命令将上面例子中的终端录制 (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
复制代码
asciinema
和 svg-term
asciinema
:brew install asciinema
svg-term
: npm install -g svg-term-cli
wrk
测试 HTTP API 性能wrk
是个方便的小工具,能够测试 API 性能。为了演示它的用法,我在本地的 8001 端口运行了一个最小化的 Python HTTP API 服务器,它只有一个端点(/hello
)。用 wrk
测试它的性能(5 秒内,使用 12 个线程发起 200 个链接):
调整线程数、链接数、时长能够测试不一样负载下 API 的表现。它不能代替 Locust 和 JMeter 这样的性能测试工具,但很轻量,在许多场景下够用。
很不幸,基于 wrk
的命令行接口发起 POST 请求很笨拙:须要用 Lua 编写一个小脚本,做为参数传给命令(详见文档)。
wrk
brew install wrk
exa
替代 ls
exa
是 ls
的现代替代品,其彩色输出更为易读,并提供了更多控制输出如何呈现的选项。
加上 --git-ignore
参数会根据 .gitignore 忽略对应文件,使用 -T
参数则能以树型结构列出目录。
exa
brew install exa
fd
查找文件和目录一般使用 find
命令基于正则表达式查找文件或目录。fd
是用 Rust 编写的 find
替代品。使用合理的默认值,提供更方便的界面,速度也更快。
fd
遵循 .gitignore 文件,也支持并行命令执行。并行命令执行能够在搜索返回的每一个文件和目录上(并行)执行命令。fd
文档中的一个例子是找出全部 .jpg 文件,并行转换为 .png 文件(使用 convert
命令):
fd -e jpg -x convert {} {.}.png 复制代码
fd
brew install fd
rg
(ripgrep) 查找文件中的字符串rg
是 grep 的替代品,它比 grep
快不少。
rg
是用 Rust 编写的,VS Code 编辑器的搜索功能实际上是经过调用 rg 实现的。在性能评测中,rg 一向超过相似工具。
brew install ripgrep
我但愿你在这篇文章中发现了有用的工具!我打算让这篇文章成为及时更新的工具库,收罗有用的替代性命令行工具,因此我可能会时不时更新这篇文章。
若是你对更多相似内容感兴趣,欢迎在 Twitter 上关注我。