那些由Rust打造的高效生产力工具(Updated on 2020-2-25)

最近沉迷于一批Rust编写的生产力工具, 每个都是blazing-fast, 有的还很酷炫. 在这里做个收集分享, 具体安装、教程就不细说了, 自行查阅.

rust_tool

ripgrep

最刁的应该就是ripgrep了, 名称也起得很调皮: R.I.P grep, 意图很明显了, 就是取代grep的, 且实际性能碾压grep. 作者在他的文章中列举了很多benchmark. 截取一个感受一下:

ToolCommandLine countTime
ripgreprg -L -u -tc -n -w '[A-Z]+_SUSPEND'4040.079s
ucgucg --type=cc -w '[A-Z]+_SUSPEND'3900.163s
GNU grepegrep -R -n --include='*.c' --include='*.h' -w '[A-Z]+_SUSPEND'4040.611s

不过, 我用得最多的并不是rg命令, 而是在vim中的LeaderF插件的模糊匹配, 速度也是贼快.

inferno

inferno这个工具很多人不常用, 但是对我的帮助是最大的. 几乎秒生成🔥火焰图的工具, 和原版FlameGraph相比, 速度快了18~20倍.

贴一个作者的benchmark:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
collapse/dtrace/1       time:   [8.2767 ms 8.2817 ms 8.2878 ms]
thrpt: [159.08 MiB/s 159.20 MiB/s 159.29 MiB/s]
collapse/dtrace/12 time: [3.8631 ms 3.8819 ms 3.9019 ms]
thrpt: [337.89 MiB/s 339.63 MiB/s 341.28 MiB/s]

collapse/perf/1 time: [16.386 ms 16.401 ms 16.416 ms]
thrpt: [182.37 MiB/s 182.53 MiB/s 182.70 MiB/s]
collapse/perf/12 time: [4.8056 ms 4.8254 ms 4.8460 ms]
thrpt: [617.78 MiB/s 620.41 MiB/s 622.97 MiB/s]

collapse/sample time: [8.9132 ms 8.9196 ms 8.9264 ms]
thrpt: [155.49 MiB/s 155.61 MiB/s 155.72 MiB/s]

flamegraph time: [16.071 ms 16.118 ms 16.215 ms]
thrpt: [38.022 MiB/s 38.250 MiB/s 38.363 MiB/s]

感受一下对比:

EP1aHvRUcAMjLWG

broot

还在用tree命令吗? 试试broot吧! 交互式的树形结构查找, 一目了然, 关键是毫秒级的查询响应.

broot

du

dua-cli

dua (-> Disk Usage Analyzer) , 类似du命令, 但是提供交互式的查看方式.

dua-cli

dust

du + rust = dust. 更直观的方式显示du命令. 不过不是常规的树型结构, 而是倒树型.

dust

dutree

dutree, du命令+tree命令, 提供 files-only 功能.

dutree

上面三个工具, 由于dua-cli不包含树型等复杂的图形, 所以在统计上速度最快(以--depth 1测试). 各有千秋, 大家可以自选.

bat

bat
这个bat不是我们想的BAT. 目的是取代cat(cat with wings -> bat). 以前一直认为cat就是打印到终端, 用来查看文件而已, 直到看到了bat:

bat1

bat2

自动根据文件类型做语法高亮, 好看多了. 还有其它的命令参数, 甚至有一个和ripgrep结合的命令: batgrep, 带高亮地打印前者的输出.

hexyl

hexyl

如果要查看二进制文件内容怎么办? bat只能打印出来告诉你是 <BINARY>. 这时候需要hexyl, 非常友好的二进制查看工具, 曾经还在苦苦寻找好用GUI工具.

hexyl

当然还支持很多参数, 自定义查看方式.

dtool

除了查看文件内容或者二进制数据外, 我们通常还会计算文件哈希值或者一些其它的文件常见操作, 而dtool这个工具就像一个开发者的小型瑞士军刀, 提供了开发者很多常见命令操作, 如计算哈希值、编码转换等等常见操作.

convert a string to base64

1
2
$ echo -n abc | dtool s2h | dtool h2b64
YWJj

convert a encoded timestamp to date

1
2
$ echo -n 2c28e75d | dtool nd -tu32 | dtool ts2d
2019-12-04 11:29:48

convert a jpeg to base64

1
2
$ cat pic.jpg | dtool b2h | dtool h2b64
/9j/4AAQSkZJR...

calculate file md5

1
2
$ cat pic.jpg | dtool b2h | dtool hash -a md5
0x1884b72e23b0c93320bac6b050478ff4

ytop

常用的htop命令也有一个Rust的版本, 叫ytop, 样子也是很酷炫.

ytop

procs

曾经也是各种记ps命令的参数, 后来用htop. 现在有了procs, 功能上虽不如htop丰富, 但是能够查看docker容器的状态.

procs1

procs2

后面再分享两个比较fancy的工具.

lsd

lsd看名称就是替代ls的, 加了各种icon和高亮, 需要安装nerd字体

screen_lsd

starship

starship_logo

光看logo和名字就知道很fancy了, 以模块的哲学来定义shell终端展示.

starship

还有另外一个叫nushell, 用终端制表的方式打印输出, 和上面几个相比就没有高亮了.

tui-rs

最后祭出tui-rs, 是一个Rust的终端GUI library, 提供各种Widget, 可以用来DIY自己的神器. 包括上面的ytop也是基于tui-rs开发的.

tui-rs

感谢各位作者和Rust, 给大家带来的这些高效工具, 欢迎推荐👏.

开了一个仓库用来记录和存放:https://github.com/unpluggedcoder/awesome-rust-tools,不定期更新中。