前言
使用 Shell
以下將介紹並解釋基本的 shell 命令和機制。
第一篇:超級工具/Terminals,xterms 和 Shells
一、超級工具
您或許聽過這樣的論調:命令列(the mommand line)早就已經過時了,那東西神秘兮兮的,等等。有些人甚至覺得作業系統中應該沒有這些命令才好。
事實是上,您可以不懂任何 shell ,就能使用 Linux 。您啟動系統後可以直接進入 X Window ,最後在 X Window 下關機。
我堅信,用 Linux 而不懂 shell ,就象開車只會用頭檔(first gear)一樣。當然,最初看起來,直接而簡單,在大多數情況下都管用。但速度慢,而且無法真正體驗駕駛的樂趣。
對,命令列很有趣。就象用一大堆收集到的積木,竟可以完成許多意想不到的創舉,一些極其複雜的工作,只需幾行命令就可以解決。這是因為,在 Unix 中,shell 可不是簡單的命令直譯器(典型的有 Windows 中的 DOS ),而是一個全功能的編程環境。
這並不意味著 shell 非常容易學通,您知道,好事多磨,這還是要花點工夫的。;-) 但請相信我,這絕對值得。您在很短時間內,就能被一大幫門外漢吹捧為 Unix wizard(奇才) 。*grin*
二、為了說明 shell ,這裡需要一些背景知識。
1、Terminals, xterms 與 Shells
追溯到 Unix 誕生的那個年代,當時還沒有現在流行的"個人電腦"。被稱為電腦的機器,還是吞吐磁帶與 magnetic memory (用術語'core'來表示系統 memory)的龐然大物。DE一般股份有限公司(現在的 Compaq)推出的 PDP-11 ,體積小(被稱為 mini)而且價格底,在大學中引起了巨大的反響,很多學校直到那時才買得起一台電腦(PDP-11 物美價廉,只有 10000$)。
這些機器的作業系統由組合語言、機器語言寫成,所以運行起來效率很高,但都無法移植(unportable)。每家電腦公司都給自己的機器配上專屬的作業系統,然後再銷售。
這種笨拙的作法很快就被人們意識到了,於是就開始興建一個可以在不同品牌機器上啟動並執行作業系統。1969 年,Ken Thompson 開始寫後來成為 Unix 的第一行代碼。(Thompson 曾經參加了一個項目:MULTICS,Unix 是與這有關的一個玩笑詞) 其實,Dennis Ritchie 為這個新的作業系統設計了一種新的程式設計語言-- C 語言後,事情才真正開始。
雖然 Unix 的效率不及原來的作業系統,但有三個突出的優點:可以任意移植到其他機器,其中的 C 語言大大簡化了編程,而且這些都 free 。很快,全美國的大學都忙著開始為機器安裝 Unix 。
2、終端(Terminals)
Unix 是可以在許多種機器上啟動並執行作業系統,但人們又如何使用這些機器呢?他們是通過啞終端來串連到這些機器,也就是用鍵盤、顯示器及足夠的 electronics (電子元件)組成的機器與中央電腦(central computer)相連。在這些終端上,使用者可以敲字元(teletypy),這就是字串'tty'表示終端裝置檔案,和'getty'命令的名稱來曆。
您可能會問,現在這些東西都在哪兒。 這些終端的廠家無法達成一項最終標準,這導致每種牌子的終端都有各自的鍵盤配置、各自的在螢幕上顯示字元的方法、發送或接收什麼訊號表示什麼字元、控制碼等等。
為了避免這些混亂,就建立了一個含有所有不同終端特性的(capability)檔案,這就是'termcap'。用一個工具開啟'/etc/termcap'瞧瞧,可別嚇著了 ;-) 。
Linux 終端大多數用'vt100'或'linux'作為終端類型。
3、xterms
在八十年代初期,產生了一個 Unix 的圖形子系統-- the X Window System 。九十年代早期,為了更好地實現基於 Intel 的 Unix 類系統上(如FreeBSD、NetBSD、Linux)的應用,產生了一個系統分支-- XFree86 。
X Window 中一個很大的好處是可以運行多個虛擬(virtual)終端。甚至在 X Window 下就有這麼個應用程式--'xterm'。您將發現'xterm'和'virtual terminal'在很多情況下都是一樣的。有的地方說'開啟一個 xterm',其實您不是非要用'xterm'程式,其他的終端模擬器(terminal emulator),如 rxvt、konsole、aterm、eterm、wterm 等等,一樣有效。
終端模擬器(又稱為虛擬終端)通過偽(pseudo) tty 裝置-- pty 與系統相連,並且使用自己的顯示標準-- xterm 。這導致不同的終端模擬器可能在一些按鍵或程式上存在細小的差別,這取決於模擬器多大程度上遵守了'xterm'的顯示標準。
4、Shells
為了在終端中運行程式,需要 shell 。shell 是作業系統的一部分,用來與使用者打交道,並且可以用來協調各個命令。
第一個真正的 Unix shell -- 'sh',亦稱為'Bourne shell',誕生於 1975 年,作者是 Steve Bourne 。很快,出現了其他 shell ,如基於原始'Bourne shell'的'ksh'、'zsh',後者常用作專屬 Unixes 系統中的標準 shell ;也有一些從 C 語言中衍生出來的 shell ,如'csh'或'tcsh'。
在 Linux 中,標註的 shell 是'bash',即 the GNU Bourne-Again Shell (有點玩笑的味道……)。這個 shell 功能非常強大(甚至有人覺得太龐大了),壓縮的 man page 就有 50 KB 。