命令行工具
对于每一个程序员而言,命令行工具都非常关键。你对他越熟悉,在使用计算机、处理工作流程等越是高效。
下面我们收集了一些优秀的Rust所写的命令行工具,它们相比目前已有的其它语言的实现,可以提供更加现代化的代码实现、更加高效的性能以及更好的可用性。
索引目录
新工具 | 替代的目标或功能描述 |
---|---|
bat | cat |
exa | ls |
lsd | ls |
fd | find |
procs | ps |
sd | sed |
dust | du |
starship | 现代化的命令行提示 |
ripgrep | grep |
tokei | 代码统计工具 |
hyperfine | 命令行benchmark工具 |
bottom | top |
teeldear | tldr |
grex | 根据文本示例生成正则 |
bandwitch | 显示进程、连接网络使用情况 |
zoxide | cd |
delta | git可视化 |
nushell | 全新的现代化shell |
mcfly | 替代ctrl + R 命令搜索 |
fselect | 使用SQL语法查找文件 |
pueue | 命令行任务管理工具 |
watchexec | 监视目录文件变动并执行命令 |
dura | 更加安全的使用git |
alacritty | 强大的基于OpenGL的终端 |
broot | 可视化访问目录树 |
bat
bat克隆了**cat**的功能并提供了语法高亮和Git集成,它支持
Windows,
MacOS和
Linux`。同时,它默认提供了多种文件后缀的语法高亮。
exa
exa是ls
命令的现代化实现,后者是目前Unix/Linux
系统的默认命令,用于列出当前目录中的内容。
lsd
lsd 也是 ls
的新实现,同时增加了很多特性,例如:颜色标注、icons、树形查看、更多的格式化选项等。
fd
fd 是一个更快、对用户更友好的find实现,后者是 Unix/Linux
内置的文件目录搜索工具。之所以说它用户友好,一方面是 API
非常清晰明了,其次是它对最常用的场景提供了有意义的默认值:例如,想要通过名称搜索文件:
fd
:fd PATTERN
find
:find -iname 'PATTERN'
同时 fd
性能非常非常高,还提供了非常多的搜索选项,例如允许用户通过 .gitignore
文件忽略隐藏的目录、文件等。
procs
procs 是 ps 的默认实现,后者是 Unix/Linux
的内置命令,用于获取进程( process
)的信息。proc
提供了更便利、可读性更好的格式化输出。
sd
sd 是 sed 命令的现代化实现,后者是 Unix/Linux
中内置的工具,用于分析和转换文本。
sd
拥有更简单的使用方式,而且支持方便的正则表达式语法,sd
拥有闪电般的性能,比 sed
快 2x-11x 倍。
以下是其中一个性能测试结果:
对1.5G大小的 JSON 文本进行简单替换
hyperfine -w 3 'sed -E "s/\"/\'/g" *.json >/dev/null' 'sd "\"" "\'" *.json >/dev/null' --export-markdown out.md
Command | Mean [s] | Min…Max [s] |
---|---|---|
sed -E "s/\"/'/g" *.json >/dev/null | 2.338 ± 0.008 | 2.332…2.358 |
sed "s/\"/'/g" *.json >/dev/null | 2.365 ± 0.009 | 2.351…2.378 |
sd "\"" "'" *.json >/dev/null | 0.997 ± 0.006 | 0.987…1.007 |
结果: ~2.35 times faster
dust
dust 是一个更符合使用习惯的du,后者是 Unix/Linux
内置的命令行工具,用于显示硬盘使用情况的统计。
starship
starship 是一个命令行提示,支持任何 shell
,包括 zsh
,简单易用、非常快且拥有极高的可配置性, 同时支持智能提示。
ripgrep
ripgrep 是一个性能极高的现代化 grep
实现,后者是 Unix/Linux
下的内置文件搜索工具。该项目是 Rust 的明星项目,一个是因为性能极其的高,另一个就是源代码质量很高,值得学习, 同时 Vscode
使用它作为内置的搜索引擎。
从功能来说,除了全面支持 grep
的功能外,repgre
支持使用正则递归搜索指定的文件目录,默认使用 .gitignore
对指定的文件进行忽略。
tokei
tokei 可以分门别类的统计目录内的代码行数,速度非常快!
hyperfine
hyperfine 是命令行benchmark工具,它支持在多次运行中提供静态的分析,同时支持任何的 shell
命令,准确的 benchmark
进度和当前预估等等高级特性。
bottom
bottom 是一个现代化实现的 top
,可以跨平台、图形化的显示进程/系统的当前信息。
tealdear
tealdear 是一个更快实现的tldr, 一个用于显示 man pages
的命令行程序,简单易用、基于例子和社区驱动是主要特性。
bandwhich
bandwhich 是一个客户端实用工具,用于显示当前进程、连接、远程 IP( hostname ) 的网络信息。
grex
grex 既是一个命令行工具又是一个库,可以根据用户提供的文本示例生成对应的正则表达式,非常强大。
zoxide
zoxide 是一个智能化的 cd
命令,它甚至会记忆你常用的目录。
delta
delta 是一个 git
分页展示工具,支持语法高亮、代码比对、输出 grep
等。
nushell
nushell 是一个全新的 shell
,使用 Rust
实现。它的目标是创建一个现代化的 shell
:虽然依然基于 Unix
的哲学,但是更适合现在的时代。例如,你可以使用 SQL
语法来选择你想要的内容!
mcfly
mcfly 会替换默认的 ctrl-R
,用于在终端中搜索历史命令, 它提供了智能提示功能,并且会根据当前目录中最近执行过的上下文命令进行提示。mcfly
甚至使用了一个小型的神经网络用于智能提示!
fselect
fselect 允许使用 SQL 语法来查找系统中的文件。它支持复杂查询、聚合查询、.gitignore 忽略文件、通过宽度高度搜索图片、通过 hash 搜索文件、文件属性查询等等,相当强大!
# 复杂查询
fselect "name from /tmp where (name = *.tmp and size = 0) or (name = *.cfg and size > 1000000)"
# 聚合函数
fselect "MIN(size), MAX(size), AVG(size), SUM(size), COUNT(*) from /home/user/Downloads"
# 格式化函数
fselect "LOWER(name), UPPER(name), LENGTH(name), YEAR(modified) from /home/user/Downloads"
pueue
pueue 是一个命令行任务管理工具,它可以管理你的长时间运行的命令,支持顺序或并行执行。简单来说,它可以管理一个命令队列。
watchexec
watchexec 可以监视指定的目录、文件的改动,并执行你预设的命令,支持多种配置项和操作系统。
# 监视当前目录/子目录中的所有js、css、html文件,一旦发生改变,运行`npm run build`命令
$ watchexec -e js,css,html npm run build
# 当前目录/子目录下任何python文件发生改变时,重启`python server.py`
$ watchexec -r -e py -- python server.py
dura
dura 运行在后台,监视你的 git
目录,提交你未提交的更改但是并不会影响 HEAD
、当前的分支和 git
索引(staged文件)。
如果你曾经遇到过**"完蛋, 我这几天的工作内容丢了"**的情况,那么就可以尝试下 dura
,checkout dura brach
,然后代码就可以顺利恢复了:)
恢复代码
- 你可以使用
dura
分支来恢复
$ echo "dura/$(git rev-parse HEAD)"
- 也可以手动恢复
# Or, if you don't trust dura yet, `git stash`
$ git reset HEAD --hard
# get the changes into your working directory
$ git checkout $THE_HASH
# last few commands reset HEAD back to master but with changes uncommitted
$ git checkout -b temp-branch
$ git reset master
$ git checkout master
$ git branch -D temp-branch
alacritty
alacritty 是一个跨平台、基于OpenGL的终端,性能极高的同时还支持丰富的自定义和可扩展性,可以说是非常优秀的现代化终端。
目前已经是 beta
阶段,可以作为日常工具来使用。
broot
broot
允许你可视化的去访问一个目录结构。