-
linux命令使用小记5
多目录之间跳转 使用dirs, pushd, popd就可以做到。但是命令多了容易混淆,我其实只记得两个目录快速跳转方法: pwd # dirA cd dirB pwd # dirB cd – pwd # dirA cd – pwd # dirB 使用alias快速登录服务器 alias serverA=’luit -encoding GBK sshpass -p passWord ssh -t user@server screen -RR’ 把alias设置在.bashrc中,接下来就能输入serverA快速登录服务器了。 解释下命令:luit用来解决GBK服务器编码问题;sshpass用于输入密码;ssh的-t参数表示强制伪终端,screen需要;screen -RR表示有screen session就使用,否则就新建。
-
pexpect和非UTF-8编码的ssh
pexpect是一个用python实现的类似expect的库,支持ssh,ftp等协议的交互。 以前自己写了一篇使用expect+python拉取数据的文章,现在发现了pexpect,便想要完全用python来写。总觉得用expect生成中间文件不是很好。
-
使用expect+python拉取数据并生成报表
虽然脚本周一的时候就写好了,但是昨天才是第一次正式使用。加上昨天写了第二篇shell的tips,所以expect+python的脚本gen_report今天才写。 首先说一下背景。由于工作需要,有时我需要ssh到服务器上拉取运行数据生成报表。整个过程很枯燥,就是登录服务器,输入密码,运行二三十条很像的命令,把数据复制到microsoft excel或者libre office calc中计算。一言以蔽之:整个人肉操作。 很明显,如果让我天天干,我肯定不愿意。但是即使不是天天干,一周干一次,我也不愿意,因为命令执行很慢,来回弄肯定要半天。按照《时间管理 给系统管理员》,这种时候最适合写脚本了。 常规策略是在服务器上写好一个脚本,ssh上去执行一下,再使用scp把结果下载下来,最后使用比如python来解析生成csv等报表。但是,不行。首先遇到的问题就是服务器貌似不支持publickey,其次服务器上命令有限制(很常见,你不是管理员),不支持publickey的直接后果是ssh后执行命令和scp无法使用,只能另外寻找方法。 由于某些原因,我知道expect。虽然交互式的命令很好,但是如果你要让交互式的命令自动化的话,却很麻烦,比如ssh,ftp。这个时候expect可以帮助你解决问题。证明是网上搜索expect ssh login一抓一大把。所以我现在的考虑是通过expect代替ssh登录服务器执行命令。因为不能用scp,所以考虑把expect通过重定向或者tee放入某个文件中,最后让python解析这个日志文件即可。(最近重新看了点expect的书,貌似expect可以直接设置日志文件,不用tee之类的重定向,之后有空可以尝试下。) 基本策略确定了,方向基本也清楚了。由于涉及expect和python两种语言和程序,所以我选择shell做总控制的脚本。以下是总控制脚本即gen_report的内容(部分和工作相关的内容已经做了修改):
-
linux命令使用小记1
bash的快捷键 现在碰到的服务器上的用户的默认shell都是bash,所以主要讲下bash的一些快捷键。 删除整行命令:Ctrl + u,对不回显的密码输入同样有效 向前删除单个单词:Ctrl + w,在vim里面同样有效 运行最近一条命令:!! 就是两个感叹号,个人是从sbt(scala下的一个构建工具)里面学来的 搜索最近的命令;Ctrl + r,输入关键字,比如你最近输入了vim /path/to/file,那么Ctrl + r,再输入vim,那么就可以显示出这条命令,回车就直接执行了 在搜索最近的命令的基础上,!vim 可以执行最近这条vim的命名。这个用在什么地方最好呢?如果你最近tail了某个文件,输入!tail就可以直接执行tail了,不用输入文件名 清屏命令:Ctrl + l,效果和clear一样 上一条命令和下一条命令:Ctrl + p,Ctrl + n,个人不是很喜欢用上下键,因为要移动右手,而且有些键盘需要按FN才有上下,比如hhkb-pro,不过这个仁者见仁,智者见智 暂停屏幕输出:Ctrl + s,恢复屏幕输入Ctrl + q,这个用来干嘛呢?类似tail时scroll lock 更多bash快捷键,请google