linux screen初体验

由于公司的线上线下环境(除了本机)都是linux环境, 所以工作的时候, securecrt少不了, 往往还需要同时登陆多台机器进行操作. 在操作的时候, 有时候还需要等待一个命令执行完才能搞其他东西, 有点浪费时间. 当然, 开多个securecrt来连接到远程机器可以解决这个问题, 但是另一个问题, 这种做法是解决不了的, 就是如果我要保存上一次的工作状态, 等下次登陆之后可以立刻进入上一次的状态继续工作, 这个时候, 需要我们对这种状态做一下保存, 而securecrt终端是不维护这种状态的, 每次断开重新登陆后都要重新敲一遍命令回到上次的状态. 这时候, screen命令就非常有用了. screen提供了类似于linux中的桌面的功能, 而且可以同时有多个桌面一起工作, 称之为window(窗口). 通过一些快捷键, 可以很方便地从一个窗口切换到另一个窗口, 而且这些窗口的状态都是保存着的. 下面介绍screen命令如何使用, 以及使用效果.

1. screen有哪些选项, man一把就知道了, 自己看看.

2. screen配置文件, 这个可有可无, 有这个配置文件可以让screen看起来比较容易理解, 我们只需要新建一个文本文件, 在里面键入以下配置信息即可:


caption always "%{wb} %-w%{+b bw}%n %t%{-}%+w"      #蓝底白字

#caption always "%{=b kR} %-w%{-b bg}%n %t%{-}%+w"   #红色的,这两句选一句就可以了

defutf8 on    #如果有中文乱码就加上,否则可以不用

defencoding utf-8

encoding utf-8 utf-8

defscrollback 8192     #可以解决闪屏的问题

保存文件, 比如文件名为.screenrc

3. 接下来是启动screen

敲入命令


screen -D -RR youscrid -c ${yourdir}/.screenrc

这里, yousrcid是由你自己定义的, 就是一个screen的sessionid, 下次再回到这个screen时, 需要用到这个id, 可以取个容易记住的名称, 比如linux的用户名之类的.

-c后面的选项值就是第2步保存的配置文件.

4. 经过前面3步, screen以及建立了, 这时候你在这个screen中干啥都行了.

4.1 新建一个新的窗口:  ctrl+a c 这里是快捷键, 先按下ctrl+a两个键, 然后再敲一下c (create)键就可以创建一个新的窗口了.

4.2 为窗口命名, 默认窗口的名称都叫 bash, 为了工作方便, 你可以给每个窗口命名, 快捷键是 ctrl+a A  注意这里后面是大写的A,(你也可以按下shift+a(小写a), 就不用开启caps lock了)

4.3 切换窗口,  切到下一个窗口的快捷键是:  ctrl+a n (next)  , 切换到上一个窗口快捷键是:  ctrl+a p (pre) . 另外还可以  ctrl+a  num  num值数字, 每新建一个screen都会有一个数字作为他的tab下标的(默认从0开始, 这个你肉眼是看的到的, 有了上面的配置的话)

4.4 退出窗口,  直接 exit 就可以退出当前的一个window了.

4.5  退出到shell控制台, 而不退出窗口,  ctrl+a d  这时候会回到你创建这个screen的那个控制台, 当前的screen状态都会被保持着. 这时候即使你在screen里面远程连接到其他机器上, 还是可以保持的, 而且下次恢复到screen的适合, 这种连接不会断开.

4.6  回到原有的screen, 在linux控制台下敲入命令:


screen -r yourscrid

这里的yoursrcid就是你在第3步的时候创建screen时候指定的id, 这个时候就会很神奇地回到上一次的工作状态中了!

5. 其他选项有待各位看官自己挖掘了.

6. 使用截图

 

参考文档

http://www.ibm.com/developerworks/cn/linux/l-cn-screen/

http://www.ibm.com/developerworks/cn/aix/library/au-gnu_screen/

http://blog.chinaunix.net/u2/82938/showart_1821389.html

 

在linux的alias中使用awk遇到的问题

场景很简单, 通过一个命令别名(alias)直接输出当前的机器的ip地址.

不需要使用ifconfig命令, 用ping就可以了. (更简单用 hostname -i 命令即可.)

ping -c 1 命令用来指定只ping一次, 后面是机器名或者域名.

查看机器名的命令是 hostname, 所以很简单, 直接

ping -c 1 `hostname`

就可以得到ip地址的信息了.

PING jiacheo (192.168.0.22) 56(84) bytes of data.
64 bytes from jiacheo (192.168.0.22): icmp_seq=0 ttl=64 time=0.034 ms
--- jiacheo ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0m
rtt min/avg/max/mdev = 0.034/0.034/0.034/0.000 ms, pipe 2

然后我只需要显示第一行的 (192.168.0.22)就可以了. 这时需要用到awk

ping -c 1 `hostname` | awk '{if(NR==1) pirnt $3}'

执行结果:

(192.168.0.22)

貌似没什么问题.

使用alias:

编辑~/.bashrc 文件, 最后加入

alias ip="ping -c 1 `hostname` | awk '{if(NR==1) pirnt $3}'

保存后, source ~/.bashrc 一下(或者重新登录终端)

在命令控制台敲入: ip  回车后显示

PING jiacheo (192.168.0.22) 56(84) bytes of data.

奇怪了, 开始怀疑是awk没有识别出分隔符.
后来想想, 在.bashrc里面定义的 环境变量都是可以用$var 来引用的, 这里的$是不是需要转义
在英明伟大神武牛叉轰轰的 莹莹的指导下, 果然是$符号的问题, 要转义一下就可以了. 转义的方法就是 在前面加个\

alias ip="ping -c 1 `hostname` | awk '{if(NR==1) pirnt \$3}'"

输出结果:

(192.168.0.22)

蛋疼扯了这么多, 就说明一个道理, 在定义alias的时候, 要注意特殊符号需要转义. 嗯.