命令行常用工具的替代品

作者: 阮一峰

日期: 2022年1月28日

程序员离不开命令行,许多经典命令是每天必用的,比如lscd

虽然它们很好用,但是由于历史原因,往往也有一些缺点,比如用法不符合直觉、难以配置,有些速度也不快。

这些年,它们的替代品开始出现,而且越来越多,大家开始尝试使用现代语言,重新实现这些经典命令。本文总结一下这些替代品,其中有些真的很不错,值得你在自己的计算机上安装。

一、exa

exals命令的替代品,可以彩色输出目录内容,更容易辨识。


$ exa --long --git

上面命令中,参数--git表示输出文件的 Git 状态。

  • N:新文件
  • M:文件有变动
  • I:该文件被忽略

除了平铺显示,exa还支持目录的树状显示。


$ exa --tree --level=2

exa本身是一个二进制文件,不需要安装,下载后直接使用,速度也相当快。

同类软件还有 lsd,这里就不详细介绍了。

二、broot

broot 可以看作增强版的ls替代品,实际是一个终端里面的文件管理器。

使用时,可以先列出当前目录的文件信息。


$ br -sdph

上面命令中,参数含义如下。

  • -s:显示文件体积
  • -d:显示文件时间
  • -p:显示文件权限
  • -h:显示隐藏文件。

可以看到,它默认以树状结构,展开子目录。

然后,在这个界面中,可以完成各种文件操作。

  • 搜索:输入搜索词
  • 复制:输入:cp <复制后的文件名>
  • 删除:输入:rm
  • 改名:输入:mv <新文件名>
  • 退出:输入:q

甚至还可以预览文件:通过上下箭头选中文件,然后按下右箭头,就会打开外部关联程序;按下ctrl + →,则在当前窗口预览文件。

三、zoxide

zoxide 是 cd 命令的替代品,用来切换目录。

它的用法与cd完全一样,进入目录/tmp就是下面的命令。


$ z /tmp

它的特色是部分匹配,可以只写路径的一部分,它自动找到最经常使用的匹配项。

比如,你经常用它进入目录/tmp,那么以后只要输入z t,它就会自动将t匹配为/tmp,从而进入该目录。


$ z t

四、bat,fx,hexyl

batcat命令的替代品,输出文本文件的内容,并且带有cat所没有的代码高亮和行号。


$ bat README.md

如果浏览的是 JSON 文件,还可以使用 fx 或者 jq


$ fx data.json

如果浏览的是二进制文件,使用 hexyl


$ hexyl example.jpg

五、diff-so-fancy

diff-so-fancy 是 git diff 的替代品,使得命令行的 diff 操作具有类似 GitHub 的页面效果。

安装后,参考官方文档,将它配置为 Git 的默认 diff 工具就可以了。以后每次执行git diff,就会输出它的执行结果。

同类项目还有 delta

六、fd,fzf

fdfind命令的替代品,用于文件名搜索。

它的用法比find更符合直觉。下面例子是搜索目录/tmp里面(包括子目录),所有含有dog的文件名。


# find 的写法
$ find /tmp -iname '*dog*'

# fd 的写法
$ fd dog /tmp

上面两条命令一比较,就会发现fd简单很多。

fd内部采用正则搜索,如果想使用模糊搜索,比如找出包含三个字符dog的文件名,则需要另外安装fzf


$ find . -type f | fzf

执行上面命令以后,再输入dog就可以了。

七、ripgrep

ripgrepgrep命令的替代品,用来搜索文件内容。

它跟grep的用法类似。下面例子是搜索当前目录里面,所有内容包含字符串foo的 Markdown 文件。


# grep 的写法
$ grep foo *.md

# ripgrep 的写法
$ rg foo *.md

ripgrep的主要优势在于,默认带有行号和搜索词高亮,速度也更快。

同类项目还有 ag

八、McFly

McFlyctrl-r的替代品,用来搜索 Shell 的操作历史。

安装以后,只要按下ctrl-r,就会出现一个更好用的搜索界面。

九、choose

choosecut命令的替代品,用来选中指定的栏位。

它的优势主要是语法更简单,比如输出文件的第一列。


# 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

dufdf命令的替代品,用来显示磁盘占用情况。


$ duf

它是彩色的表格输出,更容易查看。

ncdudu命令的替代品,用来显示每个目录占用的大小。


$ ncdu

你还可以上下移动,选中指定目录查看。

同类项目还有 dust

十一、htop,procs

htoptop命令的替代品,用来显示系统的实时状态。它带有高亮输出,并可以切换不同的选项卡。


$ htop

同类项目还有 glancesgtopbottom

procsps命令的替代品,用来高亮显示进程信息。


$ procs

十二、httpie,dog

httpie 是 curl 的替代品,用来发出 HTTP 请求。

它的特点是语法更简单,并且服务器的返回内容会格式化高亮显示。

下面是发出 PUT 请求的例子。


# curl 的写法
$ curl -X PUT -d hello=world example.com

# httpie 的写法
$ http PUT example.com hello=world 

同类项目还有 curliexh

dogdig命令的替代品,用来发出 DNS 查询。它的用法比dig简单多了。


# 默认查询 A 记录
$ dog example.net

# 查询多个记录
$ dog example.net A NS MX

(完)

留言(34条)

比起htop我觉得btop更加适合代替top

高质量的内容,但是周刊没有了吗?

这些要是集成在一个统一终端,会有点用,这样我远程访问时能在不同的机器上都使用这些功能。

Rust 是要把所有 C 的工具都重新实现一遍吗,哈哈

不知道我为什么发不出去评论,是因为填了个人网址吗?去掉试试。然后,周刊是没了吗?

虽然周刊停一周,但还是更新了!

有点奇技淫巧,还是得先把基本功用好了再说

经常登录各种机器, 很难把常用的工具装到每一台机器上,所以目前只用一些所有机器自带的工具

这些命令怎么安装?

htop还不错,一直在用

感谢每周优质的内容分享。
`diff-so-fancy`拯救了我的双眼。

https://github.com/ibraheemdev/modern-unix

我猜阮老师应该是参考了这个库 ? 能提一下就更好了。

这几天刚好折腾了一下,ubuntu 上可以通过 linuxbrew 一键全部安装:

https://docs.brew.sh/Homebrew-on-Linux

brew install \
bat \
bottom \
broot \
btop \
choose-rust \
dog \
duf \
exa \
fd \
fzf \
git-delta \
glances \
gtop \
httpie \
jq \
lsd \
mcfly \
orf/brew/gping \
procs \
ripgrep \
rs/tap/curlie \
the_silver_searcher \
tldr \
xh \
zoxide

引用andy的发言:

经常登录各种机器, 很难把常用的工具装到每一台机器上,所以目前只用一些所有机器自带的工具

伟大的想法总是不谋而合

本地的mac装这些工具的确可以提高个人工作效率,但问题是一旦你习惯了这些命令,但远程服务器上出于各种理由无法安装,那你岂不是『由奢入俭难』?或者你要记忆两套命令?

我现在本地装了个jq,配合curl使用效果很好。但如果ssh到server上去,一下子就失落了...

阮老师太厉害了,虽然知道春节周刊会停更一天,但周五还是习惯性点进来,没想到今天竟然还有小惊喜。
敬佩,这种精神我但凡有十之一二就好了。

没有周刊好烦

确实经常需要登录各种服务器操作,是最大的阻碍。

引用karl的发言:

本地的mac装这些工具的确可以提高个人工作效率,但问题是一旦你习惯了这些命令,但远程服务器上出于各种理由无法安装,那你岂不是『由奢入俭难』?或者你要记忆两套命令?

我现在本地装了个jq,配合curl使用效果很好。但如果ssh到server上去,一下子就失落了...

费点事和脑子里装一堆垃圾来选的话,我选择费点事。

阮老师什么时候出一期rust的教程文档,我读了官方文档,官方文档里的api还是比较多的
这是我参考官方文档大概写的https://wuhaohao1234.github.io/posts/rust%E5%B0%8F%E4%B9%A6,但是没有写完
阮老师以前写过一期c语言的,期待rust

异教徒表示对命令行毫无兴趣,都是直接用VSCODE远程上去像win一样操作文件的,需要执行其他命令的时候直接用VSCODE的控制台

如果会lisp,emacs也可以用来当文件管理器

阮老师新年快乐

htop 基本够用了,Ubuntu 现在也都默认会安装了。

ls cd 记得滚瓜烂熟,随手就是cd.. ls

引用SevDot的发言:

高质量的内容,但是周刊没有了吗?

上周就是说了,这周开始休刊了,要等年后了

这东西 说白了,不就是装个字体,改个颜色吗?
为何用rust。用c也能干啊。

很多都听说过。但我一个都不会尝试。
终端我还是喜欢 old school.

以后找工作,会不会还要考这些?

高质量内容,希望下次能出个专栏来推荐工具方面的,哈哈????

还想靠着周刊摸鱼呢

期待阮老师的rust教程????

期待阮老师 能出 Rust 教程,最近在学习 Rust

htop 已经 deprecated 了, 建议使用 btop 和 glances

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接