5 个相见恨晚的 Linux 命令 - 终端之美

5 个相见恨晚的 Linux 命令 - 终端之美

十一月 28, 2017

tldr(命令手册)

作为一个开发人员,会时常用到终端命令,最让人头疼的是记不住繁琐的参数。用谷哥度娘检索效率低下;通过man查看帮助,超长文章不易阅读。

tldr命令正是解决这一痛点,tldr是什么?从它的 GitHub 页翻译说“一个简洁的社区驱动的帮助手册”,这是对它最好的解释,根据二八原则给出命令的常用场景示例,简单易读;存放在 Github 上的命令库接受来自五湖四海的朋友提交的内容,社区驱动。

man命令有更详细的说明,单从实用角度讲,tldr才是王者。

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
fechinwork in ~/Desktop at 11:57:57 λ tldr tar
tar
Archiving utility.
Often combined with a compression method, such as gzip or bzip.
- Create an archive from files:
tar cf target.tar file1 file2 file3
- Create a gzipped archive:
tar czf target.tar.gz file1 file2 file3
- Extract an archive in a target folder:
tar xf source.tar -C folder
- Extract a gzipped archive in the current directory:
tar xzf source.tar.gz
- Extract a bzipped archive in the current directory:
tar xjf source.tar.bz2
- Create a compressed archive, using archive suffix to determine the compression program:
tar caf target.tar.xz file1 file2 file3
- List the contents of a tar file:
tar tvf source.tar

小提示:支持在进 20 中语言环境下运行,通过tldr --update更新本地命令库。

tree(树形目录)

当我们编写项目文档,想更直观的表达项目结构及内容的时候,这个小小的命令就可以派上用场了,它以类似于图像的树状图排列目录和文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
fechinwork in ~/work/script/nginx2mysql at 12:43:10 λ tree -L 2
.
├── README.md
├── config.yml
├── libs
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── nginx_log_parser.py
│ ├── nginx_log_parser.pyc
│ ├── simplemysql.py
│ └── simplemysql.pyc
├── logs
│ └── cdn-2016-06-04.log
├── parser.py
└── requirements.txt
2 directories, 11 files

小提示:支持定制层级,过滤内容等各种个性化设置。通过tldr tree查看具体使用示例。添加-N参数解决中文乱码问题。

rlwrap(历史命令)

经常使用命令的同学一定有习惯,通过上下按键切换历史命令,但是让人头疼的是telnet命令不支持切换,甚至是退格删除,所以时常遇到如下尴尬场面。莫急,rlwrap便是用来解决这一痛点的。

通过telnet执行 Dubbo 接口:

1
2
3
> telnet 192.168.1.147 23457
> invoke com.yinyuetai.yuan.user.api.UserService.get(1) > ^[[A^[[A^[[A^[[B^[[B
# 好尴尬~

通过telnet连接 memcached 服务器:

1
2
> telnet 192.168.1.36 11211 > ^[[A^[[A^[[A^[[B^[[B
# 好尴尬~

什么是rlwrap?它是基于 readline 库,实现命令行补全和记录的包装命令。如今交互式输入是最基本的需求,Linux 正是通过 readline 这个库来记录用户的操作,实现交互式输入、自动补全、搜索等功能。对于没有支持 readline 操作的命令,rlwrap就是最好的伙伴了。

用法:在执行telnet命令前加上 rlwrap 命令即可。

1
2
3
4
5
6
7
8
9
10
11
12
fechinwork in ~/Documents at 14:43:15 λ
fechinwork in ~/Documents at 14:43:41 λ rlwrap telnet 127.0.0.1 6379
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set product alpha
+OK
get prod
$-1
get product
$5
alpha

小提示:除了telnet还有 Oracle 系列命令需要支持 rlwrap 包装装sqlplusrmanasmcmd
快捷别名:alias telnet='rlwrap telnet'

script(记录会话输出)

很多时候,为了安全和备份,需要对工作内容进行保存。那么,script命令就是隐藏在终端的记录器,它可以记录终端会话的所有内容,形成文件。对于需要工作留痕的同学来说,script便是良药。
如何使用,用script启动它,此时它已经开始记录。完事后用exit退出记录,默认生成了一个叫“typescript”的文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
fechinwork in ~ at 13:34:04 λ script
Script started, output file is typescript
fechinwork in ~ at 13:34:07 λ echo '导演,开始了吗?'
导演,开始了吗?
fechinwork in ~ at 13:34:27 λ echo '你退出自己看咯,略略~'
你退出自己看咯,略略~
fechinwork in ~ at 13:34:48 λ exit
Script done, output file is typescript
fechinwork in ~ at 13:34:51 λ cat typescript
Script started on Sat Oct 21 13:34:06 2017
fechinwork in ~ at 13:34:07 λ echo '导演,开始了吗?'
导演,开始了吗?
fechinwork in ~ at 13:34:27 λ echo '你退出自己看咯,略略~'
你退出自己看咯,略略~
fechinwork in ~ at 13:34:48 λ exit
Script done on Sat Oct 21 13:34:51 2017

小提示:script可以在什么场景下使用呢?
1、我需要把大批量视频推送到 CDN,耗时一晚上,这时通过script记录执行的日志,第二天对没有推送成功的做单独处理。
2、别人远程你的服务器或电脑,安全起见script一下。
3、与同事协同工作时,自己工作做了一半,交给另一个人来做,此时发给它你的script,让它接着干。
……

autojump(一键直达)

最后一个压轴神器,也是我用的最多的命令之一。

相信多数终端用户使用频率最高的命令是cdls, 在我不知道切换到哪里的时候不得不ls确认目录名,如此反复,到达想去的目录可能要经历几次甚至十次以上的 cd,经历了多少风雨才找到我的文件。俗话说“不会偷懒的程序员不是好程序员”,如此饱受挫折那是我们的风格,于是有了 autojump 的诞生,它注定不凡。
顾名思义,autojump,自动跳转,而不是切换,因为它可以做到一键直达。

1
2
3
4
5
6
7
8
9
fechinwork in ~/work/script/xls2sql at 14:27:24 λ j Des
/Users/fechinwork/Desktop
fechinwork in ~/Desktop at 14:27:27 λ pwd
/Users/fechinwork/Desktop
fechinwork in ~/Desktop at 14:27:31 λ j Docu
/Users/fechinwork/Documents
fechinwork in ~/Documents at 14:27:41 λ pwd
/Users/fechinwork/Documents
fechinwork in ~/Documents at 14:27:44 λ

小提示:可以通过j -s命令查看它的数据库,以及数据库中的目录权重。


文章发布在:iCourt 技术团队公众号