歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

將Linux中的“工具箱”翻個底朝天

  我發覺管理Linux和Unix系統最有利的情況之一就是已經有如此得多工具都能夠幫助你完成工作。幾乎任何一個可以想像的問題,都有人花費時間制作出相應的處理工具。並且多數情況下,此類工具都足夠靈活,能夠根據你所遇到的問題被完全更改。對我來說,screen就是這樣一個工具。    Screen給我留下如此深的印象,感動了我,或許是因為在我使用Unix系統工作的前10年中,從來沒有聽說過它的存在。我浪費了大量時間試圖解決它已經解決的各類問題。或者,我也許很容易被感動。不過如果screen對你來說是一個新東西,或者你已經知道她,並想得到它的一些使用技巧,請接著讀下去。    Screen工具是一個終端多路轉接器,在本質上,這意味著你能夠使用一個單一的終端窗口運行多終端的應用。你現在可能會想,“有什麼了不起,我早就能夠將工作放在shell的後台來執行了。”確實,你能夠那樣做,不過若是程序本身不能夠放入後台怎麼辦――也就是說,一些用ncurses寫的程序?或者,如果你需要獲得終端的整個對話該怎麼辦?再有,根據程序的先決條件,可能同時運行的程序之間會有影響。    Screen將允許你做到所有的這些事情。你的程序將不會察覺到與在單獨的終端下運行有何不同,這將使它們運行的很好。這種情況下也沒有客戶機或服務器等“遠程”工具的概念,只要在系統中安裝了screen工具,你就可以運行你想要的工具,並且能夠用screen連接系統,也就是說,你擁有所有你需要的東西。Screen的另一個好處是它由GNU組織撰寫和維護,因此,它能夠在可以想像的到的幾乎所有的Unix平台上使用。(對於那些管理多種不同類型系統的人來說,這非常關鍵,因為它意味著你能夠在不同的平台上使用相同的工具。)    Screen工作的例子    在我家裡,我運行了一個低功率的FM發射器以廣播我的音樂收藏。(發射器相比無線連接並不貴,它能夠讓我在院子裡使用隨身聽仍然聽到我的頻道。)我使用名片mp3blaster驅動發射器,這是一個非常好的基於控制台的MP3播放器,能夠支持巨大的MP3收集。一旦它開始運行,mp3blaster的信息看起來就像下圖一樣:   點擊查看大圖  迄今為止,它都是如此的優秀:我能夠打開一個窗口,開始mp3balster,整天廣播音樂。但是如果我坐在樓上我的筆記本面前,並且不詳跑到樓下改變播放列表該怎麼辦?很簡單,我只需要在一個screen對話下啟動mp3blaster,然後能夠從任何擁有shell的系統訪問所調用的screen。    我能夠使用如下的方法開始一個叫做“radiostation”的screen對話:    tmancill@Ghostrider:~$ screen -S radiostation    (此時出現一個空白的screen)    tmancill@ghostrider:~$ mp3blaster    (載入我的播放列表,然後按下play開始發射)    (按下“CTRL-a”,然後按下“d”離開)    在這裡,我能夠退出我的shell,而mp3blaster則繼續保持工作,使用現有的音軌信息和運行時間來更新終端窗口(現在此窗口並不存在)。讓我們假設,我的妻子打電話給我說,“嘿!播放一些不同於你收藏的音樂的吧!”,然後,我用ssh登錄ghostrider機器,並使用下面的命令恢復會話:    tmancill@ghostrider:~$ screen -r radiostation    如果我碰巧忘記了正在運行的screen會話的名字,我可以使用“-ls”開關來查看正在運行的會話:    tmancill@ghostrider:~$ screen –ls    There are screens on:    10238.frm (Detached)    25400.radiostation (Attached)    2 Sockets in /var/run/screen/S-tmancill.    如果我離開辦公室時沒有注銷“radiostation”screen,我能夠恢復它,指示screen在恢復運行(-r)我所請求的對話之前跟任何正在運行的對話分離(-d)。在我辦公室的窗口上,我將看到:    tmancill@ghostrider:~$ screen -r radiostation    [remote detached]    當然,你不可能運行這個廣播站而耗盡所有的screen。在生產環境中,這非常有用,因為你不必區分你應該從哪個地點訪問這個對話。在我的辦公室中,我需要在GDB(GNU Project debugger,http://www.gnu.org/software/gdb/gdb.Html)下運行一塊自動售貨機軟件,以便在它們存在缺點(segfaulted)時,能夠得到錯誤的回溯跟蹤信息。當崩潰發生時,我的監控軟件將向我們發出警告通知,我們二十四小時隨叫隨到的支持團隊成員將訪問這個會話,在我們單獨的每個工作站上運行GDB shell來解決問題。這裡有一個選擇,就是可以從系統控制台直接運行軟件,但這意味著待命的技術團隊必須在現場,然後必須物理的進入數據中心執行後續的工作。因此,screen絕對是一個適合的解決方案。    有一件事需要謹慎行事:screen是一個對用戶權限非常敏感的程序,也就是說它會根據執行操作的用戶來進行不同的響應。在GDB的例子中,自動售貨機軟件運行於一個特殊的用戶賬戶下,因此如果你使用“su”或“sudo”命令改變成另一個用戶,你將遇到權限問題。出現這種問題的原因是screen必須能夠打開你的tty(終端)。舉一個例子,讓我們假設我想在我系統中的screen下以用戶“asterisk”運行一些程序,如果我以用戶“tony”登錄,然後改變為用戶“asterisk”,我將用以下的命令來運行:    asterisk@bach:~$ screen -S pbx    Cannot open your terminal '/dev/pts/146' - please check.(不能打開你的終端“/dev/pts/146” - 請檢查。)    asterisk@bach:~$ ls -al /dev/pts/146    crw------- 1 tony tty 136, 146 May 31 18:16 /dev/pts/146    就像你能夠看到的一樣,由於安全問題,我的tty(終端)由打開shell的用戶所擁有,而不是我改變為asterisk後的有效用戶ID。解決這個問題的一個方式是在調用screen之前,直接以用戶asterisk登錄,但這個問題同樣會以另外的形式呈現,那就是,如果我以asterisk開始工作,然後在其它用戶下請求聯機,之後再切換回asterisk,“screen –r”仍將不能打開終端。同樣注意到,在我改變為用戶asterisk之前,“screen –ls”也不會向我顯示出“pbx”會話,這是由於screen為每個screen用戶創建了一個文件夾,它只能列出此用戶的會話。    那麼,該怎麼做才能規避這些權限問題呢?如果用戶賬號有一個密碼,你通常能夠通過ssh以此用戶直接進入系統(也可能是本地機)。或者,如果你總是很匆忙,並且有足夠的自信,感覺並不會存在本地安全威脅,你則可以在tty(終端)修改權限。如果你這樣做了,請確信在工作完後,你已經從你工作的終端上注銷。實際上,你已經給予了每個本地系統用戶通過shell訪問的權限。另一個選擇是改變成root用戶再調用screen,然後在screen會話中改變為運行工作所需的系統賬號。這樣做能夠正常的原因是超級用戶能夠打開任何用戶的ty(終端),而表面上,你的支持團隊應該有改變為root用戶的足夠權限。    Screen能夠幫助你使用那些不適合“無人看管”使用的大量終端軟件,並且只需運行一個起始會話即可。相比之前你可能通過多個會話登錄遠程系統,它的部署是如此快速,易用性又是如此之好,或者說它在你的Linux控制台上添加和設置了附加的虛擬控制台。這就是screen,上面的文章將指導你更好的使用這個強大的工具,你可以在你需要的任何時候運行它。




Copyright © Linux教程網 All Rights Reserved