现代化 Shell 使用指南

Shell 作为一个历史悠久的效率工具,它提供了很多方便的工具,提高我们操作计算机的效率。然而被现代各种便利操作熏陶了的我们,可能对一些默认的命令的效率并不满意了。那么如何更好的利用好 Shell 呢?

tl;dr: 一些很好用的命令列表:

  • tldr: 查询一个命令的常用用法
  • z: 快速目录跳转
  • fzf: 文件模糊搜索
  • ag:代码快速搜索
  • fuck: 自动纠正错误命令
  • httpie: 更好用的 HTTP 请求工具
  • htop: top 的升级版

本文只挑选了几个好用的工具来介绍,主要想表达的是现在有很多很好用的 shell 工具,它们比之前的古老版本有不少优势和进步,当你觉得你的某些操作效率不高时,可以考虑去了解一下有没有好的替代方案/工具,察觉自己的低效操作并想办法改进总是应该的。

这里有一些好用的命令可以参考:

tldr - 命令备忘

Linux 下有如此多的命令,有时我们会忘记某个命令的常用方法。这时我们通常会通过 man 或者 Google 来查询命令的用法,但这些结果通常并不简洁明了,我们可能需要花费一些时间来找到我们想要的用法。

tldr 就是为了这种场景而生的,它会很简洁的介绍一个命令,并列出它最常用的一些用法。根据二八法则原理,你很少会用到一些命令的高级用法,常用用法已经可以满足你的需求。你可能经常在某些地方看到「tl;dr」这个缩写,它的意思是“Too long, didn’t read”,意思是就是“文章太长不想看?只看这里就行了”。

首先在 mac 下通过 brew 安装 tldr

1
2
3
4
5
# 安装 tldr
brew install tldr

# 更新 tldr 的数据
tldr --update

使用 tldr

1
2
# 查询 find 的常用用法
tldr find

结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
find

Find files under the given directory tree, recursively.

- Find files by extension:
find root_path -name '*.ext'

- Find files matching path pattern:
find root_path -path '**/lib/**/*.ext'

- Run a command for each file, use {} within the command to access the filename:
find root_path -name '*.ext' -exec wc -l {} \;

- Find files modified in the last 24-hour period:
find root_path -mtime -1

- Find files using case insensitive name matching, of a certain size:
find root_path -size +500k -size -10MB -iname '*.TaR.gZ'

- Delete files by name, older than 180 days:
find root_path -name '*.ext' -mtime +180 -delete

- Find files matching more than one search criteria:
find root_path -name '*.py' -or -name '*.r'

- Find files matching a given pattern, while excluding specific paths:
find root_path -name '*.py' -not -path '*/site-packages/*'

是不是比 man 的结果好用多了。

z - 便捷目录跳转

每次跳到常用目录,要输入很长的路径?需要在两个/多个目录来回切换?cd 不够好用,pushd/popd/dirs 在一定程度上解决了这个问题,通过将一些目录压到栈中来来回跳转,但还是不够智能。

在这个智能时代,需要一些命令让跳转更加随心所欲,于是一些更加智能的命令被开发出来了。新的命令的主要思路就是,记住你常用的目录,然后等你跳转了一定时间后,就可以用很短的名称(前缀)跳转到常去目录了。

这类工具中比较有名的有 autojumpzfasd。它们的功能都是类似的,不过整体来说 fasd 功能最强大,不仅支持快速跳转目录,也支持快速打开文件;z 和 autojump 功能基本相同,z 的性能会好一些。我目前主要使用 z

安装 z:

1
brew install z

~/.bash_profile 中增加配置:

1
2
# z enabled
[ -f /usr/local/etc/profile.d/z.sh ] && . /usr/local/etc/profile.d/z.sh

这里有一段这些工具的比较:

这类工具中最早的应该是大名鼎鼎的autojump,因为它的快捷命令是j,所以大家也都习惯性地称其为j。autojump使用Python编写,对于Bash和Shell的支持都比较好。但是可能是因为是Python写的吧,有的时候会感觉反应有些慢。

有了j之后,又有了z。z的介绍就是”更好的j”。它的功能和j基本是相同的,不过它使用Shell脚本编写,更加简洁,基本上不会拖慢终端的响应速度。我比较喜欢简洁的,现在看来Github上大部分人也是, z得到了3000+的star,超越了它的前辈autojump。

然后人们还不满足,于是又有了大杀器Fasd,Fasd不光会记录目录,还会记录文件,也就是说它可以做到快捷打开某个深层目录的文件。Fasd还可以通过配置,实现更加高级的功能。Fasd与Zsh的结合也非常好,可以使用tab灵活的在几个目录中选择。可能是由于Fasd太强大了,虽然它使用Shell脚本写的,但是在使用的时候还是会感觉拖慢了终端的速度,特别是在执行ls -l的时候,会感觉输出明显慢了一拍。

—— https://skyline75489.github.io/post/2014-12-13_j-z-and-fasd.html

fzf - 快速模糊搜索

fzf 是一个很高效的 fuzzy finder,它提供模糊搜索文件夹/文件的功能。

首先在 mac 下通过 brew 安装 fzf

1
2
3
4
5
# 安装 fzf
brew install fzf

# 安装完成 fzf 后,安装 shell 的快捷键支持
/usr/local/opt/fzf/install

主要使用场景:

  • 查找文件:直接输入 fzf,或者使用快捷键 <ctrl-t> 呼出 fzf。使用快捷键调出的时候,前面可以有已经输入的命令,比如 cat <ctrl-t>。在 fzf 中输入关键字进行模糊搜索,使用 <ctrl-p>/<ctrl-n> 来上下选择结果。
  • 查找命令历史:安装 shell 的快捷键支持后,fzf 替换了系统默认的命令搜索 <ctrl-r>,呼出快捷键不变,使用起来更加好用了。
  • 命令后参数补全:命令参数中使用 **<TAB> 来触发补全,触发的场景可以参考这里

ag - 代码搜索

ag 用来在文件中搜索关键字,是一个类似于 grep、ack 的命令。它的优点有:

  • 比 ack 还要快,这里有一篇效率对比的文章
  • 可以忽略 .gitignore 中的文件
  • 命名更短,短就是效率…

安装 ag:

1
brew install the_silver_searcher

使用方法和 grep 类似,可以用 tldr ag 了解下常用方法:

1
2
3
4
5
6
7
8
# Find files containing "foo", and print the line matches in context:
ag foo

# Find files containing "foo", but only list the filenames:
ag -l foo

# Find files with a name matching "foo":
ag -g foo

fuck - 命令纠错

有时候我们会输错一些命令,比如 git brnch,这时只需要一个简单的命令 fuck,它会根据它预设的模式给出可能的正确命令,用起来就是这么简单粗暴。

安装 thefuck:

1
brew install thefuck

~/.bash_profile 中增加配置:

1
eval $(thefuck --alias)

httpie - 友好的 HTTP 请求工具

httpie 是一个对人类友好的 HTTP 请求模拟器,它的命令参数符合直觉,结果显示的也更清晰。curl 的参数就没那么容易记忆了,总是需要去查手册。

安装 httpie:

1
brew install httpie

一些基本的用法:

1
2
3
4
5
6
7
8
9
10
11
# GET 访问某页面
http example.org

# 查看具体的请求头
http -v example.org

# 带 query string 的请求
http www.google.com search=='HTTPie logo' tbm==isch

# 修改请求头
http example.org User-Agent:Bacon/1.0 'Cookie:valued-visitor=yes;foo=bar' X-Foo:Bar

htop - 更直观的系统状态

htop 可以查看当前系统状态,可以当做是 top 的一个增强版本。它的界面更加直观并且支持鼠标操作,用一下你就知道好在哪里了。

安装 htop:

1
brew install htop

glances 又是 htop 的一个升级版,它提供更加详细的信息,并且是 C/S 结构的,也就是说你可以监控其他机器的状态。

作者

KK

发布于

2017-04-23

更新于

2022-06-11

许可协议

评论