章 3. 使用外圍程序

內容目錄

3.1. Bash 外圍程序入門
3.2. 使用者和存取許可權
3.3. 重要的 Linux 指令
3.4. vi 編輯器

摘要

Linux 系統開機後,您通常會進入圖形使用者介面,由它引導您執行登入程序以及後續與系統的互動。雖然圖形使用者介面已經變得非常重要和易於使用,但使用圖形使用者介面並不是與系統互動的唯一方式。您也可以使用文字導向的溝通方式,例如一般稱為外圍程序的指令行解譯器就可以讓您輸入指令。因為 Linux 提供從圖形使用者介面啟動外圍程序視窗的選項,所以您可以輕鬆使用兩種方式。

在管理工作上,若要控制慢速網路上的電腦,或是要以 root 身分在指令行執行工作,以外圍程序為基礎的應用程式尤其重要。對 Linux "新手"而言,在外圍程序中輸入指令或許有點不尋常,但您很快就會了解到,外圍程序不只是系統管理員專用的──其實使用外圍程序,往往是執行一些日常工作最快、最簡單的方法。

UNIX 或 Linux 有許多種外圍程序。SUSE Linux 中的預設外圍程序是 Bash (GNU Bourne-Again Shell)。

本章會討論您在使用外圍程序時必須知道的幾個基本要點。包含下列主題:如何輸入指令、Linux 的目錄結構、如何處理檔案和目錄、如何使用一些基本功能、Linux 的使用者和許可權概念、重要外圍程序指令的概觀和 vi 編輯器 (這是 Unix 和 Linux 系統一定會提供的預設編輯器) 的簡介。


3.1. Bash 外圍程序入門

在 Linux 中,您可以使用功能和圖形使用者介面相同的指令行,並且輕鬆切換使用它們。若要在 KDE 中從圖形使用者介面來啟動終端機視窗,請按一下面板中的 Konsole 圖示。在 GNOME 中,則請按一下面板的「GNOME 終端機」圖示。

這樣畫面就會出現 Konsole 或是 GNOME 終端機視窗,並在第一行顯示提示文字,如 圖形 3.1, "Bash 終端機視窗範例" 所示。這段提示文字通常會顯示您的登入名稱 (即本範例中的 tux)、電腦的主機名稱 (即此處的 knox),以及目前的路徑 (在此範例中就是用波狀符號 ~ 標示的根目錄)。如果您是登入遠端電腦,這段資訊就會永遠為您顯示目前您正在運作的系統。當游標出現在這個提示名稱之後,您可以將指令直接傳送給電腦系統。

圖形 3.1. Bash 終端機視窗範例

Bash 終端機視窗範例

3.1.1. 輸入指令

指令是由幾個元件所組成。第一個元件一定是實際的指令,後面跟著參數或選項。您可以輸入指令,然後使用<—DelSpace 進行編輯。您也可以加入選項,或是更正輸入錯誤。這個指令會在您按 Enter 之後開始執行。

[Important]沒消息就是好消息

外圍程序不會提供詳細資訊 (Verbose):相對於某些圖形使用者介面,通常外圍程序不會在指令完成執行時提供確認訊息。訊息只會在發生問題或錯誤時才會出現。

同時,請注意會刪除物件的指令。當您在輸入類似 rm 等刪除檔案的指令之前,請務必考慮自己是否真的要刪除該物件:因為指令執行之前不會先詢問您,並永遠刪除該物件。

3.1.1.1. 使用不包含選項的指令

請透過下列簡單範例來觀察指令結構:用來列出目錄內容的 ls 指令。這個指令可包含或不包含選項情況下使用。只輸入 ls 指令可以顯示目前目錄的內容:

圖形 3.2. ls 指令

ls 指令

不同於 MS Windows 系統,Linux 中的檔案可能會包含副檔名 (例如 .txt),但是並不是絕對需要。因此這會造成 ls 輸出中的檔案和資料夾難以進行區分。依預設,您可以透過顏色來區分:目錄通常會顯示為藍色,檔案會顯示為黑色。

3.1.1.2. 使用包含選項的指令

另外一種取得目錄內容更多細節的較佳方法,就是搭配選項字串來使用 ls 指令。選項可以改變指令執行的方式,讓您能夠指引它執行特定的工作。選項會用空白來與指令區隔,而且開頭會加上連字號。指令 ls -l 可以完整詳細顯示相同目錄的內容 (長式清單):

圖形 3.3. ls -l 指令

ls -l 指令

在每個物件名稱的左邊會有好幾個欄位,其中會顯示與該物件有關的資訊。下面是其中最重要的資訊:第一欄會顯示物件的檔案類型 (在本範例中,d 是指目錄,而 - 是指一般檔案)。接下來的 9 個欄位則會顯示該物件的使用者許可權。欄位 11 和 12 則會顯示檔案擁有者和群組 (在本範例中是指 tuxusers)。如需更多有關 Linux 使用者許可權和使用者概念的詳細資訊,請參閱節 3.2, "使用者和存取許可權"。接下來的欄位會顯示檔案大小,單位是位元組。接著顯示上次變更的日期和時間。最後一個欄位則顯示物件名稱。

如果您希望檢視更多資訊,請結合兩個選項來執行 ls 指令,即輸入 ls -la。這時外圍程序會同時在目錄中顯示隱藏檔案,即前面標示點符號的檔案 (例如,.hiddenfile)。

3.1.1.3. 取得說明

並非所有人都必須記住所有指令的所有選項。如果您記得指令名稱但是不確定相關選項,您可以輸入指令,依序在後面加上空格以及 --help。有許多指令可以使用這個 --help 選項。輸入 ls --help,可顯示有關 ls 指令的所有選項。

3.1.2. Linux 目錄結構

因為外圍程序不會像檔案管理員以樹狀結構檢視方式來顯示圖形概觀的目錄和檔案,因此對 Linux 系統的預設目錄結構有些基本了解,將會產生許多幫助。您可以將目錄視為儲存檔案、程式及子目錄的電子資料夾。階層中最上層的目錄就是根目錄,以 / 表示。從此處可以存取其他所有目錄的位置。

圖形 3.4, "摘錄自標準目錄網路樹" 顯示 Linux 的標準目錄網路樹,以及範例使用者的主目錄 xyzlinuxtux/home 目錄包含個別使用者可以儲存個人檔案的目錄。

[Note]網路環境中的主目錄

當您正在網路環境中工作時,您的主目錄並不一定會稱為 /home。它可能會映射到檔案系統的任何目錄。

下列清單提供 Linux 中標準目錄的簡短描述。

圖形 3.4. 摘錄自標準目錄網路樹

摘錄自標準目錄網路樹
/

根目錄,目錄網路樹的起點

/home

使用者個人目錄

/dev

代表硬體元件的設備檔案

/etc

系統組態的重要檔案

/etc/init.d

開機程序檔

/usr/bin

一般可存取的程式

/bin

開機過程早期需要的程式

/usr/sbin

保留給系統管理員的程式

/sbin

保留給系統管理員而且開機時需要用到的程式

/usr/include

C 編譯器標頭檔

/usr/include/g++

C++ 編譯器標頭檔

/usr/share/doc

各種文件檔

/usr/share/man

系統手冊頁面 (man 頁面)

/usr/src

系統軟體的原始程式碼

/usr/src/linux

核心原始程式碼

/tmp/var/tmp

暫存檔案

/usr

所有應用程式

/var

組態檔案 (例如,連結自 /usr 的檔案)

/var/log

系統記錄檔案

/var/adm

系統管理資料

/lib

共用程式庫 (用於動態連結的程式)

/proc

程序檔案系統

/sys

系統檔案系統,為核心之所有設備資訊的集中存放位置

/usr/local

本機的分散獨立式延伸

/opt

選擇性軟體,大型的加入套裝程式 (例如 KDE、GNOME、Netscape)

3.1.3. 使用目錄和檔案

若要為特定檔案或目錄指定位置,您必須指定指向該目錄或檔案的路徑。指定路徑的方法有下列兩種:

  • 從根目錄到個別檔案的完整 (絶對) 路徑

  • 從目前目錄作為起點的路徑 (相對路徑)

絶對路徑永遠會以斜線作為開頭。相對路徑不會以斜線作為開頭。

[Note]Linux 會區分大小寫

Linux 會區分檔案系統中的大寫和小寫。例如,輸入 test.txtTest.txt 對 Linux 來說是不同的意義。請在輸入檔名或路徑時注意這點。

若要變更目錄,請使用 cd 指令。輸入目錄,便可依照指令選項執行。使用一個點 (.) 可表示目前的目錄。網路樹中的上一層目錄是由兩個點 (..) 表示。若要切換至目前目錄的父目錄,請輸入 cd ..。請勿忘記在 cd 指令之後加上空格,以便區隔指令和選項。您會在此時接收到提示,顯示您剛才執行此命令目錄位置的父目錄路徑。若要切換至目前目錄的父目錄,請輸入 cd ..ls -l ../.. 會列出在上面兩層位置目錄的內容

3.1.3.1. 指定檔案位址範例

節 3.1.3, "使用目錄和檔案"中的 cd 指令是使用相對路徑。您可以使用絶對路徑。舉例來說,假設您希望將主目錄的檔案複製到 /tmp 的子目錄:

  1. 首先,請從主目錄建立位在 /tmp 的子目錄:

    1. 如果目前您不是在自己的主目錄下,請輸入 cd ~ 切換至您的主目錄。無論您是在檔案系統的任何位置,您只要輸入 cd ~ 就可切換到您的主目錄。

    2. 在您的主目錄中,輸入 mkdir /tmp/testmkdir 表示 "建立目錄"。這個指令會在 /tmp 目錄中建立名為 test 的新目錄。這個範例是使用絕對路徑來建立目錄。

    3. 為了檢查產生的結果,現在讓我們輸入 ls -l /tmp。這時 /tmp 目錄的內容清單中應該會出現 test 這個新目錄。

  2. 現在,請在主目錄中建立新檔案,並使用相對路徑將其複製到 /tmp/test 目錄。

    1. 輸入 touch myfile.txt。配合 myfile.txt 選項的 touch 指令,將會在目前目錄中建立一個全新、名為 myfile.txt 的空白檔案。

    2. 請輸入 ls -l,檢查執行結果。這個新檔案應該會出現在內容清單中。

    3. 請輸入 cp myfile.txt ../tmp/test。這樣會將 myfile.txt 複製到目錄 /tmp/test 中,而且不改變檔案名稱。

    4. 請輸入 ls -l /tmp/test,檢查執行結果。這時 /tmp/test 目錄的內容清單中應該會出現 myfile.txt 這個新檔案。

若要列示其他使用者的主目錄內容,請輸入 ls ~username。在圖形 3.4, "摘錄自標準目錄網路樹"的範例網路目錄樹中,其中一個範例使用者是 tux。在此範例例中,ls ~tux 會列示 tux 的主目錄內容。

[Note]處理檔名或目錄名稱中的空白

如果檔名中包含空格,請在空白前面使用反斜線 (\) 來避免發生空格,或是將檔名包括在單引號或是雙引號中。否則,Bash 會將類似 My Documents 的檔案名稱,解譯成為兩個檔案或是兩個目錄。單引號和雙引號的差別,在於使用雙引號時會產生不同的展開方式。使用單引號,可以確保外圍程序只會解譯單引號所括住的字串。

3.1.4. 有用的外圍程序功能

使用 Bash 輸入指令可以包含大量輸入。下段內容將介紹一些 Bash 功能,讓您的工作能夠更輕鬆,並省去大量輸入的需要。

3.1.4.1. 歷程和補齊

依預設,Bash 會 "記憶" 您輸入過的指令。這項功能稱為歷程。若要重複之前輸入的指令,請按 ,直到該指令顯示在指令提示字元。您也可以按 ,往前翻閱以前輸入的指令清單。您永遠有機會編輯這個指令,例如在執行指令之前按 Enter,便可變更檔案名稱。若要編輯指令行,只要使用方向鍵將游標移至想要的位置,然後開始輸入。使用 Ctrl-R 可在歷程中搜尋。

在輸入開頭字母之後補齊成該檔案或目錄的完整檔案名稱,是 Bash 提供的另外一項有用工具。若要這樣做,請輸入第一個字母,然後按 →|。如果該檔名或路徑可以唯一識別,該名稱就會立刻補齊,而且游標會移至該檔名的最後面。您可以接著輸入指令的下一個選項 (若有需要)。如果檔名或路徑無法提供唯一識別 (因為有好幾個檔名開頭都是相同字母),檔名或路徑就只會重複補齊到可能有好幾種選項的位置。您可以接著第二次按 →|,取得這些選項的清單。在這個動作之後,您可以輸入檔案或路徑的下一個字母,然後按 →| 再嘗試補齊。在配合 →| 補齊檔名和路徑時,您可以同時檢查您要輸入的檔案或路徑是否確實存在 (而且可以確定提供正確拼字)。

3.1.4.2. 萬用字元

外圍程序提供的另一個便利之處,就是可以在路徑展開時使用萬用字元。萬用字元是指可以代表其他字元的字元。Bash 共用三種不同的萬用字元類型:

?

完全相符的任何字元

*

符合任何數目的字元

[set]

符合方括號中指定群組中的某個字元,在此是由字串 set 表示。在使用 set 時,您也可以使用語法 [:class:] 來指定字元類別,其中可指定 alnumalphaascii 等類別。

在群組 ([!set]) 開頭使用 !^,可以比對不同於 set 所指定的字元。

假設您的 test 目錄包含 TestfileTestfile1Testfile2datafile 等檔案,指令 ls Testfile? 會列示 Testfile1Testfile2 這兩個檔案。使用 ls Test* 會在清單中加入 Testfilels *fil* 顯示所有範例檔案。最後,您可以使用 set 萬用字元,找出最後一個字元是數字的所有範例檔案:ls Testfile[1-9]、使用類別,以及 ls Testfile[[:digit:]]

在三種萬用字元中,應用最廣泛的是星號。它可以用來將某一目錄中的所有檔案,複製到另一個目錄,或者使用一個指令來刪除所有檔案。例如指令 rm *fil*,會刪除目前目錄中,名稱中包含字串 fil 的所有檔案。

3.1.4.3. 使用 Less 和 More 來檢視檔案

Linux 包括兩個可以直接在外圍程序檢視文字檔案的小程式:lessmore。.不必啟動編輯器就可以讀取檔案,例如 Readme.txt,只要輸入 less Readme.txt 便可在主控台視窗中顯示文字。使用空格鍵往下捲動一頁。使用 Page UpPage Down 鍵,往前或往回捲動文件。若要結束 less,請按 Q

除了 less 外,您也可以使用較舊的 more 程式。不過,因為它不能讓您往回捲動,所以不是很方便。

程式 less 的名稱來源是得自 less is more (少即是多) 的俗語,也可以方便用來檢視指令輸出。若要知道如何使用,請參閱節 3.1.4.4, "重新導向和管道"

3.1.4.4. 重新導向和管道

正常情況下,外圍程序的標準輸出是您的螢幕或主控台視窗,而標準輸入是鍵盤。然而,外圍程式還提供一項功能,可讓您將輸入或輸出重新導向到另一個物件,例如檔案或其他指令。舉例來說,在配合 >< 符號情況下,您可以將指令輸出轉遞給檔案 (輸出重新導向),或是將檔案當作指令的輸入來使用 (輸入重新導向)。例如,當您希望執行將類似 ls 的指令輸出寫入到檔案時,請輸入 ls -l > file.txt。這樣就可建立名為 file.txt 的檔案,其中會包含由 ls 指令所產生您目前所在目錄的內容。然而,如果已經有存在檔名 file.txt 的檔案,這個指令就會覆寫現有的檔案。若要預防這個情形,請使用 >>。這樣在輸入 ls -l >> file.txt 之後,便只會將 ls 指令的輸出結果附加到目前已存在的 file.txt 檔案。如果這個檔案不存在,接著就會建立。

有時這個功能也可以將檔案作為指令的輸入。舉例來說,您可以使用 tr 指令來置換從檔案重新導向的字元,再將結果寫入標準輸出,即您的螢幕。假設您要將上述範例所指 file.txt 中的所有 t 字元置換成 x,並將結果列印到螢幕上。輸入 tr t x < file.txt 便可完成這項工作。

和標準輸出一樣,標準錯誤輸出也會傳送至主控台。若要將標準錯誤輸出重新導向至名稱為 errors 的檔案,請在相對應的指令附加 2> errors 。如果您附加 >& alloutput,標準輸出和標準錯誤會儲存至名稱為 alloutput 的檔案。

使用管線管道也是一種重新導向,雖然使用管道時不會受到檔案限制。配合 (|) 時,您可以結合好幾種指令,將其中一項指令的輸出當作下一個指令的輸入。舉例來說,若要使用 less 來檢視內容或是目前所在目錄,請輸入 ls | less。這種做法只有在使用 ls 的標準輸出太長的時候,才有意義。例如,如果您檢視 dev 目錄內容時使用 ls /dev,視窗中只會看到一小部份。此時,請使用 ls /dev | less 檢視完整清單。

3.1.5. 歸檔和資料壓縮

現在您已經建立一些檔案和目錄,請考慮歸檔和資料壓縮的用途。假設您將整個 test 目錄包裝成一個檔案,您可以儲存至 USB 隨身碟當成備份或透過電子郵件傳送。若要執行這個動作,請使用指令 tar (用於磁帶歸檔設備)。使用 tar --help,檢視 tar 指令的所有選項。在此說明最重要的選項:

-c

(用於建立) 建立新歸檔。

-t

(用於表格) 顯示歸檔的內容。

-x

(用於擷取) 解開歸檔。

-v

(用於詳細) 建立歸檔時,在螢幕顯示所有檔案。

-f

(用於檔案) 選擇要歸檔的檔案名稱。建立歸檔時,此選項必須永遠在最後面。

若要將 test 目錄和所有檔案與子目錄包裝至一個名稱為 testarchive.tar 的歸檔,請使用 -c-f 選項。為了測試用途,也請新增 -v 來追蹤歸檔的進度,但這不是必要的選項。使用 cd 變更至 test 目錄所在的主目錄後,輸入 tar -cvf testarchive.tar test。接下來,使用 tar -tf testarchive.tar 檢視歸檔檔案的內容。test 目錄及其所有檔案與目錄會在磁碟中保留不變。若要解開歸檔,請輸入 tar -xvf testarchive.tar,但此時請先不要嘗試此選項。

如果要進行檔案壓縮,較常使用的選擇是使用 gzip,或者使用 bzip2 來取得更好的壓縮比例。 只要輸入 gzip testarchive.tar (或 bzip2 testarchive.tar,但是這個範例是使用 gzip)。使用 ls,現在查看檔案 testarchive.tar.gz 是否已經不在該處,而且已經建立 testarchive.tar.gz 檔案。此檔案比較小,因此更適合透過電子郵件傳送或儲存在 USB 隨身碟。

現在,在先前建立的 test2 目錄解開此檔案。若要執行這個動作,請輸入 cp testarchive.tar.gz test2,將檔案複製至該目錄。使用 cd test2 變更至目錄。副檔名為 .tar.gz 的壓縮歸檔,可以使用 gunzip 指令解壓縮。輸入 gunzip testarchive.tar.gz會產生檔案 testarchive.tar,然後需要使用 tar -xvf testarchive.tar 來解開或展開。您也可以透過 tar -xvf testarchive.tar.gz (不用再加入 -z 選項),用一個步驟就解壓縮和擷取壓縮歸檔。使用 ls,您可以看到新的 test 目錄已經建立,而且與主目錄的 test 目錄,內容相同。

3.1.6. 清除

在此課程之後,您應該熟悉 Linux 外圍程序或指令行的基礎概念。您可以使用 rmrmdir 指令,刪除不同的測試檔案與目錄,清除您的主目錄。請在節 3.3, "重要的 Linux 指令"中,找出最重要指令的清單及其功能的簡要說明。