程序员离不开命令行,许多经典命令是每天必用的,比如ls
和cd
。
虽然它们很好用,但是由于历史原因,往往也有一些缺点,比如用法不符合直觉、难以配置,有些速度也不快。
这些年,它们的替代品开始出现,而且越来越多,大家开始尝试使用现代语言,重新实现这些经典命令。本文总结一下这些替代品,其中有些真的很不错,值得你在自己的计算机上安装。
一、exa
exa 是ls
命令的替代品,可以彩色输出目录内容,更容易辨识。
$ 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
bat 是cat
命令的替代品,输出文本文件的内容,并且带有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
fd 是find
命令的替代品,用于文件名搜索。
它的用法比find
更符合直觉。下面例子是搜索目录/tmp
里面(包括子目录),所有含有dog
的文件名。
# find 的写法 $ find /tmp -iname '*dog*' # fd 的写法 $ fd dog /tmp
上面两条命令一比较,就会发现fd
简单很多。
fd
内部采用正则搜索,如果想使用模糊搜索,比如找出包含三个字符d
、o
、g
的文件名,则需要另外安装fzf。
$ find . -type f | fzf
执行上面命令以后,再输入dog
就可以了。
七、ripgrep
ripgrep 是grep
命令的替代品,用来搜索文件内容。
它跟grep
的用法类似。下面例子是搜索当前目录里面,所有内容包含字符串foo
的 Markdown 文件。
# grep 的写法 $ grep foo *.md # ripgrep 的写法 $ rg foo *.md
ripgrep
的主要优势在于,默认带有行号和搜索词高亮,速度也更快。
同类项目还有 ag。
八、McFly
McFly 是ctrl-r
的替代品,用来搜索 Shell 的操作历史。
安装以后,只要按下ctrl-r
,就会出现一个更好用的搜索界面。
九、choose
choose 是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 是df
命令的替代品,用来显示磁盘占用情况。
$ duf
它是彩色的表格输出,更容易查看。
ncdu 是du
命令的替代品,用来显示每个目录占用的大小。
$ ncdu
你还可以上下移动,选中指定目录查看。
同类项目还有 dust。
十一、htop,procs
htop 是 top
命令的替代品,用来显示系统的实时状态。它带有高亮输出,并可以切换不同的选项卡。
$ htop
procs 是ps
命令的替代品,用来高亮显示进程信息。
$ procs
十二、httpie,dog
httpie 是 curl 的替代品,用来发出 HTTP 请求。
它的特点是语法更简单,并且服务器的返回内容会格式化高亮显示。
下面是发出 PUT 请求的例子。
# curl 的写法 $ curl -X PUT -d hello=world example.com # httpie 的写法 $ http PUT example.com hello=world
dog 是dig
命令的替代品,用来发出 DNS 查询。它的用法比dig
简单多了。
# 默认查询 A 记录 $ dog example.net # 查询多个记录 $ dog example.net A NS MX
(完)
tbxark 说:
比起htop我觉得btop更加适合代替top
2022年1月28日 09:20 | # | 引用
SevDot 说:
高质量的内容,但是周刊没有了吗?
2022年1月28日 09:29 | # | 引用
harris 说:
这些要是集成在一个统一终端,会有点用,这样我远程访问时能在不同的机器上都使用这些功能。
2022年1月28日 09:31 | # | 引用
lrtg 说:
Rust 是要把所有 C 的工具都重新实现一遍吗,哈哈
2022年1月28日 09:52 | # | 引用
bigma 说:
不知道我为什么发不出去评论,是因为填了个人网址吗?去掉试试。然后,周刊是没了吗?
2022年1月28日 10:01 | # | 引用
胡 说:
虽然周刊停一周,但还是更新了!
2022年1月28日 10:02 | # | 引用
肥月饼 说:
有点奇技淫巧,还是得先把基本功用好了再说
2022年1月28日 10:09 | # | 引用
andy 说:
经常登录各种机器, 很难把常用的工具装到每一台机器上,所以目前只用一些所有机器自带的工具
2022年1月28日 10:15 | # | 引用
我的世界有我 说:
这些命令怎么安装?
2022年1月28日 11:21 | # | 引用
note 说:
htop还不错,一直在用
2022年1月28日 12:01 | # | 引用
Jianhui 说:
感谢每周优质的内容分享。
`diff-so-fancy`拯救了我的双眼。
2022年1月28日 14:59 | # | 引用
guoqiao 说:
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
2022年1月28日 15:23 | # | 引用
a 说:
伟大的想法总是不谋而合
2022年1月28日 15:49 | # | 引用
karl 说:
本地的mac装这些工具的确可以提高个人工作效率,但问题是一旦你习惯了这些命令,但远程服务器上出于各种理由无法安装,那你岂不是『由奢入俭难』?或者你要记忆两套命令?
我现在本地装了个jq,配合curl使用效果很好。但如果ssh到server上去,一下子就失落了...
2022年1月28日 16:29 | # | 引用
test 说:
毛遂自荐下
https://github.com/twfb/py-recycle
2022年1月28日 16:50 | # | 引用
Larry 说:
阮老师太厉害了,虽然知道春节周刊会停更一天,但周五还是习惯性点进来,没想到今天竟然还有小惊喜。
敬佩,这种精神我但凡有十之一二就好了。
2022年1月28日 17:30 | # | 引用
Logic 说:
没有周刊好烦
2022年1月28日 18:35 | # | 引用
Donne 说:
确实经常需要登录各种服务器操作,是最大的阻碍。
2022年1月28日 20:31 | # | 引用
低端程序员 说:
费点事和脑子里装一堆垃圾来选的话,我选择费点事。
2022年1月28日 22:22 | # | 引用
吴昊昊 说:
阮老师什么时候出一期rust的教程文档,我读了官方文档,官方文档里的api还是比较多的
这是我参考官方文档大概写的https://wuhaohao1234.github.io/posts/rust%E5%B0%8F%E4%B9%A6,但是没有写完
阮老师以前写过一期c语言的,期待rust
2022年1月29日 01:09 | # | 引用
Jeff 说:
异教徒表示对命令行毫无兴趣,都是直接用VSCODE远程上去像win一样操作文件的,需要执行其他命令的时候直接用VSCODE的控制台
2022年1月29日 01:26 | # | 引用
www 说:
如果会lisp,emacs也可以用来当文件管理器
2022年1月29日 11:23 | # | 引用
小枫 说:
2022年1月29日 14:08 | # | 引用
S. G. 说:
htop 基本够用了,Ubuntu 现在也都默认会安装了。
2022年1月29日 16:15 | # | 引用
阿锋 说:
ls cd 记得滚瓜烂熟,随手就是cd.. ls
2022年1月29日 22:10 | # | 引用
Nutcracker 说:
上周就是说了,这周开始休刊了,要等年后了
2022年1月30日 16:28 | # | 引用
daminggege 说:
这东西 说白了,不就是装个字体,改个颜色吗?
为何用rust。用c也能干啊。
2022年2月 3日 13:17 | # | 引用
z 说:
很多都听说过。但我一个都不会尝试。
终端我还是喜欢 old school.
2022年2月 5日 22:01 | # | 引用
边宏飞 说:
以后找工作,会不会还要考这些?
2022年2月 7日 16:41 | # | 引用
btstam 说:
高质量内容,希望下次能出个专栏来推荐工具方面的,哈哈????
2022年2月10日 16:36 | # | 引用
this li 说:
2022年2月10日 17:26 | # | 引用
Dash 说:
期待阮老师的rust教程????
2022年2月16日 18:31 | # | 引用
贾森 说:
期待阮老师 能出 Rust 教程,最近在学习 Rust
2023年1月11日 18:07 | # | 引用