[轉自LINUXEDEN]shell入門絕佳!(一)

newdayhope發表於2006-04-28

今天發現一些SHELL的好東西,覺得有必要發到我的BLOG上來。轉貼。

原文:
中譯本:吳曉光
整理: 北南南北
目錄




























+++++++++++++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++++++++++++


版權資訊

本文的內容來源於 MUO 的 Basics 部分,其原始英文版可以從這裡獲得。中文版來自吳曉光的CMUO 。MUO 是 Mandrake Linux( )為使用者提供的入門手冊,其內容實用並且實時更新,非常適合初學者做入門參考。與常見的各種Linux教程不同,MUO介紹給Linux初學者的是學習Linux的方法而非對某個系統的描述,這對各種有著千差萬別的Linux發行版的學習尤為重要。

本文編譯整理時對相關章節做了相應的刪改處理,去掉了針對Mandrake Linux的部分內容。

前言
使用 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)的龐然大物。DEC 公司(現在的 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 。

三、Shell 起步


首先,有一點小說明:在平常應用中,建議您不要用'root'帳號執行 shell ,如果您還是新手,這一點尤其要注意。作為普通使用者,不管您有意還是無意,都無法破壞系統;但如果是'root',那就不同了,只要敲幾個字母,就可能導致災難性後果。



當您登入系統或開啟一個 xterm 視窗,首先看到的是提示符(prompt)。Red Hat Linux 的標準提示符包括了您的使用者名稱、登入的主機名(沒有設定的話,是'localhost')、當前所在的目錄(working directory)、提示符號:
[tom@belbo tom]$

我以使用者名稱'tom'登入名為'belbo'的主機,當前在我的 home 目錄--'/home/tom'中。'root'的提示符:


[root@belbo root]#

除了不同的使用者名稱外,提示符號由'$'變成了'#'。根據 Bourne shell 的傳統,普通使用者的提示符以'$'結尾,而超級使用者用'#'。



提示符的每個部分都可以定製,您在後面將有更深的瞭解。



要執行命令的話,您只要在提示符後敲進命令,然後在按 鍵。shell 將在其路徑中(詳情見後)搜尋這個命令,找到以後就執行,並在終端裡輸出相應的結果(如果有的話),命令結束後,再給出新的提示符:
[tom@belbo tom]$ whoami
tom
[tom@belbo tom]$



順帶指出,當您敲 ENTER 時,游標(cursor)在哪裡並不要緊,因為 shell 總是會整行地讀取。



基本的命令有:'ls'(list directory ,列出目錄內容)、'cp'(copy ,複製)、'mv'(move / rename ,移動/重新命名),'cd '(change directory ,改變目錄),這些命令後面都可以跟上一幫可選項,這方面 man page 有詳細的介紹(man ls, man mv 等等)。
在您動身前往 shell 領地前,這裡有幾個術語(terminology)的簡短說明。命令可能帶一些可選項(options)、引數(arguments):
mv -i file dir


其中'-i'是命令'mv'的一個可選項,而'file'和'dir'則是引數。所有可選項在該命令的 man page 都中有詳細的介紹(此例中用 man mv),而引數則由您提供。可選項決定命令如何工作,而引數則用於確定命令作用的目標。

到目前為止,介紹得有點象許多人厭惡輕視的 DOS shell ,但伴隨著下面的介紹,您將會有新的體驗。


第二篇:自動補齊/命令列的歷史記錄/編輯命令列/可用的 Shell 快捷方式


Unix (及後繼者 Linux)在命令列下面誕生,因此,Unix 中的命令列有許多非常實用的功能。在本篇中,我們將來作一些瞭解。

一、自動補齊;




如何用'cd'(改變目錄,change directory)最快地從您當前所在的 home 目錄跳到'/usr/src/redhat/'呢?
cd /usrr

這稱為'命令列自動補齊'(automatic command line completion),這在平常應用中是不可缺少的。讓我們仔細看看這個例子:


cd /u

擴充套件成了 cd /usr/ ,很簡單吧。下面的


cd /usr


擴充套件為 cd /usr/src/ 。如果您只敲了cd /us,'/usr'下匹配的('cd /u*/s*')三個子目錄將列出供您選擇:'/usr/sbin'、'/usr/share'和'/usr/src'。

因此, 鍵可以很方便地用於根據前幾個字母,來查詢匹配的檔案或子目錄。比如,ls /usr/bin/zip 將列出所有'/usr/bin'下面,以字串'zip'開頭的檔案或子目錄。當然,完成這類任務還有更厲害的命令,但這個方法確實很管用。

另外,碰到長檔名時就顯得特別方便。假設您要安裝一個名為'boomshakalakwhizbang-4.6.4.5-i586.rpm'的 RPM 包,您輸入 rpm -i boom ,如果目錄下沒有其他檔案能夠匹配,那 shell 就會自動幫忙補齊。

cd /usrl


將擴充套件成 cd /usr/src/linux ,並等待繼續。'/usr/src'中有兩個匹配的目錄:'/usr/src/linux-[...]'、'/usr/src/linux'。如何告訴 shell 您想要後面的那個呢?只要跟一個斜線(/ ,slash),就可以選擇後面的那個了。

假如您不確定是'/usr/src/linux/Documentation'還是'/usr/src/linux/documentation'。而您知道,Linux 是區分大小寫的。如果已經仔細讀過前面部分的話,您想到可以用:

cd /usrl/d


擴充套件成了'/usr/src/linux/drivers/',因此應該是'Documentation'(大寫的'D')。



這種補齊對命令也有效:
[tom@belbo tom]$ gre
grecord grefer grep
[tom@belbo tom]$ gre


在這裡 shell 將列出所有以字串'gre'開頭的已知命令。

二、命令列的歷史記錄




透過按向上方向鍵,您可以向後遍歷近來在該控制檯下輸入的命令。用向下方向鍵可以向前遍歷。與 SHIFT 鍵連用的話,您還可以遍歷以往在該控制檯中的輸出。您也可以編輯舊的命令,然後再執行。

後,shell 就進入"reverse-i(ncremental)-search"(向後增量搜尋)模式。現在輸入您要找的命令的首字母:

(reverse-i-search)`':. 敲入 'i'可能會變成:

(reverse-i-search)`i': isdnctrl hangup ippp0

如果您再按 鍵,上面的命令將再次執行。而如果您按了向右、向左方向鍵或 ,上面的命令將回到普通的命令列,這樣您就可以進行適當編輯。

編輯命令列



透過游標和功能鍵(Home、End 等鍵),您可以瀏覽並編輯命令列,如果您需要,還可以用鍵盤的快捷方式來完成一般的編輯:
l :刪除從游標到行尾的部分
l :刪除從游標到行首的部分
l :刪除從游標到當前單詞結尾的部分
l :刪除從游標到當前單詞開頭的部分
l :將游標移到行首
l :將游標移到行尾
l :將游標移到當前單詞頭部
l :將游標移到當前單詞尾部
l :插入最近刪除的單詞
l :重複前一個命令最後的引數。



例如:您用命令 mkdir peter/pan/documents/tinkerbell 新建了一個目錄,現在您向用命令'cd'進入該目錄,您可以用 cd !$,shell 將把前一個命令'mkdir'的引數新增到現在的'cd'後面。

當您更深入瞭解Linux後,將看到這些快捷方式在其他應用程式下輸入時,有時也有效,比如,在瀏覽器中的輸入框中。

三、可用的 Shell 快捷方式


Red Hat Linux 帶有不少快捷方式,其中一部分是 bash 原來就有的,而還有一些則是為您預先設定的(在後面您將看到如何設定)。

由於 home 目錄是每位使用者的活動中心,許多 Unix 對此有特殊的快捷方式。



'~'就是您的 home 目錄的簡寫形式。我們假設您在其他目錄,想把一個名為'sometext'的檔案複製到您 home 目錄下的 'docs'子目錄中。除了輸入:
cp sometext /home/myusername/docs

您還可以用簡寫:


cp sometext ~/docs


理論上,這也可以應用在命令'cd'上。無論當前路徑在哪裡,cd ~ 將回到您的 home 目錄。其實還可以簡化,只要鍵入 cd ,就可以返回 home 目錄了。



Red Hat Linux 為您提供了一些預先設定的快捷方式(稱為'別名',aliases),比如:
l ll :將執行'ls -l -k'(以長格式列出目錄內容,包括一些檔案屬性,並以 KB 而不是 byte 為單位顯示檔案大小)
l ls :將執行'ls -F --color=auto'(列出目錄內容,加上檔案型別標識,並使用顏色)


現在,您應該對 shell 及一些快捷方式有了進一步的瞭解,下面我們來看看除了應用一些簡單的命令,shell 還能作什麼。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/181629/viewspace-831180/,如需轉載,請註明出處,否則將追究法律責任。

相關文章