使用Screen抵御杯具
當DBA遠程做一個大操作的時候最怕的是什么?斷網!有木有啊!!
建一個20G的索引,進度到98%的時候突然斷網,前功盡棄,有木有啊!!
怎么樣才能抵御這種杯具呢?找一臺Windows的機器作為終端,上面裝上SSH工具,那Linux呢?靠它——screen
Screen是一個可以在多個進程之間多路復用一個物理終端的窗口管理器。Screen中有會話的概念,用戶可以在一個screen會話中創建多個screen窗口,在每一個screen窗口中就像操作一個真實的telnet/SSH連接窗口那樣。簡單來說就是一個命令行版本的SecureCRT。
當遠程會話不幸關閉的時候,screen還能駐留在服務器端,并且很容易地重連(attach),這樣就保證我們的工作不會因為網絡問題而終端,這是多么好的功能啊。
鍵入screen即可使用screen
[oracle@alifina-dev12 ~]$ screen
如果報以下錯:
Cannot open your terminal '/dev/pts/10' - please check.
使用以下命令將輸出重定向即可:
[oracle@alifina-dev12 ~]$ script /dev/null
然后我們開始一個任務,譬如用vim寫小說,突然抓狂把終端強行關閉了,那時不是之前的努力都沒有了呢?
我們重連一個會話,用以下命令查看并且再次attach即可,我們的成果還在!
[oracle@alifina-dev12 ~]$ screen -ls
There is a screen on:
7366.pts-0.alifina-dev12 (Detached)
1 Socket in /var/run/screen/S-oracle.
[oracle@alifina-dev12 ~]$ screen -r 7366
這絕對是screen的殺手锏功能!!
screen還能做得更好嗎?當然!
修改~/.screenrc,如果整臺服務器都是你用的話也可以修改/etc/screenrc
## general tweaks
vbell off
autodetach on
startup_message off
defscrollback 1000
attrcolor b ".I"
termcap xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
defbce "on"
escape "^Kk"
defencoding UTF-8
encoding UTF-8 UTF-8
hardstatus alwayslastline '%{gk}[%= %{wk}%?%-Lw%?%{=b kR}[%{W}%n%f %t%?(%u)%?%{=b kR}]%{= kw}%?%+Lw%?%?%= %{g}]%{=b C}[%m/%d %C%a]%{W}'
shell -$SHELL
現在screen開起來會像這樣:
看到沒,下面那一行彩色的東西,輸入Ctrl+k,緊接著馬上輸入c,多了一個:
輸入 Ctrl+k n 就可以移動到下一個window(輸入Ctrl+k p是上一個window),功能和SecureCRT的tab一樣。
有朋友會問為什么是Ctrl+k 呢?這個是在screenrc(.screenrc)中定義的,還有個特別的名字——命令鍵,我受Visual Studio的毒害很深,愛上了Ctrl+k,所以把它設為 Ctrl+k。
一些有用的操作:
- 命令鍵 A(注意是大寫的A,平時輸入是shift+A):將window改名。
- 命令鍵 c:創建一個新的window
- 命令鍵 d:detache當前這個screen
- 命令鍵 ?:幫助……

浙公網安備 33010602011771號