程序员离不开命令行,许多经典命令是每天必用的,比如ls
和cd
。
虽然它们很好用,但是由于历史原因,往往也有一些缺点,比如用法不符合直觉、难以配置,有些速度也不快。
这些年,它们的替代品开始出现,而且越来越多,大家开始尝试使用现代语言,重新实现这些经典命令。本文总结一下这些替代品,其中有些真的很不错,值得你在自己的计算机上安装。
一、exa
exa[1] 是ls
命令的替代品,可以彩色输出目录内容,更容易辨识。
$ exa --long --git
上面命令中,参数--git
表示输出文件的 Git 状态。
o
N
:新文件oM
:文件有变动oI
:该文件被忽略
除了平铺显示,exa
还支持目录的树状显示。
$ exa --tree --level=2
exa
本身是一个二进制文件,不需要安装,下载后直接使用,速度也相当快。
同类软件还有 lsd[2],这里就不详细介绍了。
二、broot
broot[3] 可以看作增强版的ls
替代品,实际是一个终端里面的文件管理器。
使用时,可以先列出当前目录的文件信息。
$ br -sdph
上面命令中,参数含义如下。
o
-s
:显示文件体积o-d
:显示文件时间o-p
:显示文件权限o-h
:显示隐藏文件。
可以看到,它默认以树状结构,展开子目录。
然后,在这个界面中,可以完成各种文件操作。
o搜索:输入搜索词o复制:输入
:cp <复制后的文件名>
o删除:输入:rm
o改名:输入:mv <新文件名>
o退出:输入:q
甚至还可以预览文件:通过上下箭头选中文件,然后按下右箭头→
,就会打开外部关联程序;按下ctrl + →
,则在当前窗口预览文件。
三、zoxide
zoxide[4] 是 cd 命令的替代品,用来切换目录。
它的用法与cd
完全一样,进入目录/tmp
就是下面的命令。
$ z /tmp
它的特色是部分匹配,可以只写路径的一部分,它自动找到最经常使用的匹配项。
比如,你经常用它进入目录/tmp
,那么以后只要输入z t
,它就会自动将t
匹配为/tmp
,从而进入该目录。
$ z t
四、bat,fx,hexyl
bat[5] 是cat
命令的替代品,输出文本文件的内容,并且带有cat
所没有的代码高亮和行号。
$ bat README.md
如果浏览的是 JSON 文件,还可以使用 fx[6] 或者 jq[7]。
$ fx data.json
如果浏览的是二进制文件,使用 hexyl[8]。
$ hexyl example.jpg
五、diff-so-fancy
diff-so-fancy[9] 是 git diff 的替代品,使得命令行的 diff 操作具有类似 GitHub 的页面效果。
安装后,参考官方文档,将它配置为 Git 的默认 diff 工具就可以了。以后每次执行git diff
,就会输出它的执行结果。
同类项目还有 delta[10]。
六、fd,fzf
fd[11] 是find
命令的替代品,用于文件名搜索。
它的用法比find
更符合直觉。下面例子是搜索目录/tmp
里面(包括子目录),所有含有dog
的文件名。
# find 的写法
$ find /tmp -iname '*dog*'
# fd 的写法
$ fd dog /tmp
上面两条命令一比较,就会发现fd
简单很多。
fd
内部采用正则搜索,如果想使用模糊搜索,比如找出包含三个字符d
、o
、g
的文件名,则需要另外安装fzf[12]。
$ find . -type f | fzf
执行上面命令以后,再输入dog
就可以了。
七、ripgrep
ripgrep[13] 是grep
命令的替代品,用来搜索文件内容。
它跟grep
的用法类似。下面例子是搜索当前目录里面,所有内容包含字符串foo
的 Markdown 文件。
# grep 的写法
$ grep foo *.md
# ripgrep 的写法
$ rg foo *.md
ripgrep
的主要优势在于,默认带有行号和搜索词高亮,速度也更快。
同类项目还有 ag[14]。
八、McFly
McFly[15] 是ctrl-r
的替代品,用来搜索 Shell 的操作历史。
安装以后,只要按下ctrl-r
,就会出现一个更好用的搜索界面。
九、choose
choose[16] 是cut
命令的替代品,用来选中指定的栏位。
它的优势主要是语法更简单,比如输出文件的第一列。
# cut 的写法
$ cat data.txt | cut -d " " -f 1
# or
$ cut -d " " -f 1 data.txt
# choose 的写法
$ cat data.txt | choose 0
# or
$ choose 0 -i data.txt
更多例子看下图。
十、duf,ncdu
duf[17] 是df
命令的替代品,用来显示磁盘占用情况。
$ duf
它是彩色的表格输出,更容易查看。
ncdu[18] 是du
命令的替代品,用来显示每个目录占用的大小。
$ ncdu
你还可以上下移动,选中指定目录查看。
同类项目还有 dust[19]。
十一、htop,procs
htop[20] 是 top
命令的替代品,用来显示系统的实时状态。它带有高亮输出,并可以切换不同的选项卡。
$ htop
同类项目还有 glances[21]、gtop[22]、bottom[23]。
procs[24] 是ps
命令的替代品,用来高亮显示进程信息。
$ procs
十二、httpie,dog
httpie[25] 是 curl 的替代品,用来发出 HTTP 请求。
它的特点是语法更简单,并且服务器的返回内容会格式化高亮显示。
下面是发出 PUT 请求的例子。
# curl 的写法
$ curl -X PUT -d hello=world example.com
# httpie 的写法
$ http PUT example.com hello=world
同类项目还有 curlie[26]、xh[27]。
dog[28] 是dig
命令的替代品,用来发出 DNS 查询。它的用法比dig
简单多了。
# 默认查询 A 记录
$ dog example.net
# 查询多个记录
$ dog example.net A NS MX
(完)
References
[1]
exa: https://github.com/ogham/exa[2]
lsd: https://github.com/Peltoche/lsd[3]
broot: https://github.com/Canop/broot[4]
zoxide: https://github.com/ajeetdsouza/zoxide[5]
bat: https://github.com/sharkdp/bat[6]
fx: https://github.com/antonmedv/fx[7]
jq: https://github.com/stedolan/jq[8]
hexyl: https://github.com/sharkdp/hexyl[9]
diff-so-fancy: https://github.com/so-fancy/diff-so-fancy[10]
delta: https://github.com/dandavison/delta[11]
fd: https://github.com/sharkdp/fd[12]
fzf: https://github.com/junegunn/fzf[13]
ripgrep: https://github.com/BurntSushi/ripgrep[14]
ag: https://github.com/ggreer/the_silver_searcher[15]
McFly: https://github.com/cantino/mcfly[16]
choose: https://github.com/theryangeary/choose[17]
duf: https://github.com/muesli/duf[18]
ncdu: https://dev.yorhel.nl/ncdu[19]
dust: https://github.com/bootandy/dust[20]
htop: https://github.com/htop-dev/htop[21]
glances: https://github.com/nicolargo/glances[22]
gtop: https://github.com/aksakalli/gtop[23]
bottom: https://github.com/ClementTsang/bottom[24]
procs: https://github.com/dalance/procs[25]
httpie: https://github.com/httpie/httpie[26]
curlie: https://github.com/rs/curlie[27]
xh: https://github.com/ducaale/xh[28]
dog: https://dns.lookup.dog/