目录
背景介绍
总结记录几个shell小工具,都是很常用且很好用的东西.
- expect : 实现人机交互的一个命令行工具
- ccat : linux 下上色版本的cat
- htop : 上色增强版本的top
- 软连接
- z: 快速的cd
- iotop: 查看服务器IO.
- jq: 命令行格式化json.
最终实现了,高效的登录至服务器,不用输入密码.以及使用ccat查看源码,使用htop观察机器内存等信息.
Expect
介绍
Expect是Unix系统中用来进行自动化控制和测试的软件工具,由Don Libes制作.
通俗的讲,就是允许你在脚本里设定一些”原本要手动输入”的东西.
安装
mac OS: brew install expect
几个重要的命令
- send:向进程发送字符串,用于模拟用户的输入。注意一定要加\r回车
- expect:从进程接收字符串
- spawn:启动进程(由spawn启动的进程的输出可以被expect所捕获)
- interact:用户交互
Demo
1 | !/usr/local/bin/expect |
这是实现的一个expect的简单应用.实现了自动登录跳板机并选择机器进行登入.具体解释一下.
- 第一行注释,说明此文件使用expect解释器
- 第二行设置一个变量,
server=输入的第一个参数
- 第三行设置一个变量,
passwd=密码
- 第四行新起了一个进程来执行
ssh jump
命令, - expect命令匹配到
Enter passphrase
时输入密码. - 匹配到
welcome*
时输入server
. - 交给用户来交互
<a href=”http://xstarcd.github.io/wiki/shell/expect.html" 很不错的expect教程 中有多个常用的expect的示例.可以参考.
ccat
安装
brew install ccat
效果
输出一个java文件
htop
安装
brew install htop
常用功能键
1 | F1 : 查看htop使用说明 |
效果
在这个界面,可以使用f3
搜索,f4
过滤,具体操作
linux设置软连接
经过上面的第一个步骤,我们有了一个jump
的脚本,但是每次都要去执行脚本也是一件非常麻烦的事情.
我们希望可以像使用mysql
等等命令那样在全局都可以.
这里有两种实现方式:
软连接
在/usr/local/bin
目录下设置一个目标脚本的软连接即可.
1 | ln -s ~/jump /usr/local/bin/jump |
使用zsh的全局别名
在/.zshrc文件中加入`alias=”/jump”`即可.
Z
这个名字真的是简洁.
这是一个快速管理你的cd命令的脚本.github仓库
基本实现就是:
你安装了z,之后你的cd会被记录到.z文件,然后当你想切换目录的时候,只需要z xx + tab
即可. xx是你想去的目录的部分名字即可,z使用正则表达式来匹配,所以只要你输入的xx
足够不重复
,基本是无敌精准的.
安装
使用zsh的朋友,打开~/.zshrc
,将其中的plugins={git}
添加z,变成plugins={git z}
,然后执行source ~/.zshrc
即可.
使用bash的朋友, 可以首先创建一个目录,然后克隆仓库,之后将source命令加入.bashrc即可.如下放的命令:
1 | mkdir ~/code |
使用
先瞎cd几下.然后z
:
iotop
查看磁盘IO的工具.
在ubuntu环境下:
1 | wget http://guichaz.free.fr/iotop/files/iotop-0.6.tar.bz2 |
之后执行./iotop.py
即可.
如果嫌麻烦,可以设置软连接即可全局使用啦.
1 | 仅显示实际在做io的进程 |
jq
作为后端开发,经常要接触到一些json格式的数据,想要肉眼可读需要将其格式化,一般情况下我都是用在线的格式化工具,比如 json在线格式化,越来越觉得有点麻烦,且有时候在服务器上,还要copy下来,贼麻烦.就找到一个命令行工具来做.
这就是jq,在mac上使用brew安装,brew install jq
即可.在其他linux上需要自己找一个安装方式.
安装完成之后, 使用-h参数来了解他都可以干什么?
或者可以使用man jq
来查看.
我们使用{"name":"huyan", "url":"http://huyan.couplecoders.tech/", "age":18}
来测试一下:
图中我们简单的操作了一下,可以将输入字符串进行格式化,获取其中某个键的值,获取全部的键.等等.
其实jq
的功能远比这个强大,它支持管道,过滤,切片,数组操作等等,但是对我个人来说,学习那些的成本高于我获得的收益,因为我只需要格式化和获取某个键的值就基本够用了.所以这里不再展开讲详细的高阶操作.需要进一步深入学习的朋友google或者在参考文章处有一篇不错的教程.
这样使用,每次都要echo
,太麻烦了,所以我们写一个小脚本,如下所示
1 | !/bin/bash |
然后将此文件软连接到/usr/local/bin
目录下面,起名为jqh
. 然后就可以愉快的jqh 'content'
了.
参考文章
jq使用
完.
ChangeLog
2019-04-02 完成 2019-04-03 添加Z 2019-04-21 添加iotop 2018-08-05 添加jq以上皆为个人所思所得,如有错误欢迎评论区指正。
欢迎转载,烦请署名并保留原文链接。
更多学习笔记见个人博客——>呼延十