Screen
出自Shsh
screen 不是螢幕
1.簡介
在以前 DOS 的環境,所有程式都是單工作業,沒辦法像現在 Windows 98 那樣,開啟一大堆視窗同時工作,而且網路連線也很慢,同時開啟多個視窗還得看看您的數據機有沒有辦法負荷得了。於是有人在 UNIX 下寫了一個軟體,就叫做 screen。
他可以讓你只開啟一條連線到遠端的 UNIX 工作站,然後在多人多工的工作站上開啟很多視窗來工作,這樣一來每個視窗既不需佔用數據機的線路,而且在單工的 DOS 客戶端也可以同時進行多項作業。
除此之外,screen 還有一個特異功能,你可以將正在工作的環境原封不動儲存下來,離線之後,下次連上工作站時,還能叫出原來的工作畫面,即使因為網路不穩突然斷線,你也可以連上之後繼續工作,只要你所在的工作站沒有當掉就行。
在以前 screen 是系統管理者在這種惡劣環境中工作的好用工具,不過今天它的斷線重連功能卻變成了掛站的好用工具。
- 掛站:就是永遠掛在站上。例如永遠掛在 BBS 上。你常常會看到一種人,隨時連上 BBS 站都可以看到他的身影,好像他的生命就只有 BBS 一樣,不用吃飯也不用睡覺。其實他只是使用 screen 讓自己的連線狀態保留下來。
2.How To Use
究竟screen要怎麼用? 其實很簡單!! 就只要在您FreeBSD/Linux/Unix的提示符號下打screen
[student][taichis][~]> screen 然後您的螢幕上就會出現很多行字,最後一行是 [Press Space or Return to end.] Screen version 3.09.13 (FAU) 5-Sep-02 Copyright (c) 1993-2002 Juergen Weigert, Michael Schroeder Copyright (c) 1987 Oliver Laumann This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program (see the file COPYING); if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Send bugreports, fixes, enhancements, t-shirts, money, beer & pizza to screen@uni-erlangen.de [Press Space or Return to end.]
以上依據每個人的系統環境可能有稍微不同。
就請按下您的Space或是Enter啦!!放心!!不會把您的硬碟format掉~^^| 按下後,您將會看到您的提示符號又變回原來的樣子:
[student][taichis][~]>
咦?好像沒什麼變? 其實我們這時已經位於 screen 的執行環境中,但除此之外,一切並沒有什麼不同。
這時您可以開始做任何想做的事,例如寫程式(在這個例子中我們要開始編輯一個叫做 abc.c 的程式):
[student][taichis][~]> ve abc.c
或玩 BBS (在這個例子,我們會連上正心芒果站):
[student][taichis][~]> telnet bbs
或上 [IRC]聊天室:
[student][taichis][~]> irssi
...等等等等,只要您想得到的unix指令都可以用。
當您工作完成後,只要 exit 就會退出 screen 環境,並回到原本的 shell 中。
[student][taichis][~]> exit
....
[screen is terminating] [Screen is termination] 這個訊息表示我們已經離開 screen 的環境了。
ㄟ~
但是這樣又有什麼方便的呢??
別緊張,真正的密技在後頭。
當您想要掛站或是make world或是rebuild all之類會讓您花大量時間在電腦前又不能幹什麼事的工作時
可以開一個新的screen window (也就是在 screen 中使用 ctrl-a c)
然後開始工作、玩BBS、掛站、.....etc,當你想要去睡覺吃飯或想對自己電腦重新開機時,按下ctrl+a 再按 d ...
這時會出現"[detached]",然後又回到最開始的那個shell!!
[detached]
[student][taichis][~]>
- 說明:ctrl-a c 的意思是說,同時按下 ctrl 跟 a 這兩個鍵,然後放開,再按 c 這個鍵。
這時您可以輸入 exit 斷線離開。
哇!!真是太神奇了!!
而當您吃完飯睡完覺開完機想要回覆剛剛的工作時,只要重新連上工作站,再輸入指令 screen -r,就會回到"掛"中的screen
[power][taichis][~]> screen -r
ㄟㄟ~~ 可是只開兩個又有什麼方便的呢?? 唉啊... 就跟您說別緊張了,真正的密技還在後頭呢!! 當您想多開幾個screen時,也就多輸入幾次ctrl-a c時就可以了!! 可是要怎麼回到那麼多個screen中的一個呢?? 呵呵~~ 這時就請您按Ctrl+a 再按 w 在螢幕下方會出現一行字(例如輸入了兩次screen) "0$ tcsh 1-$ tcsh 2*$ tcsh " 就代表screen0, screen1, screen2 通常screen0是您最開始的那個screen,以此類推 假如我們現在要回到screen1,那就按Ctrl+a 再按 1 就回到screen1了,以此類推!
請注意喔,screen 這個指令只要執行一次就可以了,請千萬不要在 screen 裡面再執行另一個 screen,這樣會越陷越深不可自拔。 也不要開很多個視窗去執行很多個 screen,別忘了 screen 本來就具有開啟多個視窗的功能,所以我們只需要一個 screen 就夠了。
如果你開啟了多個screen,那你要怎麼一一結束呢? 就一個一個叫出來,一個一個關阿 天吶!!這不是廢話嗎@@ ㄟ..........是阿 首先你先打screen -r 來查看你開啟了哪些screen 之後打入screen -d XXXXX.ttyxx.(也就是你要關閉的screen) 畫面就會出現[remote detached] 再打上exit就可以結束了, 但還是要出現[screen is terminating]才算真正的完成結束
再來換誰啊...這一篇...慢慢完成吧...
TaichiS 補充指令或控制法:
- screen : 直接執行一個新的 screen,通常只有系統被 reboot 後才會用到這個指令,也就是好幾月之後。
- screen -r : 這個才是把一個 screen 呼叫回來最常用的方法。
- ctrl+a c : 新增一個 window
- ctrl+a 1 : 或其他數字,就可以在不同 window 間切換
- ctrl+a w : 看看現在有哪些 window
- ctrl+a p : 往前切換一個 window
- ctrl+a n : 往後切換一個 window
- ctrl+a ctrl+a : 兩個 window 間互跳
- ctrl+a a : 移到行首,等同 HOME 這個鍵的功能
- ctrl+a A : 改變 window 的 title
- ctrl+a d : detach,就是把整個 screen 的狀態存下來並關閉。可以用 screen -r 叫回來。
- ctrl+a " : 可以用選單選擇不同的視窗。
在個人目錄下,編輯 .screenrc 輸入內容:
caption always "%{bw} %M/%d %D %C%A %{wb} %-w%{y}%n %t%{w}%+w%{k}"
就可以在螢幕下方出現彩色的狀態列,非常一目了然喔!
Q1:當我們打入後,打了screen之後,會出現[student][xxxxxx][~]>那再來我們要如何開啟一個能讓我們寫一些資料或程式之類的畫面?) A1:
- [student][xxxxxx][~]> ve abc.c # 編輯 abc.c
- [student][xxxxxx][~]> telnet bbs # 連往 BBS
- [student][xxxxxx][~]> irssi # 執行 [IRC] 聊天室
- 其他請查閱 UNIX 相關指令。
Q2:screen 不見了,但 screen 下的視窗還在(例如 irssi) A2:kill -CHLD <pid of screen>
Q3:如何 detach 一個 screen 裡面的另一個 screen? A3:c-a a d

