跳轉至內容

Slackersbible/UNIX 基礎

來自華夏公益教科書,為開放世界提供開放書籍

以下章節將涵蓋 Slackware Linux 作業系統的基本命令和功能。大部分內容與任何類 UNIX® 作業系統都相關。如果您熟悉這些內容,可以隨意略讀本章。如果您是 Slackware 的新手,那麼您一定需要仔細閱讀本章內容。


閱讀完本章後,您將瞭解

  • 如何使用 Slackware 的“虛擬控制檯”。
  • UNIX 檔案許可權的工作原理。
  • 預設的 Slackware 檔案系統佈局。
  • Slackware 磁碟組織結構。
  • 如何掛載和解除安裝檔案系統。
  • 什麼是程序、守護程序和訊號。
  • 什麼是 shell,以及如何更改預設的登入環境。
  • 如何使用基本的文字編輯器。
  • 什麼是裝置和裝置節點。
  • Slackware 使用哪種二進位制格式。
  • 如何閱讀手冊頁以獲取更多資訊。

虛擬控制檯和終端

[編輯 | 編輯原始碼]

Slackware 可以透過多種方式使用。其中之一是將命令輸入文字終端。當以這種方式使用 Slackware 時,您可以輕鬆地使用 UNIX® 作業系統的靈活性和平易近人。本節介紹什麼是終端控制檯,以及如何使用它們。

控制檯

[編輯 | 編輯原始碼]

預設情況下,Slackware 配置為啟動到命令列介面。除非您更改了此設定,否則系統在啟動後,在啟動指令碼完成執行後,會向您顯示登入提示符。您將看到類似以下內容

Loading OSS compatibility modules for ALSA.


Welcome to Linux 2.4.26 (tty1)
hawk login:

您的系統上的訊息可能略有不同,但您會看到類似的內容。我們現在感興趣的是最後兩行。倒數第二行顯示

Welcome to Linux 2.4.26 (tty1)

此行包含有關您剛剛啟動的系統的一些資訊。您正在檢視Slackware 控制檯。此機器的名稱(每臺 UNIX 機器都有一個名稱)是 hawk,您現在正在檢視它的系統控制檯——tty1 終端。最後,最後一行始終是

login:

您需要在此處輸入您的使用者名稱才能登入 Slackware。下一節將介紹如何做到這一點。

登入 Slackware

[編輯 | 編輯原始碼]

Slackware 是一個多使用者、多處理系統。這通常是對一個可以由許多不同的人使用,並且可以在一臺機器上同時執行許多程式的系統的正式描述。每個多使用者系統都需要一些方法來區分一個使用者與其他使用者。在 Slackware(以及所有類似 UNIX 的作業系統中),這是透過要求每個使用者在能夠執行程式之前必須登入到系統來實現的。每個使用者都有一個唯一的名稱(使用者名稱)和一個個人秘密金鑰(密碼)。Slackware 將要求提供這兩個資訊,然後才允許使用者執行任何程式。Slackware 啟動並完成執行啟動指令碼後,它會顯示一個提示符並要求提供有效的使用者名稱

login:

為了便於說明,讓我們假設您的使用者名稱是 john。在提示符下輸入 john 並按 Enter 鍵。然後系統會提示您輸入密碼

login: john
Password:

現在輸入 john 的密碼,然後按 Enter 鍵。密碼不會顯示!您現在不必擔心這個問題。 suffice it to say that it is done for security reasons. 如果您輸入了正確的密碼,您現在應該已登入 Slackware 並可以嘗試使用所有可用的命令。您應該看到 MOTD 或每日訊息,後面跟著一個命令提示符(#、$ 或 % 字元)。這表明您已成功登入 Slackware。3.2.3 多個控制檯

在一個控制檯中執行 UNIX 命令很好,但 Slackware 可以同時執行多個程式。當像 Slackware 這樣的作業系統可以同時執行數十個程式時,只有一個控制檯可以輸入命令會有點浪費。這就是虛擬控制檯非常有用的地方。Slackware 可以配置為向您顯示許多不同的虛擬控制檯。您可以透過按鍵盤上的幾個鍵,從一個控制檯切換到任何其他虛擬控制檯。每個控制檯都有自己的不同輸出通道,Slackware 會在您從一個虛擬控制檯切換到另一個虛擬控制檯時,妥善地重定向鍵盤輸入和顯示器輸出。

Slackware 為切換控制檯保留了一些特殊的鍵組合。您可以使用 Ctrl+Alt-F1、Alt-F2 到 Alt-F8 切換到 Slackware 中的另一個虛擬控制檯。TTY1(Ctrl+Alt+F1)是您在登入時看到的預設虛擬控制檯。TTY1 到 TTY6 始終以文字模式可用。當圖形系統啟動時,TTY7 及更高版本將變為圖形虛擬控制檯。

當您從一個控制檯切換到另一個控制檯時,Slackware 會負責儲存和恢復螢幕輸出。結果是“幻覺,即有多個“虛擬螢幕和鍵盤,您可以使用它們輸入命令以供 Slackware 執行。當您切換到其他虛擬控制檯時,您在一個虛擬控制檯中啟動的程式不會停止執行。它們會在您切換到其他虛擬控制檯時繼續執行。

許可權

[編輯 | 編輯原始碼]

Slackware 基於幾個關鍵的 UNIX 概念。第一個也是最突出的概念是 Slackware 是一個多使用者作業系統。系統可以處理多個使用者同時執行完全無關的任務。系統負責妥善地共享和管理對硬體裝置、外設、記憶體和 CPU 時間的請求,以便公平地分配給每個使用者。

由於系統能夠支援多個使用者,因此係統管理的任何內容都有一組許可權,這些許可權控制誰可以讀取、寫入和執行該資源。這些許可權儲存為三個八位位元組,分為三個部分,一個用於檔案的擁有者,一個用於檔案所屬的組,一個用於其他所有人。此數字表示形式如下

Value Permission 	              Directory Listing
0     No read, no write, no execute  ---
1     No read, no write, execute     --x
2     No read, write, no execute     -w-
3     No read, write, execute        -wx
4     Read, no write, no execute     r--
5     Read, no write, execute        r-x
6     Read, write, no execute        rw-
7     Read, write, execute           rwx


您可以使用 -l 命令列引數向 ls(1) 提供長目錄列表,其中包括一列包含有關檔案對於擁有者、組和其他所有人的許可權的資訊。例如,在任意目錄中進行 ls -l 可能會顯示

% ls -l
total 530
-rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile
-rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile

-rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt

...

以下是 ls -l 的第一列的分解方式

-rw-r--r--

第一個(最左邊的)字元表示該檔案是普通檔案、目錄、特殊字元裝置、套接字還是其他特殊偽檔案裝置。在本例中,- 表示普通檔案。接下來的三個字元,rw-,在本例中,給出檔案擁有者的許可權。接下來的三個字元,r--,給出檔案所屬組的許可權。最後三個字元,r--,給出世界其他人的許可權。破折號表示該許可權已關閉。在本例中,該檔案的許可權設定為擁有者可以讀取和寫入該檔案,該組可以讀取該檔案,世界其他所有人只能讀取該檔案。根據上表,此檔案的許可權將為 644,其中每個數字代表檔案許可權的三個部分。

這很好,但是系統如何控制裝置的許可權呢?Slackware 實際上將大多數硬體裝置視為檔案,程式可以像開啟任何其他檔案一樣開啟、讀取和寫入資料。這些特殊的裝置檔案儲存在 /dev 目錄中。

目錄也作為檔案處理。它們有讀取、寫入和執行許可權。目錄的可執行位具有與檔案略微不同的含義。當目錄被標記為可執行時,這意味著它可以被遍歷,也就是說,可以“cd”(更改目錄)到它。這也意味著,在目錄中,可以訪問其名稱已知的檔案(當然,要遵守檔案本身的許可權)。

特別是,為了執行目錄列表,必須對目錄設定讀取許可權,而要刪除其名稱已知的

還有更多的許可權位,但它們主要用於特殊情況,例如setuid二進位制檔案和粘性目錄。如果您想了解更多有關檔案許可權及其設定方法的資訊,請務必檢視chmod手冊頁。3.3.1 符號許可權


由 Tom Rhodes 貢獻。

符號許可權,有時也稱為符號表達式,使用字元代替八進位制值來分配檔案或目錄的許可權。符號表達式使用 (who) (action) (permissions) 的語法,其中可以使用以下值

Option Letter 	Represents
(who) 	u 	User
(who) 	g 	Group owner
(who) 	o 	Other
(who) 	a 	All (world)
(action) 	+ 	Adding permissions
(action) 	- 	Removing permissions
(action) 	= 	Explicitly set permissions
(permissions) 	r 	Read
(permissions) 	w 	Write
(permissions) 	x 	Execute
(permissions) 	s 	Set UID or GID	

這些值與 chmod 命令一起使用,就像之前一樣,但使用字母。例如,您可以使用以下命令阻止其他使用者訪問 FILE

% chmod go= FILE

當需要對檔案進行多個更改時,可以提供逗號分隔的列表。例如,以下命令將刪除 FILE 上的組和世界寫入許可權,然後它將為所有人新增執行許可權

% chmod go-w,a+x FILE

Slackware 是一個多工作業系統。這意味著它看起來好像不止一個程式在執行。任何時候執行的每個程式都稱為程序。您執行的每個命令都將啟動至少一個新程序,並且有一些系統程序一直執行,使系統保持功能。

每個程序都由一個稱為程序 ID 或 PID 的數字唯一標識,並且與檔案一樣,每個程序也只有一個所有者和組。所有者和組資訊用於確定程序可以使用哪些檔案和裝置,使用前面討論的檔案許可權。大多數程序也有一個父程序。父程序是啟動它們的程序。例如,如果您正在向 shell 輸入命令,那麼 shell 就是一個程序,而您執行的任何命令也是程序。您以這種方式執行的每個程序都將以您的 shell 作為其父程序。對此的例外是一個稱為 init(8) 的特殊程序。init 始終是第一個程序,因此其 PID 始終為 1。init 在 Slackware 啟動時由核心自動啟動。

前臺和後臺

當您執行命令時,通常該命令處於前臺(您會看到它)並且它使用計算機直到完成。這可能看起來很明顯,直到您意識到可以對此做些什麼。例如,如果您啟動一個命令然後決定要終止它,您通常可以使用 Ctrl+C 來終止它。此外,如果您想啟動其他命令而不是等待程式退出,您可以使用 Ctrl+Z 來停止它,這樣它將不再執行並“擋您的路”。

使用“fg”命令可以將停止的應用程式重新帶到前臺,它將繼續執行。如果您想讓命令繼續執行,或者如果您想使用 Ctrl+C 來終止它,這將很有用。

另一個可以做的事情是在命令後使用一個與號 (&) 使其在後臺執行。當您這樣做時,您可能會看到以下內容

root@darkstar:~# updatedb & [1] 12353

這意味著程式已啟動,並已分配了 PID(程式標識號)12353,如果您想使用“kill 12353”終止它,這將很有用。

有兩個命令對於檢視系統上的程序特別有用,ps(1) 和 top(1)。ps 命令用於顯示當前正在執行的程序的靜態列表,並且可以顯示它們的 PID、它們使用多少記憶體、啟動它們的命令列等。top 命令顯示所有正在執行的程序,並每隔幾秒更新顯示,以便您可以互動式地檢視計算機正在做什麼。

預設情況下,ps 只顯示您正在執行的命令,這些命令屬於您。例如

raven@hawk:~$ ps
PID TTY TIME CMD
31674 pts/1 00:00:00 bash
31686 pts/1 00:00:00 ps

如您在此示例中看到的,ps(1) 的輸出被組織成多個列。PID 是前面討論的程序 ID。PID 從 1 開始分配,一直到 99999,當您用完時,就會環繞到開頭。TT 列顯示程式執行的 tty,可以安全地暫時忽略。STAT 顯示程式的狀態,同樣可以安全地忽略。TIME 是程式在 CPU 上執行的時間量——這通常不是您啟動程式以來的經過時間,因為大多數程式在需要花費時間在 CPU 上之前會花費大量時間等待事情發生。最後,COMMAND 是用於執行程式的命令列。

ps(1) 支援許多不同的選項來更改顯示的資訊。其中最有用的一組是 auxww。a 顯示有關所有正在執行的程序的資訊,而不僅僅是您自己的。u 顯示程序所有者的使用者名稱以及記憶體使用情況。x 顯示有關守護程序的資訊,而 ww 使 ps(1) 顯示完整的命令列,而不是在它變得太長而無法容納在螢幕上時將其截斷。top(1) 的輸出類似。一個示例會話如下所示

raven@hawk:~$ top

top - 22:52:10 up 11:29, 2 users, load average: 0.13, 0.04, 0.01
Tasks: 34 total, 1 running, 33 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0% user, 0.0% system, 0.0% nice, 100.0% idle
Mem: 190788k total, 187268k used, 3520k free, 44340k buffers
Swap: 976712k total, 740k used, 975972k free, 86176k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 8 0 240 240 212 S 0.0 0.1 0:04.64 init
2 root 9 0 0 0 0 S 0.0 0.0 0:00.24 keventd
3 root 19 19 0 0 0 S 0.0 0.0 0:00.35 ksoftirqd_CPU0
4 root 9 0 0 0 0 S 0.0 0.0 0:01.16 kswapd
5 root 9 0 0 0 0 S 0.0 0.0 0:00.05 bdflush
6 root 9 0 0 0 0 S 0.0 0.0 0:00.30 kupdated
10 root -1 -20 0 0 0 S 0.0 0.0 0:00.00 mdrecoveryd
11 root 9 0 0 0 0 S 0.0 0.0 0:00.00 kreiserfsd
60 root 9 0 588 588 508 S 0.0 0.3 0:00.07 syslogd
63 root 9 0 448 448 392 S 0.0 0.2 0:00.04 klogd
75 root 8 0 688 688 520 S 0.0 0.4 0:00.17 cardmgr
157 root 9 0 492 460 428 S 0.0 0.2 0:00.00 dhcpcd
272 root 9 0 0 0 0 S 0.0 0.0 0:00.00 khubd
762 root 9 0 520 520 464 S 0.0 0.3 0:00.00 inetd
765 root 9 0 1408 1408 1308 S 0.0 0.7 0:00.21 sshd
776 root 4 0 564 564 496 S 0.0 0.3 0:00.00 crond
778 daemon 9 0 616 616 548 S 0.0 0.3 0:00.01 atd

輸出分為兩部分。標題(前五行)顯示最後一個執行程序的 PID、系統負載平均值(衡量系統繁忙程度)、系統執行時間(自上次重啟以來的時間)和當前時間。標題中的其他數字與正在執行的程序數量(在本例中為 47)、已佔用多少記憶體和交換空間以及系統在不同的 CPU 狀態中花費了多少時間有關。

下面是一系列包含與 ps(1) 輸出類似資訊的列。如前所述,您可以看到 PID、使用者名稱、CPU 時間量以及執行的命令。top(1) 還預設顯示程序佔用的記憶體空間量。它分為兩列,一列用於總大小,一列用於駐留大小——總大小是應用程式需要的記憶體量,而駐留大小是它當前實際使用的記憶體量。

top(1) 每兩秒自動更新此顯示;這可以透過 s 選項更改。

文字編輯器

[編輯 | 編輯原始碼]

許多 UNIX 管理涉及編輯配置檔案,其中大部分只是文字檔案。在這裡,我們將介紹幾個最常見的 UNIX 文字編輯器及其基本操作。

可以說,在 UNIX 世界中,沒有哪個文字編輯器比 vi 更普遍。僅此一項就成為所有嚴肅的 UNIX(和 Slackware)使用者都應該至少學習其基本功能的原因。這個名字來自命令“visual”,用於將 ex 行編輯器切換到visual 模式。這一事實說明了 vi 的兩個有趣之處。首先,vi 是一種模態編輯器,這意味著它的編輯功能會根據程式所處的狀態或模式而改變。第二個值得注意的有趣之處是,這個名字像許多 UNIX 程式一樣,是對另一個程式的擴充套件。vi 擁有 UNIX 使用者所要求的所有使用者自定義和擴充套件性,這使其成為一個極其強大的程式。

[編輯 | 編輯原始碼]

與一些簡單地將按鍵回顯到螢幕並依靠功能鍵組合來實現擴充套件功能的文字編輯器相比,模態編輯器——以及 vi——使用編輯器模式來定義對文字檔案執行的操作。這最好透過示例來解釋。

  1
~
~
~
~
~
~
~
~
~                              VIM - Vi IMproved
~
~                               version 7.0.122
~                           by Bram Moolenaar et al.
~                 Vim is open source and freely distributable
~
~                        Become a registered Vim user!
~                type  :help register<Enter>   for information
~
~                type  :q<Enter>               to exit
~                type  :help<Enter>  or  <F1>  for on-line help
~                type  :help version7<Enter>   for version info
~
~
~
~
~
~
~
~

您看到的是一個名為 Vim 的現代版 vi。Vim 繼承了原始專有版 vi 的幾乎所有功能,並添加了許多它自己的功能,這些功能在 GPL 相容的自由軟體許可下發布。上面的螢幕是 Vim 第一次載入時的樣子。在這種狀態下,它處於正常模式。正常模式也稱為命令模式,因為從這種模式下,您可以在文字上執行各種命令或操作,例如更改、刪除、複製等。要以標準方式輸入文字,您必須首先將 vi 切換到插入模式。

從這種初始模式,我們可以透過以下幾種方式之一切換到插入模式來輸入文字。最簡單的方法是隻按“i”鍵(代表insert)。現在您可以根據需要輸入文字。所有標準的字母數字字元(包括標點符號)都在鍵入時回顯到顯示屏上

圖 5.1.1-1
  1 vi is my favorite text editor.
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
-- INSERT --

從這個例子中可以看出,Vim 會顯示你輸入的文字“vi is my favorite text editor.”,以及當前處於插入模式的事實。要切換回命令模式,只需按 Escape 鍵 (Esc)。vi 將返回到命令模式(Vim 會透過從螢幕底部刪除“-- INSERT --”來反映這一點)。

重要:命令區分大小寫
注意。vi 命令(例如這裡的“i”)區分大小寫,因此大寫“I”與小寫“i”不是同一個命令。同樣地,強烈建議你在 vi 中編輯時不要使用 Caps Lock 鍵。儘管對大多數打字員來說,使用 Caps Lock 鍵基本上是多餘的,但在切換回命令模式時,使用 Caps Lock 鍵會導致意想不到的結果。

基本命令

[編輯 | 編輯原始碼]

“那麼命令模式有什麼用呢?”你問。好問題。讓我們看一些基本命令,這些命令展示了模態編輯的強大功能。

移動游標
[編輯 | 編輯原始碼]

命令模式似乎增加了文字編輯過程的複雜性,但實際上它旨在提高生產力。從命令模式中獲得的第一個成果就是提高文字編輯的速度。即使你只知道幾個命令,命令模式也能使文字編輯比標準文字編輯更快。以之前的例子為例(見圖 5.1.1-1)。如果你在行尾按下“Esc”,vi 將進入命令模式,游標將置於最後輸入的字元之上。從這種狀態下,你可以使用“h”、“j”、“k”和“l”鍵分別在整個檔案中將游標向左、下、上和右移動一個字元。

剪下、貼上和刪除文字
[編輯 | 編輯原始碼]

vi 使用暫存器臨時儲存文字。使用剪下和貼上命令,你可以將文字從檔案的一部分複製或刪除到暫存器中,然後將其貼上到其他地方。

檔案操作
[編輯 | 編輯原始碼]

現在你已經可以執行一些命令了,你可能想開啟一個檔案進行編輯。

Emacs 是另一個流行的 UNIX 文字編輯器,與 vi 一樣,它非常強大。Emacs 最初是由 GNU 專案創始人理查德·斯托曼構思的,作為另一個文字編輯器的編輯器宏集。它最終發展成為今天我們所知道的 Emacs(源自 Editor MACroS)。

進一步閱讀

[編輯 | 編輯原始碼]
華夏公益教科書