- RedHat Linux用戶基礎(chǔ)
- 紅帽軟件(北京)有限公司著
- 183字
- 2018-12-29 21:53:13
第1章 總覽
1.1 登錄
主要概念
? 在Linux系統(tǒng)中,用戶會話從“登錄(login)”開始。
? 用戶必須有用戶名和密碼才能登錄。
? 如果Linux運(yùn)行X服務(wù)器,用戶可以使用圖形界面登錄。
? 用戶可以從六個虛擬控制臺中的任何一個登錄。
? 可以使用Ctrl+Alt+F1到Ctrl+Alt+F6的六組組合鍵在六個虛擬控制臺之間切換。
? 可以使用Ctrl+Alt+F7切換至默認(rèn)的X服務(wù)器。
? 如果系統(tǒng)支持的話,用戶可以使用遠(yuǎn)程Shell通過網(wǎng)絡(luò)登錄。
? who命令可列出當(dāng)前登錄的用戶及其登錄方式。
1.1.1 講義
1.開始Linux會話
UNIX操作系統(tǒng)的開發(fā)始于20世紀(jì)70年代早期,那時候還沒有個人電腦,多個用戶會同時使用運(yùn)行在一臺主機(jī)電腦上的UNIX。他們不是每人使用一臺個人電腦,而用的是(現(xiàn)在)普遍所謂的“啞終端”——真的只有一個鍵盤和文本顯示器,通過串口與主機(jī)相連。為了向UNIX操作系統(tǒng)標(biāo)識身份,用戶首先要提供用戶ID(userid)和密碼(password)來登錄。
雖然Linux(和其他版本的UNIX)現(xiàn)在已經(jīng)充分利用了個人電腦普及帶來的好處,但還是保留了用戶、密碼、登錄和文本終端這些核心概念。本節(jié)我們討論與Linux系統(tǒng)開始交互會話的各種方式。
2.虛擬控制臺
紅帽企業(yè)版Linux在電腦上為用戶提供了6個可以使用的“虛擬控制臺(virtual console)”。虛擬控制臺充當(dāng)了“啞終端”。使用Ctrl+Alt+F1到Ctrl+Alt+F6的6個組合鍵訪問這6個虛擬控制臺,每個控制臺對應(yīng)這6組功能鍵中的一個。(如果在圖形環(huán)境中,在虛擬控制臺之間嘗試切換前,你應(yīng)該知道使用組合鍵Ctrl+Alt+F7可以回到圖形環(huán)境。)
當(dāng)使用虛擬控制臺在Linux機(jī)器上開始會話時,屏幕會顯示類似以下內(nèi)容:
Red Hat Enterprise Linux Server release 5 (Tikanga) Kernel 2.6.18-8.el5 on an i686 station login:
登錄時用戶輸入用戶名,不要加空格,然后按Enter(回車)鍵。接著,用戶會被提示輸入密碼,密碼在輸入時不會顯示在屏幕上,輸入后再按Enter鍵。成功登錄后,會出現(xiàn)一個歡迎用戶的Shell提示。
Red Hat Enterprise Linux Server release 5 (Tikanga)
Kernel 2.6.18-8.el5 on an i686
station login: elvis
Password:
[elvis@station ~]$
本書其他章節(jié)會介紹在Shell提示符里可以做什么。現(xiàn)在我們只需學(xué)習(xí)如何結(jié)束會話就可以了:輸入“exit”,然后按Enter鍵。虛擬控制臺應(yīng)該返回到原登錄屏幕。
為什么用戶會選擇使用虛擬控制臺而不是圖形環(huán)境呢?首先,機(jī)器可能沒有足夠的內(nèi)存或硬件運(yùn)行圖形環(huán)境,只有虛擬控制臺可以使用。然而,在比較現(xiàn)代的機(jī)器上,對于有經(jīng)驗(yàn)的用戶來說,虛擬控制臺界面常常迅速且有效得多。虛擬控制臺在Linux內(nèi)核中直接實(shí)現(xiàn),所以在調(diào)試系統(tǒng)時它們也很有用,在這種情況下圖形環(huán)境可能不起作用。最后,對于長年待在機(jī)房的網(wǎng)絡(luò)服務(wù)器而言,管理員經(jīng)常希望避免圖形界面給系統(tǒng)管理帶來的復(fù)雜性。
3.X圖形環(huán)境
在現(xiàn)代個人電腦上運(yùn)行時,Linux會使用一個叫做“X服務(wù)器(X server)”的底層程序來提供圖形環(huán)境。作為系統(tǒng)的一個用戶,你不是和X服務(wù)器直接進(jìn)行對話,而是它為你運(yùn)行的所有圖形程序提供運(yùn)行環(huán)境。
X服務(wù)器通常是作為系統(tǒng)啟動序列的一部分而啟動的,當(dāng)它啟動時,它會尋找“第一個可用的”虛擬控制臺。因?yàn)橥ǔS?個虛擬控制臺用于文本終端,X服務(wù)器一般會使用第七個虛擬控制臺。如果你正在使用虛擬控制臺,并且知道X服務(wù)器在機(jī)器上運(yùn)行,通常可以用組合鍵Ctrl+Alt+F7切換到X服務(wù)器。
如果系統(tǒng)被配置為引導(dǎo)到圖形環(huán)境,用戶會見到登錄管理器(Login Manager),如圖1-1所示:

圖1-1 紅帽企業(yè)版Linux登錄管理器
同樣的,用戶登錄時輸入用戶名,然后按Enter鍵,輸入密碼,再按Enter鍵。
4.圖形環(huán)境中的終端
圖形環(huán)境中的應(yīng)用程序菜單位于屏幕的左上角,它是通往大量圖形應(yīng)用程序的門戶,包括網(wǎng)絡(luò)瀏覽器、文本編輯器、圖像編輯器、游戲以及更多的圖形應(yīng)用程序。雖然我們鼓勵你探究這些應(yīng)用程序,但是剛開始學(xué)習(xí)本課程時,我們應(yīng)該集中精力學(xué)習(xí)在Linux環(huán)境下操作的基本原理,如管理文件和進(jìn)程。現(xiàn)在對你而言,圖形環(huán)境中最重要的應(yīng)用程序是終端。
在紅帽企業(yè)版Linux中,最常用的終端應(yīng)用程序是gnome-terminal。要打開一個新的gnome-terminal窗口時,右鍵單擊桌面,選擇彈出菜單中的“打開終端”選項,如圖1-2所示。

圖1-2 打開gnome-terminal
有經(jīng)驗(yàn)的Linux用戶相對于圖形應(yīng)用程序,會偏好命令行界面的靈活性及其強(qiáng)大的功能。這個終端與虛擬控制臺相似,提供了Shell命令行界面,如圖1-3所示。因?yàn)橛脩粢呀?jīng)登錄,并啟動了圖形會話,所以打開新的終端時不需要再次登錄。

圖1-3 gnome-terminal
使用結(jié)束后,輸入命令exit(然后按Enter鍵)關(guān)閉gnome-terminal,也可以單擊終端右上角的“關(guān)閉窗口”按鈕。
5.退出圖形環(huán)境
當(dāng)用戶結(jié)束使用圖形環(huán)境時,可以從“系統(tǒng)”菜單中選擇倒數(shù)第二項退出,“系統(tǒng)”菜單在“位置”菜單的右邊。這會關(guān)閉所有打開的窗口,并將圖形環(huán)境恢復(fù)到登錄屏幕,等待下一個用戶。

圖1-4 退出圖形環(huán)境
6.使用who命令判斷誰在系統(tǒng)上
用戶可以使用who命令來判斷誰在系統(tǒng)上及其登錄方式。用戶可以從任何終端上輸入who命令,然后按Enter鍵,應(yīng)該可以看到類似于下面的輸出:
[elvis@station elvis]$ who
elvis tty2 May 5 15:07
root tty1 May 3 07:50
blondie :0 May 5 08:48
blondie pts/0 May 5 09:03 (:0.0)
第一列列出了已經(jīng)登錄的用戶,最后一列列出了他們登錄的時間。如果有點(diǎn)經(jīng)驗(yàn)的話,就可以從第二列中看出這些用戶登錄的地點(diǎn)。對前兩個用戶elvis和root來說,tty1和tty2分別指虛擬控制臺1和虛擬控制臺2。用戶blondie的第二項:0指的是X服務(wù)器本身;pts/0指的是在X服務(wù)器中打開的第一個終端。不必糾纏于細(xì)節(jié)之中,我們會看到elvis登錄到第二個虛擬控制臺;root登錄到第一個虛擬控制臺;blondie已經(jīng)登錄使用圖形環(huán)境。
7.通過網(wǎng)絡(luò)登錄一臺機(jī)器
用戶可以用ssh(安全Shell,即secure Shell)工具輕易地登錄到遠(yuǎn)程機(jī)器上,無論這臺機(jī)器在同一個房間還是在地球的另一邊。如果遠(yuǎn)程機(jī)器的配置允許遠(yuǎn)程登錄,而且用戶在這臺機(jī)器上有賬戶,那么登錄遠(yuǎn)程機(jī)器與登錄虛擬控制臺一樣容易。在下面的例子中,elvis會在本地機(jī)器station.redhat.com的虛擬控制臺上登錄,然后使用ssh登錄到遠(yuǎn)程機(jī)器nimbus.example.com上,這臺機(jī)器可能在地球的另一邊。
注意觀察以下示例中的Shell提示。由于Linux用戶經(jīng)常用遠(yuǎn)程Shell在機(jī)器間來回切換,這個提示有助于用戶清楚Shell正在運(yùn)行哪一臺機(jī)器。
Red Hat Enterprise Linux Server release 5 (Tikanga) Kernel 2.6.18-8.el5 on an i686 station login: elvis Password: Last login: Thu Apr 3 13:03:06 from hedwig [elvis@station elvis]$ who elvis tty2 May 3 07:48 [elvis@station elvis]$ ssh elvis@nimbus.example.com elvis@nimbus.example.com's password: Last login: Thu May 1 17:38:432003 from station.redhat.com [elvis@nimbus elvis]$ who elvis pts/1 May 3 11:59 (station.redhat.com) [elvis@nimbus elvis]$ exit Connection to nimbus.example.com closed. [elvis@station elvis]$ exit
注意,當(dāng)用戶elvis在遠(yuǎn)程機(jī)器上運(yùn)行who命令時,命令會報告elvis登錄的機(jī)器,即station.redhat.com。
ssh客戶端程序也用在Linux以外的操作系統(tǒng)上。例如,開源應(yīng)用程序PuTTY幾乎可以在所有的Windows機(jī)器上安裝,用于在遠(yuǎn)程Linux服務(wù)器上打開Shell。
1.1.2 示例:使用虛擬控制臺
在下面的例子中,用戶以elvis作為用戶名在第一個虛擬控制臺上登錄,但卻發(fā)現(xiàn)系統(tǒng)配置不當(dāng)。為了修改這個錯誤的配置,他打算切換到第二個虛擬控制臺,以管理員用戶(root)的身份登錄來解決這個問題。然后退出,切換回第一個控制臺,開始工作。
Red Hat Enterprise Linux Server release 5 (Tikanga) Kernel 2.6.18-8.el5 on an i686 station login: elvis Password: Last login: Mon May 5 15:07:16 on tty2 [elvis@station elvis]$ cat /tmp/README cat: /tmp/README: Permission denied [elvis@station elvis]$ who elvis tty1 May 5 15:54
這時,用戶elvis試圖讀取文件/tmp/README,但其權(quán)限不足。由于用戶知道這臺機(jī)器管理員用戶root的密碼,他可以切換到另一個控制臺(使用Ctrl+Alt+F2組合鍵),以用戶root身份登錄,修改文件的權(quán)限,從而解決這個問題。
Red Hat Enterprise Linux Server release 5 (Tikanga) Kernel 2.6.18-8.el5 on an i686 station login: root Password: Last login: Mon May 5 15:54:18 on tty6 [root@station root]# who root tty2 May 5 15:55 elvis tty1 May 5 15:54 [root@station root]# chmod go+r /tmp/README [root@station root]# exit
注意,who命令的輸出顯示用戶以elvis的身份在第一個虛擬控制臺登錄,然后在第二個虛擬控制臺以用戶root身份登錄。現(xiàn)在用戶使用Ctrl+Alt+F1組合鍵切換到第一個虛擬控制臺,繼續(xù)工作。
[elvis@station elvis]$ cat /tmp/README
Kudzu FAQ:
----------
1) So, what is kudzu?
kudzu is the hardware autodetection & configuration tool, originally
introduced in Red Hat Linux 6.1. It detects changes in the system's
hardware configuration, and gives the option of configuring
...
1.1.3 練習(xí)題
(1)為什么Linux被稱作“多用戶”操作系統(tǒng)?( )
A.通過使用多個網(wǎng)絡(luò)連接和啞終端,多個用戶可以同時使用同一臺機(jī)器
B.多個用戶可以使用同一臺機(jī)器,但每次只能由一個用戶使用
C.許多人為Linux操作系統(tǒng)的開發(fā)做出了貢獻(xiàn)
D.Linux沒有被稱作“多用戶”操作系統(tǒng)
(2)以下哪一項不是用虛擬控制臺代替圖形界面的優(yōu)勢?( )
A.虛擬控制臺通常比圖形環(huán)境反應(yīng)快
B.虛擬控制臺在內(nèi)核層操作,因此當(dāng)高層組件配置錯誤時,可用它來調(diào)試系統(tǒng)
C.虛擬控制臺有更直觀,而且可以很容易地得到幫助
D.圖形環(huán)境使系統(tǒng)變得更復(fù)雜、更難維護(hù)
(3)用哪一組組合鍵可以從第一個虛擬控制臺切換到第二個虛擬控制臺?( )
A.Ctrl+Alt+2
C.Ctrl+2(使用數(shù)字鍵盤)
B.Ctrl+Alt+F2
D.以上都不可以
(4)哪一組組合鍵可以從X圖形環(huán)境切換到第二個虛擬控制臺?( )
A.Alt+F2
B.Ctrl+Alt+F2
C.A和B
D.以上都不可以
(5)如果用戶已經(jīng)登錄到X圖形環(huán)境,但卻想用終端命令行界面,應(yīng)該怎么做?( )
A.使用Ctrl+Alt+F3組合鍵切換到虛擬控制臺
B.單擊出現(xiàn)在底部面板上的終端圖標(biāo)
C.右鍵單擊桌面,從彈出菜單中選擇“Open Terminal”
D.A和C
(6)who命令報告什么信息?( )
A.午夜以來登錄到機(jī)器上的用戶
B.當(dāng)前登錄到機(jī)器上的用戶,以及從何處登錄
C.當(dāng)前登錄到機(jī)器上的用戶,以及在會話終止前剩余的時間
D.這個命令從一個互聯(lián)網(wǎng)用戶數(shù)據(jù)庫里搜索用戶
(7)用ssh打開一個遠(yuǎn)程Shell時,以下哪一項不必要?( )
A.遠(yuǎn)程機(jī)器必須運(yùn)行ssh服務(wù)
B.你必須知道機(jī)器上一個賬戶的用戶名和密碼
C.本地機(jī)器必須是Linux機(jī)器
D.你必須知道遠(yuǎn)程機(jī)器的主機(jī)名(hostname)或IP地址
1.2 內(nèi)核、程序和進(jìn)程
主要概念
? Linux內(nèi)核是一個操作系統(tǒng),為進(jìn)程提供運(yùn)行環(huán)境。
? 程序是文件系統(tǒng)內(nèi)的可執(zhí)行文件(通常為二進(jìn)制文件)。
? 進(jìn)程是正在運(yùn)行程序的實(shí)例。
? Shell是一個交互式進(jìn)程,讓用戶指定要運(yùn)行的其他進(jìn)程。
? 雖然紅帽企業(yè)版Linux支持幾個不同版本的Shell,但是它的默認(rèn)Shell是叫做bash的程序。
? ps命令列出了從單個終端上啟動的進(jìn)程。ps aux命令提供了當(dāng)前在機(jī)器上運(yùn)行的所有進(jìn)程的詳細(xì)列表。
1.2.1 講義
1.Linux內(nèi)核
Linux內(nèi)核是一個操作系統(tǒng),就像Windows、Mac OS和OS/2等操作系統(tǒng)一樣。操作系統(tǒng)是程序運(yùn)行的環(huán)境,為程序和計算機(jī)硬件之間的交互作用提供機(jī)制。當(dāng)按下鍵盤的鍵、移動鼠標(biāo)或程序的信息包通過網(wǎng)絡(luò)到達(dá)時,內(nèi)核都會通知程序。內(nèi)核允許程序訪問硬盤,例如讀取其配置文件或存儲的數(shù)據(jù)。

圖1-5 內(nèi)核和進(jìn)程
正如很難向只懂一門語言的人解釋語言的概念一樣,通常很難向計算機(jī)新手或者只用過一種操作系統(tǒng)的人解釋操作系統(tǒng)的概念。操作系統(tǒng)在底層運(yùn)作,因此用戶和它沒有直接的交流,通常也意識不到他們所運(yùn)行的程序在使用它。
2.程序
程序是儲存在計算機(jī)硬盤里的文件。一個程序是一系列非常基本的指令,非常詳細(xì)、明確地告訴操作系統(tǒng)要做什么、何時去做。以下是寫在文件/usr/X11R6/bin/xcalc上的指令,是一個普通的計算器程序。
"While the user isn't doing anything, blink the cursor. When the user hits a key, if it's a number, write it to the screen. If it's not a number, ignore it, unless it's the return key. If it's the return key, add the previous number to the total, and print the total."
當(dāng)然,這些指令不是用英文或者其他任何人類可讀的語言寫入的。在底層,計算機(jī)只會執(zhí)行少量的任務(wù),即256個任務(wù)。想象一下,每個任務(wù)都被編號,從任務(wù)0到任務(wù)255。程序看起來更像以下的指令:
"Do task 23. If the result is greater than 0, do task 45. Otherwise, do task number 82. Take the result, and store it into memory."
由于計算機(jī)可執(zhí)行的任務(wù)取決于不同的CPU,而且由于不同的操作系統(tǒng)用不同的方式對任務(wù)進(jìn)行編號,所以為一種操作系統(tǒng)編譯的程序一般不能在另一種操作系統(tǒng)上使用。
3.進(jìn)程
當(dāng)用戶指示內(nèi)核運(yùn)行一個程序時,內(nèi)核會從程序文件上讀取指令,并將這些指令裝入內(nèi)存,然后開始執(zhí)行這些指令。在內(nèi)存中運(yùn)行的這個程序副本叫做進(jìn)程。注意,同一個程序可以裝入內(nèi)存并運(yùn)行多次,所以任何時候內(nèi)核都可能在運(yùn)行同一程序的幾個不同進(jìn)程。
Linux和大多數(shù)現(xiàn)代操作系統(tǒng)一樣,是一個多任務(wù)操作系統(tǒng)。這說明,Linux內(nèi)核看起來好像在同時運(yùn)行多個進(jìn)程。內(nèi)核以時間片為單位運(yùn)行進(jìn)程。事實(shí)上,內(nèi)核運(yùn)行一個進(jìn)程的時間很短,通常是50毫秒。然后把這個進(jìn)程切換出去,切入另一個進(jìn)程,再運(yùn)行50毫秒。最后,內(nèi)核把所有的進(jìn)程都運(yùn)行了一遍,然后重新選擇進(jìn)程進(jìn)入下一輪循環(huán)。進(jìn)程之間的快速切換使用戶覺得所有的進(jìn)程都在同時運(yùn)行。
4.Shell
Linux用戶經(jīng)常使用一種叫做Shell的特殊程序與內(nèi)核進(jìn)行交互。Shell在終端運(yùn)行時,會打印一個提示符并等待指示。接著用戶輸入一個程序的名稱,讓Shell運(yùn)行該程序。在下面的例子中,用戶elvis讓Shell運(yùn)行一個簡單的日歷程序cal。Shell遵照指示執(zhí)行程序,然后將程序的輸出顯示在終端上:
[elvis@station elvis]$ cal June 2007 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [elvis@station elvis]$
由于用戶可以使用Shell執(zhí)行系統(tǒng)中幾乎所有的任務(wù),所以它是一個既重要又復(fù)雜的程序。我們這門課主要學(xué)習(xí)如何使用Shell有效執(zhí)行任務(wù)。
當(dāng)用戶要求Shell運(yùn)行程序時,我們說用戶向Shell發(fā)出命令。Shell通常被稱作命令行界面(Command Line Interface)。
5.ps命令
ps命令通常用來列出在系統(tǒng)上運(yùn)行的進(jìn)程。沒有參數(shù)的ps命令顯示了在單個終端(或圖形環(huán)境中的終端窗口)上啟動的所有進(jìn)程。在下面的例子中,用戶elvis發(fā)現(xiàn)他的終端上當(dāng)前有兩個運(yùn)行的進(jìn)程:bash Shell和ps命令本身。
[elvis@station elvis]$ ps
PID TTY TIME CMD
1378 pts/1 00:00:00 bash
1418 pts/1 00:00:00 ps
第一列顯示進(jìn)程的PID,或者叫做進(jìn)程ID(Process ID)。在系統(tǒng)中運(yùn)行的每個進(jìn)程都有一個唯一的PID標(biāo)識。第二列標(biāo)識了用戶elvis的終端;第三列報告了這個進(jìn)程消耗了多少CPU時間;第四列標(biāo)識了進(jìn)程對應(yīng)的命令。
ps aux命令顯示所有正在系統(tǒng)中運(yùn)行的進(jìn)程。現(xiàn)在我們不詳細(xì)討論“aux”代表著什么,就當(dāng)作魔法記住就行。我們也不詳細(xì)討論以下的每一列,所有這些都會在以后的教程中講授。現(xiàn)在只需知道,隨時都會有大量的進(jìn)程在Linux系統(tǒng)中運(yùn)行(注意,在下面的輸出中刪去了許多行,用"..."來代替)。
[elvis@station elvis]$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 1388 460 ? S 18:52 0:04 init [
root 2 0.0 0.0 0 0 ? SW 18:52 0:00 [keventd]
...
root 548 0.0 0.2 1460 580 ? S 18:53 0:00 syslogd -m 0
root 552 0.0 0.1 1384 428 ? S 18:53 0:00 klogd -x
rpc 570 0.0 0.2 1560 552 ? S 18:53 0:00 portmap
root 622 0.0 0.2 1496 632 ? S 18:53 0:00 /sbin/cardmgr
root 628 0.0 0.0 0 0 ? SW 18:53 0:00 [kapmd]
root 633 0.0 0.1 1380 484 ? S 18:53 0:00 /usr/sbin/apmd-p
root 644 0.0 0.5 35241512 ? S 18:53 0:00 /usr/sbin/sshd
root 655 0.0 0.3 2040 860 ? S 18:53 0:00 xinetd -stayalive
root 674 0.0 0.9 6204 2504 ? S 18:53 0:00 sendmail: accepti
smmsp 683 0.0 0.8 6004 2256 ? S 18:53 0:00 sendmail: Queue r
root 693 0.0 0.1 1424 444 ? S 18:53 0:00 gpm -t ps/2-m /d
root 702 0.0 0.2 1580 672 ? S 18:53 0:00 crond
xfs 781 0.0 1.5 5272 4004 ? S 18:53 0:00 xfs -droppriv -da
root 800 0.0 0.2 3416 544 ? S 18:53 0:00 rhnsd --interval
root 807 0.0 0.1 1364 396 tty1 S 18:53 0:00 /sbin/mingetty tt
...
root 1375 0.0 0.3 4120 968 pts/1 S 20:11 0:00 su - elvis
elvis 1378 0.0 0.5 4324 1404 pts/1 S 20:11 0:00-bash
elvis 1438 0.0 0.2 2648 696 pts/1 R 20:30 0:00 ps aux
1.2.2 練習(xí)題
(1)以下哪一項不是操作系統(tǒng)?( )
A.紅帽企業(yè)版Linux
C.Microsoft Office
B.Windows 2000
D.Mac OS X
(2)對于Linux操作系統(tǒng)來說,以下哪種說法不正確?( )
A.多個進(jìn)程好像在同時運(yùn)行
B.任何給定程序只有一個實(shí)例可以作為進(jìn)程運(yùn)行
C.程序作為文件保存在文件系統(tǒng)中
D.內(nèi)核在一個時間只能運(yùn)行一個實(shí)例
(3)以下哪種說法是正確的?( )
A.只有用戶root可以從Shell運(yùn)行進(jìn)程
B.Shell通常是用來執(zhí)行其他進(jìn)程的進(jìn)程
C.Shell是內(nèi)核中直接和硬件進(jìn)行溝通的部分
D.Shell只有一個實(shí)例可以作為進(jìn)程運(yùn)行
(4)以下哪一項是紅帽企業(yè)版Linux的默認(rèn)Shell?( )
A./bin/bash
B./bin/tcsh
C./bin/zsh
D./bin/sh
(5)以下哪一項命令會列出進(jìn)程?( )
A.ps
B.lsps
C.lps
D.ls
1.3 查看文件系統(tǒng)
主要概念
? Linux目錄樹的基礎(chǔ)是一個叫做“/”的目錄,被稱為“根目錄(root directory)”。
? 絕對(absolute)文件引用,如“/home/elvis/lsout.txt”,指的是相對于根目錄的文件。
? 相對(relative)文件引用,如“l(fā)sout.txt”,指的是相對于進(jìn)程中當(dāng)前工作目錄的文件。
? ls命令用來列出目錄內(nèi)容。
? cat命令用來檢查文件內(nèi)容。
? 用Shell命令行的“>”字符可以把命令的輸出從終端重定向到文件。
? 用戶的主目錄是用戶可以創(chuàng)建新文件的幾個地點(diǎn)之一。
1.3.1 講義
1.文件和目錄的命名
在Linux系統(tǒng)中,信息和程序作為文件存儲在磁盤上。文件被歸類到目錄中,目錄中包含文件和其他目錄(其他操作系統(tǒng)經(jīng)常將目錄稱為“文件夾”)。這種包括多層次目錄的目錄結(jié)構(gòu)經(jīng)常被稱為“目錄樹(directory tree)”。
目錄樹的根部是名為“/”的目錄,被稱作“根目錄(root directory)”。根目錄中的文件被稱作“/filename”。在紅帽企業(yè)版Linux中,根目錄下主要是其他目錄,如“/etc”。這些子目錄中的文件被稱作“/etc/filename”,目錄樹的每一層都是如此命名的。例如,文件“network”位于目錄“sysconfig”中,這個目錄位于“etc”中,而“etc”目錄又位于“/”中,那么文件的引用為“/etc/sysconfig/network”。
顯然,每次都從根目錄開始引用文件會很麻煩,幸運(yùn)的是,Linux提供了一種更簡便的方式。每個進(jìn)程,包括用戶的Shell,都用“當(dāng)前工作目錄(current working directory)”作為環(huán)境。位于進(jìn)程當(dāng)前工作目錄的文件可以被直接引用為“filename”,前面不用加斜線。位于當(dāng)前工作目錄的子目錄中的文件可引用為dirname/filename,前面也不用加斜線。舉例來說,如果進(jìn)程的當(dāng)前工作目錄是“/etc”,前面提到的文件network,可以被引用為“sysconfig/network”。如果工作目錄是“/etc/sysconfig”,那么這個文件就可以簡單地引用為“network”。
總而言之,引用文件的方式有兩種。相對于根目錄的文件引用總是以“/”開頭,這種引用方式叫做絕對引用。相對于當(dāng)前工作目錄的文件引用不以“/”開頭,這種引用方式叫做相對引用。
2.用ls列出目錄內(nèi)容
用戶從Shell使用ls命令列出目錄的內(nèi)容。(ls是動詞list(列出)的縮寫。)在下面的例子中,用戶elvis想列出目錄/etc/sysconfig/rhn的內(nèi)容。
[elvis@station elvis]$ ls /etc/sysconfig/rhn clientCaps.d install-num rhnsd systemid up2date virt
在沒有參數(shù)(即不指定目錄)的情況下調(diào)用ls命令時,該命令列出Shell當(dāng)前工作目錄的內(nèi)容。如果使用彩色終端,ls還會以不同顏色顯示文件名,幫助區(qū)分常規(guī)文件(白色)和目錄(藍(lán)色)。
ls是一個非常靈活的命令,可以提供大量不同的信息,這將在以后的課程中詳細(xì)討論。
3.用cat查看文件內(nèi)容
ls命令顯示一個給定目錄中所含的文件,但不會顯示這些文件的內(nèi)容。有幾個命令可用來瀏覽文件內(nèi)容,最簡單的是cat命令。給這個命令一個文件列表,它會將這些文件內(nèi)容并置(concatenates)輸出到終端。如果只給一個文件名,文件的內(nèi)容會作為輸出顯示出來。
在下面的例子中,用戶elvis想查看配置文件/etc/hosts的內(nèi)容。
[elvis@station elvis]$ cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.0.254 server1.example.com server1
192.168.0.1 station1.example.com station1
現(xiàn)在不必關(guān)心文件的內(nèi)容是什么,只要意識到cat命令可以顯示文件的全部內(nèi)容就可以了。
如果你指示cat顯示一個很長的文件或二進(jìn)制(非文本)文件,cat命令也會照常執(zhí)行。還有更好的瀏覽大型文件的命令,可以逐頁瀏覽,這將在以后的內(nèi)容中介紹。
4.將命令輸出重定向到文件中
當(dāng)執(zhí)行l(wèi)s命令和cat命令時,命令的輸出在終端上顯示。在Linux系統(tǒng)中,大部分生成文本輸出的命令都會使用一個常用的UNIX概念,叫做“標(biāo)準(zhǔn)輸出(standard out)”流。在默認(rèn)狀態(tài)下,這個數(shù)據(jù)流連接到終端。bash Shell允許用戶將標(biāo)準(zhǔn)輸出流“重定向(redirect)”到其他地點(diǎn)。我們現(xiàn)在只學(xué)習(xí)最簡單的方法,使用“>”將標(biāo)準(zhǔn)輸出重定向到文件中。
在下面的例子中,用戶elvis要再次列出目錄/etc/sysconfig/rhn的內(nèi)容,但是這次他把輸出重定向到一個新建的文件中。
[elvis@station elvis]$ ls /etc/sysconfig/rhn > lsout.txt [elvis@station elvis]$ ls lsout.txt [elvis@station elvis]$ cat lsout.txt install-num rhnsd systemid up2date virt
命令ls /etc/sysconfig/rhn的輸出沒有在終端上顯示,而是保存到一個名為lsout.txt的文本文件中。用戶elvis接著在當(dāng)前工作目錄上使用ls命令查看這個新建的文件,再使用cat命令查看文件內(nèi)容。用UNIX的說法就是,用戶elvis “將ls命令的輸出重定向到文件lsout.txt中”。
5.權(quán)限和用戶的主目錄
注意,如果用戶elvis試圖把輸出重定向到Shell當(dāng)前工作目錄以外的文件中,會出現(xiàn)什么情況呢?
[elvis@station elvis]$ ls /etc/sysconfig/rhn > /etc/lsout.txt
-bash: /etc/list.txt: Permission denied
-bash: /etc/list.txt: Permission denied
用戶elvis會遇到另一個常見的Linux概念:文件所有權(quán)和權(quán)限。用戶elvis試圖創(chuàng)建新文件/etc/lsout.txt,但是他沒有在目錄/etc中創(chuàng)建文件的權(quán)限。
在默認(rèn)情況下,紅帽企業(yè)版Linux不允許用戶隨便在任意地點(diǎn)新建文件。事實(shí)上,能夠新建文件的地點(diǎn)只有幾個。每個用戶都有主目錄,他們可以在那里創(chuàng)建新文件(和新的子目錄)。幸運(yùn)的是,當(dāng)用戶登錄到Linux會話時,Shell將用戶的主目錄作為它的當(dāng)前工作目錄。在默認(rèn)情況下,紅帽企業(yè)版Linux中用戶的主目錄被命名為“/home/username”,“username”用用戶的用戶名代替。
我們在以后的教程中會詳細(xì)討論文件系統(tǒng)和權(quán)限。現(xiàn)在只需知道,用戶一般只能在自己的主目錄中創(chuàng)建文件。
1.3.2 示例:將命令的輸出重定向到文件中
用戶prince想用cal命令將本月的日歷保存到文件calendar.txt中。
[prince@station prince]$ cal ① June 2007 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [prince@station prince]$ cal > calendar.txt ② [prince@station prince]$ ls ③ calendar.txt [prince@station prince]$ cat calendar.txt ④ June 2007 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
①用戶prince先直接查看了cal命令的輸出。②用戶prince再次運(yùn)行cal命令,將輸出重定向到文件calendar.txt中。
③用戶prince列出自己當(dāng)前工作目錄(此處是主目錄)的內(nèi)容,確認(rèn)這個文件已經(jīng)被創(chuàng)建。
④用戶prince檢查這個新建文件的內(nèi)容,確定它含有cal命令的輸出。
1.3.3 練習(xí)題
(1)假設(shè)Shell的當(dāng)前工作目錄是“/home/elvis”,以下哪一項是對文件/home/elvis/Mail/sent的引用?( )
A.Mail/sent
B./Mail/sent
C.sent
D./sent
(2)用戶elvis的Shell當(dāng)前工作目錄是“/home/elvis”,以下哪一項是對文件received的引用?這個文件位于主目錄下的Mail目錄中。( )
A./home/elvis/Mail/received
C.received
B.Mail/received
D.A和B
(3)以下哪一項命令會列出目錄“/usr/lib”中的文件?( )
A.cat /usr/lib
C./usr/lib list
B.lsdir /usr/lib
D.ls /usr/lib
(4)以下哪一項命令會成功地把cal命令的輸出重定向到文件lsout.txt中?( )
A.lsout.txt > cal
C.cal > lsout.txt
B.cal ==> lsout.txt
D.cal } lsout.txt
(5)用戶elvis的主目錄是/home/elvis,以下哪一項命令可以成功地在默認(rèn)的紅帽企業(yè)版Linux系統(tǒng)上運(yùn)行?( )
A.ls /etc > /etc/lsetc.txt
B./etc/lsetc.txt < ls /etc
C.ls /etc > /home/elvis/lsetc.txt
D./home/elvis/lsetc.txt < ls /etc
1.4 運(yùn)行命令
主要概念
? 像任何語言一樣,bash Shell使用一種特定的語法。
? 任何一個命令行的第一個詞都是要運(yùn)行程序的名稱。
? 可用命令行選項(通常是任選的)修改命令的行為,命令行選項總是用一個或兩個連字符開頭(-或--)。
? 跟隨命令和任何命令行選項的詞叫做命令的“參數(shù)(argument)”。
? 有些命令行選項也帶有參數(shù)。
? 命令通常支持命令行選項“--help”、“-h”和“-?”,這些命令行選項給出如何使用命令的用法概要。
1.4.1 講義
1.命令行語法
命令行界面有許多優(yōu)點(diǎn),包括高效和靈活,但使用起來并不簡單。幸好(幾乎)所有的程序都遵循慣例。熟悉了這些慣例,學(xué)習(xí)新的程序就會容易很多。
將輸入命令行的命令和英文句子作比較,我們會說命令有動詞、副詞和直接賓語。動詞是要運(yùn)行的命令;副詞是可以修改命令(“靜默輸出”或“詳盡輸出”)行為的各種命令行選項;剩余的詞是直接賓語(命令執(zhí)行的對象)。和語言一樣,命令行語言有不規(guī)則形式,而且任何規(guī)則都有例外。
2.命令
命令的第一個詞一般是位于文件系統(tǒng)某個位置的、以文件形式存在的一個程序的名稱。比如說,在前面的章節(jié)中所使用的ps命令和who命令。如果想知道對應(yīng)哪個文件,可以使用一個叫做which的命令。先輸入which命令,接著輸入另一個命令的名稱,就會發(fā)現(xiàn)目標(biāo)文件。
[elvis@station elvis]$ which ps /bin/ps [elvis@station elvis]$ which who /usr/bin/who
運(yùn)行命令時,Shell進(jìn)程指示內(nèi)核把指定的程序作為另一個進(jìn)程分開執(zhí)行,并將進(jìn)程的輸出(或更準(zhǔn)確地說,標(biāo)準(zhǔn)輸出流)寫到終端。然后Shell暫停,等待命令的進(jìn)程結(jié)束運(yùn)行。一旦命令結(jié)束,Shell會給出另一個提示符,等待下一個命令。
3.命令行選項
許多命令可以指定不同的命令行選項來修改它們的行為,列出目錄內(nèi)容的ls命令就是這樣一個簡單的例子。看以下ls命令的三種使用方法,每種用法都列出目錄/usr中的文件。
[elvis@station elvis]$ ls /usr bin etc include lib local share tmp dict games kerberos libexec sbin src X11R6 [elvis@station elvis]$ ls -s /usr total 132 40 bin 4 games 40 lib 8 sbin 0 tmp 4 dict 8 include 4 libexec 8 share 4 X11R6 4 etc 4 kerberos 0 local 4 src [elvis@station elvis]$ ls -l /usr total 132 drwxr-xr-x 2 root root 40960 Apr 25 06:36 bin drwxr-xr-x 2 root root 4096 Jan 24 18:52 dict drwxr-xr-x 2 root root 4096 Jan 24 18:52 etc drwxr-xr-x 4 root root 4096 Jan 24 18:52 games drwxr-xr-x 100 root root 8192 Apr 11 05:55 include drwxr-xr-x 8 root root 4096 Mar 31 21:52 kerberos drwxr-xr-x 90 root root 40960 Apr 25 06:36 lib drwxr-xr-x 10 root root 4096 Apr 11 05:51 libexec lrwxrwxrwx 1 root root 14 Sep 132002 local -> ../home/local/ drwxr-xr-x 2 root root 8192 Apr 25 06:36 sbin drwxr-xr-x 212 root root 8192 Apr 23 16:30 share drwxrwxr-x 5 root pst 4096 Apr 25 08:12 src lrwxrwxrwx 1 root root 10 Apr 1 11:07 tmp -> ../var/tmp drwxr-xr-x 8 root root 4096 Jan 24 18:52 X11R6
第一個ls命令只列出目錄的內(nèi)容;第二個ls -s命令包括命令行選項-s,給出內(nèi)容的大小;第三個ls -l命令顯示詳細(xì)列表,包括文件的各種信息,如所有者、權(quán)限和修改時間。我們現(xiàn)在先不必考慮輸出的具體內(nèi)容,這將在第2章有關(guān)使用文件系統(tǒng)的教程中討論。我們現(xiàn)在只需要知道命令行選項可以改變ls命令的基本行為即可。
短命令行選項
注意,以上用到的兩個命令行選項-s和-l都是單字母選項,這被稱為“短命令行選項”。有時候,短命令行選項也可以帶有參數(shù)。比如說,ls命令帶有命令行選項-w,這個選項指定輸出的“寬度(字符個數(shù))”。我們來看下面的例子:
[elvis@station elvis]$ ls -w 40 /usr/ bin games lib sbin tmp dict include libexec share X11R6 etc kerberos local src
在這里,40不是ls命令的參數(shù),而是命令行選項-w的參數(shù)。(輸出的寬度應(yīng)該是多少?40個字符。)命令行選項參數(shù)在命令行選項之后。你怎么知道哪個命令行選項帶有參數(shù),哪個沒有呢?根據(jù)經(jīng)驗(yàn)判斷,我們也會很快談到尋求幫助的方法。
多個短命令行選項
可以同時使用多個命令行選項。多個命令行選項會串在一起,擠在命令和命令參數(shù)之間。下面的例子介紹了ls命令的一個新的命令行選項-r,它反轉(zhuǎn)了排列的順序。我們來看看它如何與選項-s和-w一起使用。
[elvis@station elvis]$ ls -s -w 40-r /usr/ total 132 4 X11R6 0 local 4 games 0 tmp 4 libexec 4 etc 4 src 40 lib 4 dict 8 share 4 kerberos 40 bin 8 sbin 8 include
有時,在使用多個命令行選項時,用戶可以用簡寫把所有的選項“串”到一個連字符上(-),如下例所示:
[elvis@station elvis]$ ls -srw 40 /usr/
total 132
4 X11R6 0 local 4 games
0 tmp 4 libexec 4 etc
4 src 40 lib 4 dict
8 share 4 kerberos 40 bin
8 sbin 8 include
所有不帶參數(shù)的單字符選項(此處是-s和-r)可以串在一起,共用一個“-”。如果選項帶有參數(shù),如-w 40,只有將它放在最后,它才能和其他選項共用一個連字符。這樣的話,可以在命令行上接著指定它的參數(shù)。
長命令行選項
在早期的UNIX操作系統(tǒng)中,所有的命令行選項都使用以上語法。隨著UNIX的發(fā)展,人們開始意識到他們需要“長命令行選項”。與單字符選項不同的是,長選項由詞組成。長選項不是用一個連字符開頭,而是用兩個連字符(--)開頭。有些命令只使用短選項,有些只使用長選項。另外一些命令,如ls命令,兩種都可以使用。
[elvis@station elvis]$ ls --size /usr/
total 132
40 bin 4 games 40 lib 8 sbin 0 tmp
4 dict 8 include 4 libexec 8 share 4 X11R6
4 etc 4 kerberos 0 local 4 src
長命令行選項帶有參數(shù)時,其語法會稍有不同。在這種情況下,參數(shù)不是作為一個分開的詞跟在選項后面,而是和選項連在一起,由“=”隔開,如--width=40。注意,短命令行選項和長命令行選項可以混合使用。
[elvis@station elvis]$ ls --width=40--size -r /usr/
total 132
4 X11R6 0 local 4 games
0 tmp 4 libexec 4 etc
4 src 40 lib 4 dict
8 share 4 kerberos 40 bin
8 sbin 8 include
4.參數(shù)
與命令行選項相比,參數(shù)相對簡單。跟在命令名后和命令行選項后的任何詞,叫做命令的參數(shù)。命令是否需要參數(shù),或需要什么樣的參數(shù),取決于命令本身。舉例來說,如果在ls命令后加帶參數(shù),該命令會把參數(shù)作為文件或目錄列出。ps命令不需要參數(shù)。cal命令可以不帶參數(shù),或帶1到2個參數(shù),如一個月份一個年份。學(xué)習(xí)程序需要哪些參數(shù)以及如何處理參數(shù)是學(xué)習(xí)如何使用命令的一部分。
5.獲取使用幫助
如何記住所有的命令行選項呢?你不需要全部記憶。有經(jīng)驗(yàn)的Linux用戶都知道如何找到適用的選項。大多數(shù)命令都支持長命令行選項“--help”以及短命令行選項“-h”或“-?”。這些選項通常會指示命令提供“用法(usage)”信息,而不是執(zhí)行常規(guī)的操作。用法信息是一個關(guān)于所需參數(shù)、所支持的命令行選項及其意義的概要說明。注意,ls命令生成的用法信息相當(dāng)長,在下面的輸出中許多內(nèi)容用“…”來代替。
[elvis@station elvis]$ ls --help
Usage: ls [OPTION]... [FILE]... ①
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuSUX②nor --sort.
Mandatory arguments to long options are mandatory for short options too.
-a, --all do not hide entries starting with .
-A, --almost-all do not list implied . and ..
--author print the author of each file
-b, --escape print octal escapes for non-graphic characters
...
-k like --block-size=1K
-l use a long listing format
...
-r, --reverse reverse order while sorting
-R, --recursive list subdirectories recursively
-s, --size ③ print size of each file, in blocks
...
-v sort by version
-w, --width=COLS ④ assume screen width instead of current value
-x list entries by lines instead of by columns
...
用法信息中要注意的幾點(diǎn):
①任選的部分在方括號中([和])。
②此處,用法信息是指使用縮寫來表示多個短命令行選項。
③注意:ls命令支持短命令行選項(-s)和長命令行選項(--size)兩種形式。
④此處是-w或--width命令行選項,需要參數(shù)。
用法信息并不提供命令的完整參考,只是給你足夠的信息幫助記憶。在這本教程后面的章節(jié)中,我們會討論更多獲取幫助的方法。
1.4.2 示例:學(xué)習(xí)使用cat命令
用戶madonna的朋友告訴她,可以使用cat命令查看文件內(nèi)容。她以前從沒用過這個命令,想學(xué)習(xí)如何使用它。她先查看了這個命令的用法信息。
[madonna@station madonna]$ cat --help
Usage: cat [OPTION] [FILE]...
Concatenate FILE(s), or standard input, to standard output.
-A, --show-all equivalent to -vET
-b, --number-nonblank number nonblank output lines
-e equivalent to -vE
-E, --show-ends display $ at end of each line
-n, --number number all output lines
-s, --squeeze-blank never more than one single blank line
-t equivalent to -vT
-T, --show-tabs display TAB characters as ^I
-u (ignored)
-v, --show-nonprinting use ^ and M- notation, except for LFD and TAB
--help display this help and exit
--version output version information and exit
With no FILE, or when FILE is -, read standard input.
Report bugs to <bug-coreutils@gnu.org>.
她對這些用法信息并不完全理解,比如說里面談到的標(biāo)準(zhǔn)輸入和輸出,但她明白第一行,知道cat命令用文件名作為參數(shù)。她試著顯示文件 /etc/anacrontab的內(nèi)容。
[madonna@station madonna]$ cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
1 65 cron.daily run-parts /etc/cron.daily
7 70 cron.weekly run-parts /etc/cron.weekly
30 75 cron.monthly run-parts /etc/cron.monthly
在看了用法信息列出的幾個命令行選項后,她注意到命令行選項 -n標(biāo)出輸出行的行數(shù)。她試著使用這個命令行選項。
[madonna@station madonna]$ cat -n /etc/anacrontab
1 # /etc/anacrontab: configuration file for anacron
2
3 # See anacron(8) and anacrontab(5) for details.
4
5 SHELL=/bin/sh
6 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
7
8 1 65 cron.daily run-parts /etc/cron.daily
9 7 70 cron.weekly run-parts /etc/cron.weekly
10 30 75 cron.monthly run-parts /etc/cron.monthly
從輸出的內(nèi)容中可以容易地看出文件包含10行,或著容易地查看第6行。她懷疑從第8行到第10行的詞之間的空格其實(shí)是Tab字符。用法信息中說命令行選項“-t”會用“^I”代替任何Tab字符,她試著證實(shí)自己的懷疑。
[madonna@station madonna]$ cat -t /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
1^I65^Icron.daily^I^Irun-parts /etc/cron.daily
7^I70^Icron.weekly^I^Irun-parts /etc/cron.weekly
30^I75^Icron.monthly^I^Irun-parts /etc/cron.monthly
她從用法信息中得知,命令行選項-A“和-vET一樣”,她認(rèn)為這是短命令行選項-v、-E和-T的結(jié)合。她把兩者都試驗(yàn)了一下,看自己的理解是否正確。
[madonna@station madonna]$ cat -A /etc/anacrontab
# /etc/anacrontab: configuration file for anacron$
$
# See anacron(8) and anacrontab(5) for details.$
$
SHELL=/bin/sh$
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin$
$
1^I65^Icron.daily^I^Irun-parts /etc/cron.daily$
7^I70^Icron.weekly^I^Irun-parts /etc/cron.weekly$
30^I75^Icron.monthly^I^Irun-parts /etc/cron.monthly$
[madonna@station madonna]$ cat -vET /etc/anacrontab
# /etc/anacrontab: configuration file for anacron$
$
# See anacron(8) and anacrontab(5) for details.$
$
SHELL=/bin/sh$
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin$
$
1^I65^Icron.daily^I^Irun-parts /etc/cron.daily$
7^I70^Icron.weekly^I^Irun-parts /etc/cron.weekly$
30^I75^Icron.monthly^I^Irun-parts /etc/cron.monthly$
她看到完全一樣的輸出結(jié)果,確定自己對用法信息的理解是正確的。
1.4.3 練習(xí)題
touch命令用來更新指定文件上的時間戳。使用以下用法信息和touch命令的調(diào)用示例回答后面8個問題。
[madonna@station madonna]$ which touch /bin/touch [madonna@station madonna]$ touch --help Usage: touch [OPTION]... FILE... Update the access and modification times of each FILE to the current time. Mandatory arguments to long options are mandatory for short options too. -a change only the access time -B SEC, --backward=SEC date back SEC seconds -c, --no-create do not create any files -d, --date=STRING parse STRING and use it instead of current time -F SEC, --forward=SEC date forward SEC seconds -f (ignored) -m change only the modification time -r, --reference=FILE use this file's times instead of current time -t STAMP use [[CC]YY]MMDDhhmm[.ss] instead of current time --time=WORD set time given by WORD: access atime use (same as -a) modify mtime (same as -m) --help display this help and exit --version output version information and exit [madonna@station madonna]$ touch -r /etc/services touch: file arguments missing Try `touch --help' for more information. [madonna@station madonna]$ tooch /etc/services -bash: tooch: command not found [madonna@station madonna]$ touch -k /etc/services touch: invalid option -- k Try `touch --help' for more information. [madonna@station madonna]$ touch -r /etc/services /tmp/foo
(1)以下哪一項是對touch命令的合法調(diào)用?( )
A.touch -k /etc/services
C.touch -nocreate /etc/services
B.touch -ac /etc/services
D.touch -t
(2)以下哪一項是對touch命令的合法調(diào)用?( )
A.touch -frm /etc/services
C.touch --no-create -a /etc/services
B.touch --cm /etc/services
D.touch
(3)以下哪一項可以最好地解釋用戶madonna使用touch -r /etc/services的時候會得到“file arguments missing(缺少文件參數(shù))”錯誤信息的原因?( )
A.命令行選項-r需要參數(shù),用戶madonna沒有給出
B.文件/etc/services不存在
C.系統(tǒng)中沒有touch這個命令
D.命令行選項-r不被支持
(4)以下哪一項可以最好地解釋用戶madonna使用tooch/etc/services的時候會得到“command not found(找不到命令)”錯誤信息的原因?( )
A.文件/etc/services不存在
B.用戶madonna把命令名拼錯了,找不到命令名為tooch的命令
C.命令touch必須帶有命令行選項-a
D.用戶madonna沒有權(quán)限執(zhí)行這個命令
(5)以下哪一項可以最好地解釋用戶madonna使用touch -k/etc/services的時候會得到“invalid option(選項無效)”錯誤信息的原因?( )
A.文件/etc/services不存在
B.用戶madonna把命令名拼錯了,找不到命令名為touch的命令
C.命令touch必須帶有命令行選項-a
D.命令touch不支持命令行選項-k
(6)當(dāng)用戶madonna運(yùn)行命令touch-r/etc/services /tmp/foo時,/etc/services的作用是什么?( )
A.它是命令touch的參數(shù)
B.它是命令行選項-r的參數(shù)
C.它是要運(yùn)行的命令的名稱
D.拼錯了,導(dǎo)致命令無法運(yùn)行
(7)當(dāng)用戶從命令行上運(yùn)行who命令時,以下哪一項能夠最好地描述出現(xiàn)的情況?( )
A.Shell指示內(nèi)核將文件/usr/bin/who的內(nèi)容作為獨(dú)立的進(jìn)程來執(zhí)行,將進(jìn)程的輸出顯示在終端上
B.Shell執(zhí)行名為who的系統(tǒng)調(diào)用,直接向Linux內(nèi)核要輸出
C.Shell退出,由進(jìn)程who代替。進(jìn)程who結(jié)束后,由新的Shell進(jìn)程代替
(8)使用長命令行選項時,為什么在選項前用雙連字符(如--size),而不使用單連字符(如-size)?( )
A.長命令行選項的發(fā)明者非常喜歡打字
B.選項-size可能會被誤解為短命令行選項-s -i -z -e的快捷方式,而不是單個的長命令行選項
C.單連字符表示強(qiáng)制的命令行選項參數(shù)
D.長命令行選項的發(fā)明者喜歡把事情復(fù)雜化
1.5 管理終端
主要概念
? 各種控制鍵組合,如Ctrl+C、Ctrl+D和Ctrl+Z等,有助于從終端上管理進(jìn)程。
? 通常用reset命令將終端設(shè)置恢復(fù)為正常狀態(tài)。
? bash Shell提供了Tab補(bǔ)全功能(Tab completion),在指定命令或文件時節(jié)省了很多打字時間。
? 了解Linux如何引用設(shè)備,區(qū)分各種類型的終端。
1.5.1 講義
1.控制終端
bash Shell及其運(yùn)行的終端是有經(jīng)驗(yàn)的Linux用戶使用的主要工具。這個課程專門有一整章教程討論bash Shell的強(qiáng)大功能。本節(jié)我們介紹終端共有的一些特征和bash Shell極有用的一項功能——Tab補(bǔ)全功能(Tab completion)。
2.復(fù)位終端
終端顯示信息時,會逐字節(jié)顯示。計算機(jī)在處理人可讀文本時,通常使用ASCⅡ格式將字符編碼為整數(shù)字節(jié)值。雖然一個字節(jié)最多可以編入256個不同的值,但只有一小部分(大約100個)用作文本字符和標(biāo)點(diǎn)符號,其他值用來編碼控制鍵組合和其他特殊情況。
有時,用戶會不小心(或有意)指示終端顯示格式?jīng)]有被編碼為ASCⅡ文本的數(shù)據(jù),如圖像或可執(zhí)行文件。終端會盡量執(zhí)行,但經(jīng)常出現(xiàn)的是亂碼。更麻煩的是,終端可能會死在圖形模式中,因此即便是正常的ASCⅡ文本看起來也不可讀。
在這種情況下,reset命令可將終端恢復(fù)到正常狀態(tài)。通常當(dāng)你使用這個命令時,你甚至看不到自己在鍵入它。但如果在一個不可讀的bash提示下,輸入reset命令然后按Enter鍵,可以把終端恢復(fù)到正常狀態(tài)。
3.終端控制組合鍵
Linux終端與它的前身——電傳打字機(jī)和“啞終端”或vt100型控制臺——有許多相似之處。這些早期的設(shè)備有發(fā)送“特殊”信號或信號序列的機(jī)制,信號序列代表正常鍵入的字符流以外的一些事件,如后退一格、換行、響鈴或信息傳遞結(jié)束。Linux終端和它的前身一樣,使用Ctrl鍵發(fā)送這些“特殊”信號。
表1-1總結(jié)了所有Linux終端共享的許多常用控制組合鍵及其常見用法。在這之后我們還會根據(jù)其適用性進(jìn)一步討論這些控制組合鍵。
表1-1 Linux終端控制組合鍵

Ctrl+C
Ctrl+C可能是最有用的組合鍵,幫助用戶停止現(xiàn)在進(jìn)行的工作。使用bash Shell時,按Ctrl+C可以終止當(dāng)前運(yùn)行的進(jìn)程,返回到bash提示。
設(shè)備節(jié)點(diǎn)/dev/zero是偽設(shè)備,讀取時會返回?zé)o數(shù)個(二進(jìn)制)零。/dev/null設(shè)備節(jié)點(diǎn)也是一個偽設(shè)備,會丟棄任何寫入其中的信息。因此以下命令會永遠(yuǎn)運(yùn)行下去,讀取零,然后丟棄。處于這種情況的用戶可以使用Ctrl+C取消這個命令。
[elvis@station elvis]$ cat /dev/zero > /dev/null (... 用戶鍵入Ctrl+C ...) [elvis@station elvis]$
Ctrl+D
在以后的教程中我們會談到,許多UNIX命令直接從鍵盤讀取輸入。但對于新的UNIX用戶來說,常常是搞不清楚如何通知命令何時停止讀取輸入。解決這個問題的辦法是用組合鍵Ctrl+D。這組控制鍵向讀取的進(jìn)程傳送“信息傳遞完畢”的信號(一般理解為“文件結(jié)束”)。
wc命令在沒有給出文件名作為參數(shù)的情況下,會對用戶從鍵盤輸入的行、詞和字符進(jìn)行計數(shù)。用戶使用組合鍵Ctrl+D表示輸入結(jié)束。
[elvis@station elvis]$ wc polly wants a cracker polly wants a cracker polly wants a cracker (... 用戶鍵入Ctrl+D ...) 3 12 66 [elvis@station elvis]$
命令wc會負(fù)責(zé)地報告,用戶輸入了3行,共有12個詞,使用了66個字符(這個功能現(xiàn)在可能沒有用,但在以后的教程中我們還會學(xué)到更多wc的用法)。如果用戶使用Ctrl+C又會怎么樣呢?
Ctrl+Z
組合鍵Ctrl+Z用來掛起程序,掛起的程序可用fg(“foreground(前臺)”的縮寫)命令恢復(fù)。在進(jìn)行ftp會話時,用戶elvis想要確認(rèn)Shell的當(dāng)前工作目錄。他使用Ctrl+Z掛起正在進(jìn)行的ftp會話,從Shell運(yùn)行pwd命令,然后用fg命令恢復(fù)ftp會話。
[elvis@station elvis]$ ftp ftp.redhat.com Trying 66.187.232.51... Connected to ftp.redhat.com (66.187.232.51). 220 Red Hat FTP server ready. All transfers are logged. (FTP) Name (ftp.redhat.com:elvis): anonymous 331 Please specify the password. Password: 230 Login successful. Have fun. Remote system type is UNIX. Using binary mode to transfer files. ftp> (... 用戶鍵入Ctrl+Z ...) [1]+ Stopped ftp ftp.redhat.com [elvis@station elvis]$ pwd /home/elvis [elvis@station elvis]$ fg ftp> ftp.redhat.com ftp> ls 227 Entering Passive Mode (66,187,232,51,67,212) 150 Here comes the directory listing. drwxr-xr-x 6 ftp ftp 4096 May 24 01:33 pub 226 Directory send OK. ...
以這種方式管理進(jìn)程是相當(dāng)復(fù)雜的,在以后的教程中我們會再討論。現(xiàn)在我們只要知道Ctrl+Z用來掛起、fg命令用來恢復(fù)就可以了。
Ctrl+U
Ctrl+U一般用來“擦除”當(dāng)前的行。如果你所在的bash命令行錯誤繁多,你懶得修改,不如使用Ctrl+U重新來過。如果你輸入密碼時弄錯了,也可以使用Ctrl+U。因?yàn)檩斎氲拿艽a不會在屏幕上顯示,有時很難知道到底輸入了什么,很難改動,不如使用Ctrl+U組合鍵全部擦除。
Ctrl+H
Ctrl+H和Backspace(退格)鍵的功能完全一樣。但在有些終端上,Backspace鍵被錯誤地映射,不能正確工作。而Ctrl+H幾乎總是可以在這些情況下正常發(fā)揮作用。
Ctrl+L
Ctrl+L傳統(tǒng)上用來停止打印當(dāng)前頁并開始下一頁。如果使用在線終端,可以用它來刷新屏幕。對于許多基于屏幕的程序而言,包括vi和nano編輯器,如果意外的信息弄亂了顯示屏,使用Ctrl+L可以讓程序刷新屏幕,正確地重繪屏幕。
在bash Shell中,Ctr+L指示bash清屏,但保留當(dāng)前的命令行。Ctrl+Q
在Ctrl+S“鎖住”屏幕后,Ctrl+Q“解鎖”屏幕(讓它重新啟動)。雖然在使用過Ctrl+Q后,才能用這個組合鍵,我們先介紹它(作為更有用的命令)是因?yàn)椋瑤缀鯖]有人會故意使用Ctrl+S,但新的UNIX用戶有的時候會不小心點(diǎn)擊Ctrl+S組合鍵,不明白為什么他們的屏幕會鎖住。如果你的機(jī)器出現(xiàn)死屏現(xiàn)象,試著使用Ctrl+Q組合鍵,看能否解鎖。
Ctrl+S
見上一項Ctrl+Q。
Ctrl+J
幾乎從來不用(一般使用Enter鍵)。
Ctrl+G
唯一的用途是讓終端發(fā)出響鈴聲。
4.識別終端
和其他設(shè)備相似,程序通過位于目錄/dev的設(shè)備節(jié)點(diǎn)和終端在底層交流。比如說,使用設(shè)備節(jié)點(diǎn)/dev/tty1和第一個虛擬控制臺交流。大多數(shù)進(jìn)程記錄啟動它們的終端,用戶的登錄會話通常與他們使用的終端相關(guān)。在辨識這些終端時,終端用它的設(shè)備節(jié)點(diǎn)來表示,如tty1。
在以下的摘錄中,用戶elvis使用who命令列出一臺機(jī)器上的當(dāng)前用戶,他還用ps命令列出在他的終端上運(yùn)行的當(dāng)前進(jìn)程。在這兩種情況下,終端都在“TTY”一列中給出。
[elvis@station elvis]$ who root tty2 Jun 21 10:12 elvis tty3 Jun 21 16:50 blondie :0 Jun 21 10:13 blondie pts/0 Jun 21 16:43 (:0.0) blondie pts/1 Jun 21 10:14 (:0.0) blondie pts/2 Jun 21 10:31 (:0.0) blondie pts/3 Jun 21 10:39 (:0.0) [elvis@station elvis]$ ps PID TTY TIME CMD 4384 tty3 00:00:00 bash 4427 tty3 00:00:00 ps
Linux將許多設(shè)備都當(dāng)成終端,包括虛擬控制臺、串行線連接的VT100終端、調(diào)制解調(diào)器等。表1-2列出一些常用的終端設(shè)備的慣例名稱。
表1-2 終端設(shè)備名稱

5.Tab補(bǔ)全功能
Tab補(bǔ)全功能并不是終端的特征,而是bash Shell的特征。輸入命令和文件的名稱時,能夠熟練使用Tab鍵,可以節(jié)省很多時間和精力。
往bash命令行輸入第一個詞作為命令名的時候,輸入你要執(zhí)行的命令,在完成之前按Tab鍵,會出現(xiàn)以下三種情況之一:
1.命令還沒有輸入的部分自動出現(xiàn);
2.沒輸入的命令出現(xiàn)一部分,然后bash會停下來,發(fā)出“嗶”的聲音;
3.bash發(fā)出“嗶”的聲音。
bash Shell盡量從所有可能的命令中幫你選擇你正在輸入的命令。在第一種情況下,只有一個命令是以你輸入的字母開頭的,bash能夠準(zhǔn)確地找到你要執(zhí)行的命令,幫你補(bǔ)全剩余部分。
在第二種情況和第三種情況下,不止一個命令是以你輸入的字母開頭的。bash盡量補(bǔ)全命令,但是停下來發(fā)出“嗶”的聲音,提醒你還有其他的選擇。要瀏覽bash已經(jīng)幫你縮小了的選擇范圍,再次按Tab鍵,bash會顯示所有以你輸入的字母開頭的命令。提供進(jìn)一步信息,讓bash能夠肯定你所需的命令,再次按Tab鍵,bash會幫你補(bǔ)全命令。
下面我們來看一個例子。
用戶elvis希望為他的終端啟用Unicode模式。我們暫且先不管Unicode模式是什么,或者他為什么要啟用。你只需要知道啟動Unicode模式的命令是unicode_start、停止它的命令是unicode_stop即可。用戶elvis輸入命令,然后按Tab鍵。
[elvis@station elvis]$ unic<TAB>
bash把這個詞擴(kuò)展為unicode_st,然后發(fā)出“嗶”的響聲。為了看到可能的補(bǔ)全列表,用戶elvis點(diǎn)擊了TAB兩次。
[elvis@station elvis]$ unicode_st<TAB><TAB> unicode_start unicode_stop
bash顯示兩個以unicode_st開頭的命令。用戶elvis要執(zhí)行的是唯一以unicode_sta開頭的命令,他輸入a,再按Tab鍵。
[elvis@station elvis]$ unicode_sta<TAB>
bash補(bǔ)全了命令,閃爍光標(biāo),以便可以開始為命令輸入任何參數(shù)或命令行選項。
[elvis@station rha030]$ unicode_start
bash不光能使用現(xiàn)有的命令完成命令行的第一個詞,它還可以用文件系統(tǒng)中的文件幫你完成命令行的其他部分。例如,用戶madonna要查看文件/etc/prelink.conf。她無須輸入文件全名,只輸入前面的部分,然后按Tab鍵即可。
[madonna@station madonna]$ cat /etc/prel<TAB>
因?yàn)?etc/prelink.conf是唯一以/etc/prel開頭的文件,bash可以補(bǔ)全文件名。
madonna@station madonna]$ cat /etc/prelink.conf
# This config file contains a list of directories both with binaries
# and libraries prelink should consider by default.
# If a directory name is prefixed with '-l ', the directory hierarchy
# will be walked as long as filesystem boundaries are not crossed.
# If a directory name is prefixed with '-h ', symbolic links in a
# directory hierarchy are followed.
-l /bin
-l /usr/bin
.
隨著深入學(xué)習(xí)這門課程,花點(diǎn)時間熟悉Tab補(bǔ)全功能,可以幫你節(jié)省很多時間和精力。用熟以后,使用Tab鍵會變成本能。一天下來,左手的小拇指因?yàn)椴粩嗲脫鬞ab鍵而變得酸痛。
1.5.2 示例
1.瀏覽二進(jìn)制文件后復(fù)位終端
用戶blondie無意中使用cat命令瀏覽了一個可執(zhí)行文件/bin/arch。這是一個編譯型可執(zhí)行文件,含有不應(yīng)該在終端顯示的字節(jié),因此使她的終端變得亂糟糟的。
[blondie@station blondie]$ cat /bin/arch ELF??414 (44???4????/lib/ld-linux.so.2GNU???y??6,?????aaa????aac????-?????[??? 為了復(fù)位終端,用戶blondie盲打了reset命令,使終端恢復(fù)正常狀態(tài)。 [blondie@station blondie]$
2.取消命令
用戶prince覺得從根目錄“/”開始遞歸地列出文件系統(tǒng)的內(nèi)容會很有趣。
[prince@station prince]$ ls -R /
/:
bin data etc initrd lost+found mnt proc root sbin usr web
boot dev home lib misc opt rha RPMS tmp var
/bin:
arch cut gawk mail rm touch
ash date gettext mkdir rmdir true
ash.static dd grep mknod rpm umount
aumix-minimal df gtar mktemp rvi uname
awk dmesg gunzip more rview unicode_start
basename dnsdomainname gzip mount sed unicode_stop
bash doexec hostname mt setfont unlink
bash2 domainname igawk mv setserial usleep
...
他花了幾分鐘看文件,覺得看夠了,就用Ctrl+C取消命令。命令終止,他返回到bash提示。
[prince@station prince]$
1.5.3 練習(xí)題
(1)以下哪一項命令會把終端恢復(fù)到正常狀態(tài)?( )
A.sanetty
B.reload
C.start-unicode
D.reset
E.sane
(2)以下哪一項控制鍵組合可以掛起命令?( )
A.Ctrl+C
B.Ctrl+D
C.Ctrl+Q
D.Ctrl+U
E.Ctrl+Z
(3)如果你見到一個完全沒有反應(yīng)的終端,以下哪一項控制鍵組合會重新讓它活動起來?( )
A.Ctrl+C
B.Ctrl+D
C.Ctrl+Q
D.Ctrl+U
E.Ctrl+Z
(4)如果你懷疑輸入了錯誤的密碼,以下哪一項控制鍵組合可以讓你重頭開始?( )
A.Ctrl+C
B.Ctrl+D
C.Ctrl+Q
D.Ctrl+U
E.Ctrl+Z
(5)如果你要取消一個產(chǎn)生太多輸出的命令,以下哪一項控制鍵組合最有用?( )
A.Ctrl+C
B.Ctrl+D
C.Ctrl+L
D.Ctrl+S
E.Ctrl+U
(6)如果你想凍結(jié)終端輸出,以便晚些時候能夠繼續(xù),以下哪一項控制鍵組合最有用?( )
A.Ctrl+C
B.Ctrl+D
C.Ctrl+L
D.Ctrl+S
E.Ctrl+U
(7)以下哪一項控制鍵組合使bash清屏?( )
A.Ctrl+C
B.Ctrl+D
C.Ctrl+L
D.Ctrl+S
E.Ctrl+U
使用who命令的輸出回答下列問題。
[prince@station prince]$ who blondie tty2 Apr 21 22:07 elvis tty1 Apr 21 22:07 elvis tty3 Apr 21 22:07 root tty6 Apr 21 22:07 prince :0 Apr 21 21:50 prince pts/0 Apr 21 21:53 (:0.0) prince pts/1 Apr 21 21:54 (:0.0) prince pts/2 Apr 21 21:55 (:0.0) madonna pts/3 Apr 21 22:08 (:0.0)
(8)用戶blondie是如何登錄企業(yè)版Linux機(jī)器的?( )
A.使用X圖形環(huán)境中的登錄管理器B.虛擬控制臺
C.串行線連接的終端D.ssh網(wǎng)絡(luò)連接
E.無法從所給信息判斷登錄方式
(9)用戶prince是如何登錄企業(yè)版Linux機(jī)器的?( )
A.使用X圖形環(huán)境中的登錄管理器
B.虛擬控制臺
C.串行線連接的終端
D.ssh網(wǎng)絡(luò)連接
E.無法從所給信息判斷登錄方式
(10)以下哪一項用戶以管理員用戶root的身份登錄?( )
A.blondie
B.elvis
C.madonna
D.prince
E.從提供的信息中難以判斷
1.6 尋求幫助
主要概念
? 用-h、-?或--help命令行選項調(diào)用命令時,大多數(shù)命令都會提供簡潔的用法概要信息。
? 更詳細(xì)的參考信息可以使用man命令,在“man page(手冊頁)”中能夠找到。
? man page分章節(jié),前面的章節(jié)可能會使后面的章節(jié)更難理解。
? 復(fù)雜的命令在info中有更詳細(xì)的介紹。
? 紅帽企業(yè)版Linux中,與特定軟件包相關(guān)的不太合乎慣例的文檔在/usr/share/doc中。
? Linux文檔項目(Linux Documentation Project,LDP)提供大量與Linux有關(guān)的文檔。
? 紅帽手冊針對紅帽企業(yè)版Linux發(fā)行版本提供文檔。
1.6.1 講義
1.尋求幫助
UNIX,特別是Linux的傳統(tǒng)做法是不印刷使用手冊和文檔,而是將它們收藏在系統(tǒng)中,以方便用戶使用。沒有人能記住ls命令的所有命令行選項,所以當(dāng)用合適的命令行選項調(diào)用命令時,命令都會提供叫做“用法(usages)”的簡短概要。大多數(shù)命令更完整的參考可以在有結(jié)構(gòu)的“man pages”和“info pages”中找到。在紅帽企業(yè)版Linux中,針對特定的軟件包,目錄/usr/share/doc含有結(jié)構(gòu)性不強(qiáng)的文檔。最后,你還可以在Linux文檔項目或紅帽企業(yè)版Linux文檔包中找到大量的指南和教程。
2.使用-h、-?或--help獲得用法
隨著不斷深入學(xué)習(xí)這門課程,你會發(fā)現(xiàn)UNIX在命名命令和命令選項時,經(jīng)常會偏向選擇簡潔、高效的名稱,而不是直觀、易懂的名稱。特別是常用的命令如mv、ps和vi。UNIX的這種命名方針對有經(jīng)驗(yàn)的用戶非常有利,但新手操作就會比較吃虧。
沒人能記住全部命令的所有使用方式,但有經(jīng)驗(yàn)的UNIX用戶知道怎樣在線快速尋找到他們所需的信息。最直接的幫助經(jīng)常由命令本身提供。和命令行選項-h、-?或--help一起使用,命令提供“用法(usage)”或簡短的語法總結(jié)。在前面的章節(jié)里我們已經(jīng)討論過,在這里我們再回顧一下。
3.Man Page
Manual Page(手冊頁),一般縮寫為“man page”,是UNIX系統(tǒng)的傳統(tǒng)參考信息。它包括大多數(shù)命令、文件格式、程序調(diào)用的文檔,一般主題可用man命令瀏覽。例如:man ls產(chǎn)生有關(guān)ls命令的文檔。
4.分頁程序less
紅帽企業(yè)版Linux使用less分頁程序?yàn)g覽man page。使用less瀏覽文件(包括man page)時,使用單一鍵控制導(dǎo)航:使用空格鍵瀏覽下一頁,b鍵回到上一頁,q鍵退出。在以后的課程里還會再討論less命令,表1-3只列出使用less瀏覽man page時最有用的導(dǎo)航命令。
表1-3 基本的less導(dǎo)航

man page章節(jié)
man page分成8個標(biāo)準(zhǔn)章節(jié),如表1-4所示。在不同章節(jié)的頁有時會有相同的名字。舉例來說,在第1章用戶命令中的passwd命令和第5章文件格式中的文件/etc/passwd中都有相應(yīng)的手冊頁。用戶要找的是/etc/passwd文件格式的相關(guān)文檔,不幸的是,man passwd只顯示首先搜索到的頁,在這里是第1章。要瀏覽第5章中的man page,必須指明章節(jié)號man 5 passwd。
表1-4 man page章節(jié)

在UNIX中,引用man page通常會在頁名后將章數(shù)用括號括起來,如passwd(1)或passwd(5)。每章都包括一個叫intro的介紹頁,所以命令man 5 intro可查看第5章的介紹頁。
關(guān)鍵詞搜索和-a選項
經(jīng)常和man命令同時使用的兩個選項是:進(jìn)行關(guān)鍵詞搜索的-k選項和瀏覽參數(shù)的“所有相關(guān)”頁的-a選項。用戶madonna在查找文件/etc/passwd格式的有關(guān)信息。她已經(jīng)試過man passwd,但這個命令只產(chǎn)生passwd命令的man page,她用man -k搜索關(guān)鍵詞passwd。
[madonna@station madonna]$ man -k passwd
...
chpasswd (8) - update password file in batch
gpasswd (1) - administer the /etc/group file
hesiod_free_passwd [hesiod_getpwnam] (3) - Hesiod functions for retrieving
passwd information
hesiod_getpwnam (3) -Hesiod functions for retrieving passwd information
hesiod_getpwuid [hesiod_getpwnam] (3) - Hesiod functions for retrieving
passwd
information
htpasswd (1) - Create and update user authentication files
ldappasswd (1) - change the password of an LDAP entry
lppasswd (1) - add, change, or delete digest passwords
pam_localuser (8) - require users to be listed in /etc/passwd
passwd (1) - update a user's authentication tokens(s)
passwd (5) - password file ①
passwd [sslpasswd] (1ssl) - compute password hashes
saslpasswd (8) - set a user's sasl password
smbpasswd (5) - The Samba encrypted password file
smbpasswd (8) - change a user's SMB password
...
①用戶madonna找到的信息比她想要的多得多。但在這些輸出中包含對password文件的參考,并且告訴她信息可以在man page的第5章找到。
用戶madonna現(xiàn)在知道了需要的章節(jié),她使用man 5 passwd找到所需頁。用戶madonna還可以使用命令行選項-a指示man命令逐個瀏覽所有相關(guān)頁。
5.Info Page
man page通常提供參考信息,并不提供指導(dǎo)或一般使用。很多更復(fù)雜的命令說明在“info page”中有更詳細(xì)的記載,“info page”通過超級鏈接連接不同頁面,可以通過類似網(wǎng)頁瀏覽那樣根據(jù)超級鏈接跳躍閱讀。info page比網(wǎng)絡(luò)瀏覽器和可點(diǎn)擊的鏈接出現(xiàn)得早。可以使用傳統(tǒng)的info命令或是紅帽企業(yè)版Linux提供的界面相對易用的pinfo命令瀏覽info page。info page主要由GNU project開發(fā)的軟件使用。
不帶參數(shù)的pinfo命令會顯示含有所有安裝info page內(nèi)容的表格。基本導(dǎo)航和分頁查看命令less相似。可以使用4個箭頭鍵在info page的鏈接之間移動,如表1-5所示。
表1-5 pinfo導(dǎo)航

6.目錄/usr/share/doc
開放源代碼軟件的一個設(shè)計理念可以總結(jié)為“早發(fā)行,多發(fā)行”。開發(fā)軟件時,只要軟件可以使用,馬上就發(fā)行,并不一定要等到所有方面都完善。讓用戶盡早使用軟件,從他們那里獲得反饋和改進(jìn)意見,以便設(shè)計出更好的軟件。
紅帽企業(yè)版Linux遵照這一基本理念,提供實(shí)用、穩(wěn)定的軟件,即使這些軟件還沒正式被編入man page或info page中。通常,有關(guān)如何使用新開發(fā)產(chǎn)品的文檔可能就在開發(fā)者匆忙打造的、名為readme的簡單文本文件中。紅帽企業(yè)版Linux也會包括這些雖組織不完善但實(shí)用的文檔,這些文檔收藏在目錄/usr/share/doc下,由包括這個軟件的紅帽軟件包組織管理。
每個軟件包的文檔有多少要視情況而定。比如說,用戶elvis發(fā)現(xiàn)PostScript瀏覽器evince的非正式文檔非常簡略,只包括開發(fā)者的ChangeLog和readme.txt文件。
[elvis@station elvis]$ ls -s /usr/share/doc/evince-0.6.0/ total 308 300 ChangeLog 8 README
與之相比,在目錄/usr/share/doc下可以找到大量有關(guān)文件共享服務(wù)samba復(fù)雜配置的信息,包括以不同格式存儲在子目錄中的文檔。
[elvis@station elvis]$ ls /usr/share/doc/samba-3.0.23c/
autofs README
COPYING registry
history REVISION
htmldocs Roadmap
LDAP Samba3-ByExample.pdf
libsmbclient Samba3-Developers-Guide.pdf
Manifest Samba3-HOWTO.pdf
misc THANKS
printer-accounting WHATSNEW.txt
printing
7.紅帽文檔指南
作為服務(wù)的一部分,紅帽公司在紅帽企業(yè)版Linux中包括文檔手冊。這些文檔手冊在互聯(lián)網(wǎng)上都可以找到。這些文檔制成了RPM形式的CD,裝在軟件包套裝中。
● x86安裝指南
● 初次使用指南
● 用戶定制指南
● 參考指南
● 安全指南
● 系統(tǒng)管理入門
這些手冊提供針對紅帽企業(yè)版Linux操作系統(tǒng)的信息,包括背景資料和不同工作的操作步驟。
8.Linux文檔項目
Linux文檔項目(Linux Documentation Project,LDP)的工作是將Linux操作系統(tǒng)的快速開發(fā)記錄歸檔。這個網(wǎng)站的文檔遵循Linux早期開發(fā)時所使用的格式。
FAQs
FAQ即有關(guān)一個主題的“常見問題(Frequently Asked Questions)”,如Linux-RAID FAQ。
HOWTOs
HOWTOs提供如何逐步設(shè)置或配置Linux的各個部分,如CD-Writing-HOWTO或ETHERNET-HOWTO。
GUIDEs
各種Guide(指南)更詳細(xì)的介紹許多主題,如系統(tǒng)管理(System Administration)或Linux內(nèi)核模塊編程(Linux Kernel Module Programming)。
雖然這些文檔并不針對紅帽企業(yè)版Linux發(fā)行版本,但是許多信息還是有用且相關(guān)的。
9.yelp:GNOME幫助瀏覽器
最后,我們來介紹yelp,GNOME幫助瀏覽器(GNOME Help Brower),從應(yīng)用程序菜單中選擇“幫助”啟動這一服務(wù)。yelp提供了許多GNOME圖形應(yīng)用程序的主要文檔,包括Nautilus File Manager和GNOME支程序。

圖1-6 yelp:GNOME幫助瀏覽器
1.6.2 練習(xí)題
(1)以下哪種方式不能獲得ls命令的幫助?( )
A.help ls
B.ls --help
C.man ls
D.pinfo ls
E.以上都是獲得幫助的合法方式
(2)瀏覽man page時,使用哪個鍵使調(diào)頁程序退出?( )
A.Z
B.TAB
C.q
D.Enter
E.空格鍵
(3)man page的哪一章含有配置文件/etc/group的文檔?( )
A.1
B.4
C.5
D.7
E.8
(4)man page的哪一章含有g(shù)roup命令的文檔?( )
A.1
B.4
C.5
D.7
E.8
(5)man page的哪一章含有文件名后綴及后綴所暗示的文件類型?( )
A.1
B.4
C.5
D.7
E.8
(6)列出man page章節(jié)的表格中沒有第六章。這章的內(nèi)容是什么?( )
A.UNIX歷史(Unix history)
B.硬件設(shè)備(hardware devices)
C.網(wǎng)絡(luò)協(xié)議(networking protocoles)
D.圖形應(yīng)用程序(graphical application)
E.游戲(games)
(7)以下哪一項命令產(chǎn)生在man page搜索詞sleep的關(guān)鍵字搜索?( )
A.mankey sleep
B.man --key sleep
C.man -key sleep
D.keyword sleep
E.以上都不行
(8)非正式組織的文檔位于紅帽企業(yè)版Linux發(fā)行版本的什么位置?( )
A.紅帽企業(yè)版Linux只包括正式組織的文檔
B./usr/share/doc
C./usr/doc
D./usr/doc/share
E./tmp/doc/
(9)如果用戶的系統(tǒng)沒有安裝紅帽企業(yè)版Linux文檔指南,在哪里可以找到這些文檔?( )
A.紅帽企業(yè)版Linux文檔CD
B.www.redhat.com網(wǎng)站
C.在盒裝的發(fā)行版本中的印刷指南中
D.A和C
E.以上都可以
(10)GNOME幫助瀏覽器yelp提供那種幫助?( )
A.GNOME圖形應(yīng)用程序的文檔
B.man pages
C.info pages
D.A和C
E.以上都可以
- 計算機(jī)控制技術(shù)
- Blockchain Quick Start Guide
- 工業(yè)機(jī)器人入門實(shí)用教程(KUKA機(jī)器人)
- Windows游戲程序設(shè)計基礎(chǔ)
- 菜鳥起飛系統(tǒng)安裝與重裝
- Blender 3D Printing by Example
- 突破,Objective-C開發(fā)速學(xué)手冊
- Linux Shell編程從初學(xué)到精通
- Mastering Predictive Analytics with scikit:learn and TensorFlow
- Visual Basic項目開發(fā)案例精粹
- Learning Cassandra for Administrators
- Getting Started with Tableau 2018.x
- Hands-On Microservices with C#
- Eclipse RCP應(yīng)用系統(tǒng)開發(fā)方法與實(shí)戰(zhàn)
- 軟件需求十步走