電腦網路與作業系統 電腦網路與作業系統

電腦網路與作業系統上課教材

電腦網路與作業系統 > 課程內容 > 第 10 章 - Linux 作業系統 - 指令操作與程序管理

第 10 章 - Linux 作業系統 - 指令操作與程序管理

上次更新日期 2020/05/20

Linux 最強大的部份就在於作為伺服器平台以及作為軟體開發平台,這兩項平台的運作上面,很多時候維護人員或開發人員都是使用遠端登入 Linux 系統, 然後透過文字界面來操作所需要的指令與任務,進一步完成自己的工作。所以,文字界面的認識與操作,是相當重要的。 另外,如同前面章節談到的,作業系統裡面最重要的就是程序,所以,接下來我們也來管理一下程序!

學習目標

  1. 了解圖形界面管理工具
  2. 了解 bash shell 慣用的熱鍵
  3. 了解 PID 與程序的觀察
  4. 使用 kill 進行程序的管理

10.1: CentOS 8 圖形界面之系統工具

上週課程讓同學們進入 Linux 圖形界面,同時稍微瀏覽一下系統上面的檔案總管。現在,讓我們來掌握一下 Linux 系統上面的許多圖形界面的工具。 首先,來呼叫出類似 windows 的『工作管理員』畫面,以了解系統目前正在運作的程序有哪些:

  • 概覽 --> 顯示應用程式 --> 公用程式 --> 系統監控
工作管理員

如上圖所示,可以輕鬆的呼叫出工作管理員~你也可以透過『資源』找到圖形化顯示的系統資源運作狀態,而由『檔案系統』則可以知道各個磁碟的使用量, 相當方便。再透過上圖右上方的小圖示,可以進行搜尋、將程序排序的功能喔!

例題 10.1-1: 工作管理員的使用
  1. 先啟用一個終端機,並且將終端機最小化 (在標題列按下滑鼠右鍵,選擇最小化即可)
  2. 在工作管理員當中,點選搜尋,輸入『 bash 』關鍵字,看看找到的程序 PID 為何?
  3. 在 bash 程序上面按下右鍵,選擇『屬性』後,看看『狀態』顯示的是什麼狀態呢?
  4. 在 bash 程序上面按下右鍵,選擇『變更優先等級』後,選擇『非常低』是否可行?
  5. 在『程序名稱』那個『標題列』上面按下『右鍵』,勾選『Nice』後,出現的新欄位, Nice 值是多少?
  6. 拿掉搜尋列的『 bash 』關鍵字後,查閱一下,一般正常的程序 Nice 值又是多少?
  7. 點選最右上角小圖示,勾選『所有程序』後,能不能找到名為 rsyslog 的程序?
  8. 你能不能在 rsyslog 上面按下右鍵,選擇『終止』?為什麼?(注意,不要輸入 root 密碼喔!)

所謂的『 PID 』指的是 process ID 的意思,也就是程序的識別碼。我們知道檔案的讀取透過的是『檔名』,但是在記憶體內, 資料的讀取則是透過程序識別碼,也就是 PID。所有的作業系統根據程序而定義 PID 概念都是差不多的。

CPU 可以在不同的工作之間切換運作,每個工作都會有一定時間的 CPU 使用率。那麼如果有 20 個程序同時要 CPU 運作, 那一個程序可以被運作比較多的時間?那就是所謂的優先序。在 Linxu 底下,影響程序優先順序的就是 Nice 數值, Nice 數值越小 (小於 0),代表該程序越優先,也就是該程序可能越重要的意思。

為了保護系統,不同的程序有不同的身份,一般帳號不能隨意刪除系統帳號的程序喔!所以,你當然無法移除 rsyslog 這一個系統自動產生的程序。

  • 概覽 --> 顯示應用程式 --> 公用程式 --> 磁碟
磁碟管理員

因為我們是一般帳號,所以上面的資料只能查閱,基本上無法進行磁碟的重新分割。上面的圖示可以觀察磁碟的分割、檔案系統、掛載點等。 可以讓使用者透過圖形界面直接來觀察喔!

例題 10.1-2: 磁碟管理員的使用-由上圖說明底下的答案各別是什麼?
  1. 整個磁碟的總容量大致上是多少 GB
  2. 磁碟分割的檔名是什麼?例如分割區 3 的裝置檔名為何?
  3. 查看左側 11G 區塊裝置時,內容顯示檔案系統是什麼?
  4. 承上,有個『已掛載於檔案系統根』,大概是什麼意思?

所謂的『檔案系統的根目錄』,亦即整個『目錄樹』的最頂層~那就是根目錄。根目錄在 Linux 底下的符號就是斜線『 / 』! 如果以 windows 來說,windows 的根目錄就是『本機』或『電腦』,並不是『 C 槽』喔!

至於檔案系統,例如 windows 預設的檔案系統為 NTFS,而隨身碟預設檔系統大多為 FAT,CentOS 8 預設的檔案系統則是 XFS。 這是磁碟用來儲存資料時,所需要預先進行格式化的一個格式。

例題 10.1-3: 更改輸入法的按鈕功能:
  1. 概覽-->顯示應用程式-->設定值-->裝置-->鍵盤
  2. 最底下有『切換到下一個輸入來源』,按下該項目,然後選擇『ctrl』+『空白鍵』即可使用慣用的切換方式了。

10.2: Linux 文字界面 bash 指令操作

上週我們有在文字界面的終端機上面下達過許多的指令,現在來複習一下:

例題 10.2-1: 複習上星期操作的指令行為:
  1. 使用 student 登入系統圖形界面,此時你應該會在 tty2 才對。
  2. 請分別在不同的 tty 之間切換,同時在 tty5 再次使用 student 登入一下!
  3. 轉回 tty2,打開一個文字界面終端機,查看目前登入系統的帳號有哪些?該輸入什麼指令?
  4. 想要查看目前所在目錄有什麼檔名,可以使用哪個指令查閱檔名資料?
  5. 想要查看根目錄 (/) 有哪些檔名,又該如何下達指令?
  6. 想查閱目前目錄下的所有檔名 (包含隱藏檔),又該如何下達指令?
  7. 顯示出剛剛下達過的 10 個歷史命令。

上面的指令都很簡單,所以這裡就不在重複說明解答~有問題,請參考前一章節的內容。而從上面的指令輸入,你大概可以得到底下的指令下達方式:

[student@localhost ~]$ command  [-options]  [parameter1...]
  • command (指令部份):
    • 一行指令中第一個輸入的部分是指令(command)或可執行檔案(例如script)或完整執行檔名
    • 『 command 』:為指令的名稱,例如查看歷史命令的指令為 history 等等;
  • [-option] (選項部份):
    • 中括號『 [ ] 』不存在實際的指令中,僅作為一個說明提示,提示為 -option 在指令列中可有亦可無之意;
    • 『 -options 』:為選項,通常選項前面會帶有減號 (-),例如 -h ;
    • options 有時會提供長選項,此時會使用兩個減號,例如 --help。
    • 注意,選項 -help 通常代表 -h -e -l -p 之意,與 --help 的單一長選項不同。
    • 選項有時會帶有參數,因此可能會發現 [-option para] 或 [--option=para] 之類的語法
  • [parameter1...] (參數部份):
    • 『 parameter1 』:參數,為依附在選項後面的參數,或者是 command 的參數;
    • 若有 parameters... 後面有小數點,則代表可以加上多個參數之意。
  • 指令執行的注意事項:
    • 指令、選項、參數之間都以空格或 [tab] 作為區分,不論空幾格都視為一格,故空白是特殊字元
    • [Enter]按鍵代表著一行指令的開始啟動。
    • Linux 的世界中,英文大小寫為不同的字元,例如 cd 與 CD 是不一樣的指令。
  • 指令用法求救文件

雖然 Linux 有所謂的 man page (手冊文件) 功能,不過初學者或許直接記得救援文件 (--help) 就可以了!舉例來說, 我們談到了『 ll 』是查閱長檔名的指令,那加上 -a 這個選項,就可以列出隱藏檔,為什麼?看一下這裡:

[student@localhost ~]$ ll --help
用法:ls [選項]... [檔案]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
.....
  -d, --directory            list directories themselves, not their contents
.....
  -h, --human-readable       with -l and -s, print sizes like 1K 234M 2G etc.
.....
  -S                         sort by file size, largest first
      --sort=WORD            sort by WORD instead of name: none (-U), size (-S),
                               time (-t), version (-v), extension (-X)
.....

如上所示, ll 可以用的選項與參數還不少,而 ll 其實是用到 ls 這個指令功能啊!現在你就知道如何查詢相關的選項功能應用了!

例題 10.2-2: 透過 --help 功能,找到 ll 的用法
  1. 列出 /var/spool/mail 這個目錄本身的權限,而不是目錄內的檔名
  2. 列出 /etc 底下的檔案
  3. 列出 /etc 底下的檔案,但使用檔案容量進行排列
  4. 列出 /etc 底下的檔案,檔案容量使用人類易讀的容量單位 (MB, KB, GB 等)
簡單解答如下:
  1. ll -d /var/spool/mail
  2. ll /etc
  3. ll --sort=size /etc
  4. ll -h /etc
記得一定要執行!Linux 是『看不會』的,要『做才會』!

事實上,跟我們互動的這個終端機程式,其實就是 shell,回想一下當初作業系統相關的四個同心圓,最外頭與使用者互動的是 application 對吧? 像不像最外層的蛋殼?所以這種提供使用者操作界面的程式,就被我們系稱為殼程式 (shell)。CentOS 預設的殼程式為 bash shell, 上面提到的種種指令下達方法,就是 bash shell 的操作方式。

  • bash shell 的常用熱鍵、組合鍵

在純文字模式 (bash shell) 的環境下,建議讀者們一定要熟記且經常應用的熱鍵與組合鍵有:

  • [tab]:可以是命令補齊,可以是檔名補齊,也能是變數名稱補齊
  • [ctrl]+c:中斷一個運作中的指令
  • [shift]+[PageUp], [shift]+[PageDown]:上下移動螢幕畫面
例題 10.2-3: 使用熱鍵與組合按鍵
  1. 系統中以 if 及 ls 為開頭的指令,各有哪些?
  2. 有個以 ifco 為開頭的指令,詳細指令名稱我忘記了,你可以找到這個指令名稱嘛?
  3. 操作一個指令『 find / 』這個指令輸出很亂,我不想看了,該如何中斷這個指令?
  4. 操作一個指令『 ls ' 』,因為不小心多按了一個單引號,導致指令輸入行為很怪異,如何中斷?
  5. 我想用『 ll -d 』去看一下 /etc/se 開頭的檔案有哪些,可以怎麼做?
  6. 我想要知道,到底有多少變數是由 H 開頭的?如何使用 echo 去查閱?
簡易解答如下:
  1. if[tab][tab] 以及 ls[tab][tab]
  2. ifco[tab][tab]
  3. 輸入『 find / 』指令後,立刻按下『 [ctrl]+c 』來中斷即可
  4. 同樣的,出現問題,按下 [ctrl]+c 中斷即可
  5. ll -d /etc/se[tab][tab]
  6. echo $H[tab][tab]

在 Linux 底下習慣按下 [tab] 是常見的動作,請初學者一定要養成這個習慣!這樣打字、輸入指令才會快速!

  • 語系資料 (LANG) 的觀察與設定

語言 (language) 是很重要的,不同的使用者慣用的語言不一樣,那麼,如果我想要切換我自己熟悉的語言,該如何處理? 舉例來說,假如我想要使用韓文或日文,怎辦?事實上,可以透過 localectl 這個指令來查詢喔!

例題 10.2-4: 查詢與修改目前終端機的語系資料
  1. 先使用 localectl --help 查看到底有哪些可支援的選項、參數,同時注意 list 這個關鍵字
  2. 找到 list-locales 這個關鍵字後,使用『 localectl list-lo[tab][tab] 』看看能不能補齊參數
  3. 承上,看看能不能找到所希望的語系資料?看起來我們的系統似乎沒有安裝全部的語系...
  4. 使用 localectl 看看目前的語系資料,同時找到語言變數為何?
  5. 使用『 ll / 』查看輸出資料是否具有中文?
  6. 下達『 LANG=en_US.utf8 』,然後重複『 ll / 』看看輸出的結果是什麼?
  7. 將與系改回來喔!
  • 工作目錄與檔名相對/絕對路徑

預設的情況下,使用者取得 shell 的環境時,通常就是在自己的『家目錄』,例如 windows 檔案總管打開後, 出現在畫面中的,通常是『我的文件夾』之類的環境。若要變更『工作目錄』,例如變更工作目錄到 /var/spool/mail 去,可以這樣做:

[student@localhost ~]$ ls
Desktop    Downloads  Music     Public     text1.txt
Documents  group      Pictures  Templates  Videos

[student@localhost ~]$ cd /var/spool/mail
[student@localhost mail]$ ls
rpc  student

如上所示,一開始讀者會在 student 家目錄下,因此單純使用 ls 時,會列出工作目錄 (家目錄) 底下的資料,亦即是一堆家目錄應該會存在的目錄名稱。 而當讀者操作『 cd /var/spool/mail 』之後,工作目錄會變成該目錄,所以提示字元裡面也將 ~ 變成了 mail 了。因此使用 ls 所列出的工作目錄下的資料, 就會有不一樣的檔名出現。讀者在操作指令時,要特別注意『工作目錄』才行。而列出目前工作目錄的方法為使用 pwd:

[student@localhost mail]$ pwd
/var/spool/mail
[student@localhost mail]$ 

讀者操作系統時,不要只看提示字元下的檔名,最好能夠查閱實際的目錄較佳。如下案例:

[student@localhost mail]$ cd /etc
[student@localhost etc]$ pwd
/etc
[student@localhost etc]$ cd /usr/local/etc
[student@localhost etc]$ pwd
/usr/local/etc
[student@localhost etc]$ 

操作者可發現,自從進到 /etc 之後,提示字元內的目錄位置一直是『 etc 』,然而使用 pwd 就能夠發現兩者的差異。 這在系統管理時非常的重要,若去錯目錄,會導致檔案修訂的錯誤!

除了根目錄與家目錄之外,Linux 上有一些比較特別的目錄需要記憶:

目錄名稱目錄意義
/ 根目錄,從根目錄寫起的檔名只會存在一個
~ 使用者的家目錄,不同用戶的家目錄均不相同
. 一個小數點,代表的是『本目錄』,亦即目前的工作目錄之意
.. 兩個小數點,代表的是『上一層目錄』
- 一個減號,代表『上一次的工作目錄』之意

操作者應該要注意,根據檔名寫法的不同,也可將所謂的路徑(path)定義為絕對路徑(absolute)與相對路徑(relative)。 這兩種檔名/路徑的寫法依據是這樣的:

  • 絕對路徑:由根目錄(/)開始寫起的檔名或目錄名稱, 例如 /home/student/.bashrc;
  • 相對路徑:相對於目前路徑的檔名寫法。 例如 ./home/student 或 ../../home/student/ 等等。開頭不是 / 就屬於相對路徑的寫法
例題 10.2-5:了解檔名撰寫的『絕對路徑檔名』與『相對路徑檔名』的操作
  1. 前往 /var/spool/mail 並觀察當下的工作目錄
  2. 觀察上一層目錄的檔名資料,查詢一下有沒有『 anacron 』這個檔名存在?
  3. 請前往『上一層目錄的那個 anacron 目錄』
  4. 在當下的目錄中,如何查詢 /var/log 這個目錄的內容?分別使用兩種方式 (相對/絕對路徑) 來查閱
  5. 回到 student 家目錄
  6. 分別使用『預設』、『絕對路徑』、『工作目錄底下』執行 ifconfig 的方法
簡單的解答如下:
  1. cd /var/spool/mail
  2. pwd; ll ..
  3. cd ../ana[tab]
  4. pwd; ll -d /var/log; ll -d ../../log
  5. which ifconfig; ifconfig; /sbin/ifconfig; cd /sbin; ./ifconfig

10.3: 程序觀察與排程概念

除了作業系統是由 BIOS 去載入執行的,然後第一隻系統程式則是作業系統自己去呼叫的之外,其餘的程式要載入到記憶體當中執行時,都需要透過觸發的程序。 在 GUI 界面,就是透過滑鼠點擊,在終端機界面,就是透過指令來觸發的。無論如何,當程序被觸發之後,就會被載入到記憶體當中, 成為記憶體當中的活動單位,這就是所謂的程序 (process, 也有翻譯做行程)。

  • 程序的識別碼 PID

在儲存媒體當中的單位稱為程式 (program),這個程式是可以被重複觸發的!例如你可以在一個系統上面打開多個 chrome 瀏覽器, 這就是一個程式 (chrome) 被重複觸發的情況。既然有多個 chrome,那麼作業系統如何知道現在使用者操作的是哪一個程序?其實作業系統認的是程序識別碼 Process ID, 現代的作業系統在記憶體當中的程序都是以 PID 來管理的。

例題 10.3-1: 使用 top 進行動態程序觀察
  1. 使用 top --help 查詢一下 top 怎麼用 (特別注意 -d, -u, -p 等功能)
  2. 使用『 top 』直接執行,預設的資料會在 5 秒鐘刷新一次
  3. 使用『 q 』按鈕結束 top
  4. 再次使用『 top -d 2 』讓 top 每 2 秒更新一次
  5. 按下 [1] 這個數字鍵,看看 CPU 個數可能有幾個?
  6. 按下『 q 』離開,重新使用『 top -d 2 -u student 』只看 student 自己的程序有哪些
  7. 按下『 M 』或『 P 』(大寫),看看排序的情況有沒有差異
  8. 最後按下『 q 』回到原本的 bash 環境。
  • 程序的狀態

程序有相當多的狀態,如上個練習裡面的 top 輸出結果中,就會有說明正在執行中的、睡眠中的以及成為殭屍的程序數量。 另外,程序也有進入等待的中斷狀態等等。

此外,在 top 的畫面中,整體 CPU 狀態內有個 iowait 的項目,該項目指的是 CPU 用於等待輸入輸出的情境, 由於 I/O 的速度比 CPU 運算的速度要慢上許多,因此當你系統上面的 iowait 百分比過高時,可能系統的效能就會很低落。 此時適當的找出問題程序並加以管理則是很重要的任務之一。

  • CPU 排程

基本上,依據使用者操作的行為,一般排程重點有兩種類型:

  • CPU bound:運算導向,比較著重於運算的類型,很操 CPU 運算功能。
  • I/O bound:輸入輸出導向,比較著重於週邊界面的資料傳輸行為,例如資料庫系統。

一般來說,CPU 執行過一段時間分量之後,會將程序丟回佇列池。但丟回佇列池時,會根據程序的狀態而進行一些額外的工作,如下圖示意:

程序佇列

在 Linux 底下使用的是透過優先權 (priority) 的方式去判斷哪個佇列底下的程序可以執行比較久的時間依據!

程序佇列
例題 10.3-2: 使用 top 觀察 NI 與 PR
  1. 輸入 top ,查看一下 PR 的欄位項目,那個就是 Priority 的佇列,越小有越多的 CPU 分量時間
  2. 觀察完畢之後輸入 q 即可離開 top 的動態更新畫面

你要知道的是, PR 為 Priority 的縮寫,意思是優先順序,在 top 的指令下, PR 最小為 0 ,最大為 39,但是 PR 是系統自己控制, 我們沒有辦法直接調整~但是,可以透過 NI (就是 Nice) 來調整 PR 的數值!基本上,有底下的相關性:

  • PR(new) = PR(old) + NI

所以, NI 當然越小代表時間分量可用的數據越大。但是,不能讓一般用戶過太爽,所以,只有 root 才能夠讓 NI 變小,一般用戶只能讓 NI 越變越大。

  • 程序的相依性

另外,程序是有相依性的,因此有所謂的父程序與子程序,某些狀態底下,你關閉子程序之後,父程序會反覆的產生子程序。 因此,如果要刪除掉該程序串,就得要刪除程序樹的最上層父程序才行。

例題 10.3-3: 用 pstree 程序樹觀察指令,觀察程序的相依性
  1. 輸入『 pstree --help 』查看可用的選項,其中 -p, -T, -t, -u 這幾個項目仔細瞧瞧
  2. 輸入『 pstree 』指令,觀察輸出的結果
  3. 輸入『 pstree -pu 』指令,觀察輸出的結果
  4. 找出 PID 為 1 的程序名稱為何?你必需要找出 systemd 才對!
  5. 輸入『 history 』看看曾經下達過哪些指令了。
  • 執行緒 (thread)

在 Linux 系統裡面所有的記憶體內的單元都是以程序的概念來處理的,但是總有父程序與子程序之分。在 windows 底下則有所謂的執行緒。 基本上執行緒你可以想成是與父程序共用某些資料區段的子程序這樣的概念。

同學們應該會發現,第一次載入 word 或 chrome 時,其花費的時間相當大量,但再次載入另一隻 chrome 時,速度就快的多! 這是因為第一隻 chrome 會是完整的程序,後面載入的 chrome 則是透過行程內的資料在產生一隻新的執行緒,並且該執行緒可以在行程內共用相關的軟體或資料, 因此第二次觸發該程式時,就會感覺速度比較快,原因是許多已經載入到記憶體中的程式段落無須再次載入。

例題 10.3-4: 用 pstree 程序樹觀察指令,觀察程序的相依性
  1. 輸入 pstree -p -t 看看有子程序 (執行緒) 時候的狀態
  2. 輸入 pstree -p -T 看看取消仔程序 (執行緒) 時候的狀態

除了 top 與 pstree 之外,Linux 也提供了 ps 這個指令給大家使用。通常你只要記得兩個選項即可:

例題 10.3-5: 用 ps 指令觀察程序
  1. 輸入『 ps -l 』查閱 bash 自己的程序相關資訊,要注意的是 PPID 與 PID 喔! PPID 就是 Parents PID,就是父程序。
  2. 輸入『 ps aux 』查閱系統所有的程序喔!
  3. 輸入『 ps aux | grep bash 』可以找到 bash 關鍵字的那一行!
  • 使用 nice 與 renice 處理程序的優先順序

剛剛提到程序之間是有關系的,而程序可以具有不同的優先權,透過的是 PR 這個參數。不過,要改這個參數,得透過 NI 這個參數來處理。 在 bash 環境下,有提供兩個指令來進行 NI 的修改:

  • 『 nice -n 數字 指令 』: 執行一個新指令,給予新的 NI 數值
  • 『 renice -n 數字 PID 』:透過 renice 去修改一個已經存在的程序的 NI 值。
例題 10.3-5: 用 renice 修改 NI 值
  1. 使用 nice --help ,找出 NI 值的可用範圍是多少?
  2. 找到 student 自己的 bash 的 PID,分別使用 pstree 與 ps 去找!
  3. 將 NI 值改為 10
  4. 使用 top -p PID 去查閱 NI 是否真的改過了。
  5. 使用 ps -l 看看 PRI 與 NI 的變化又是如何。

這裡得要特別強調, top 這個指令的 PR 值基準值為 20,但是 ps -l 這個 PRI 輸出的數值基準值為 80 !所以,你會看到兩個不同的數據! 不要害怕,只要知道 NI 數據是什麼就可以了!

10.4: 管理員身份切換與簡易的程序管理

某些程序管理需要用到管理員的身份來處理才行!

  • 使用 su - 進行管理員身份切換

前一章有稍微談過,要進行某些系統維護的行為,就得要有管理員 (root) 身份,那麼切換身份的指令就是 su - 囉!記得要『 su - 』 不要忘記減號!相關操作如下:

[student@localhost ~]$ su -
密碼:  <==輸入密碼時,不會出現 * 符號!
[root@localhost ~]#

本教學系統 root 的密碼為 myCentOS8,請注意大小寫不同!因此在『密碼:』後面輸入 myCentOS8 之後,你就可以發現使用者的身份變換成為 root 了!

例題 10.4-1: 用 date 修改日期
  1. 先用一般帳號 student 查詢 date --help 的用法,注意看 Usage 會有兩種使用方式喔!
  2. 單純輸入『 date 』看看輸出的訊息為何?
  3. 輸入『 date MMDDhhmmYYYY }
  4. 輸入『 date MMDDhhmmYYYY 』其中 MMDDhhmmYYYY 指的是月日時分年喔!
  5. 切換身份成為 root 看看。
  6. 是否可以使用方向鍵上與下呼叫出剛剛的 date 指令呢?為啥?
  7. 重複輸入『 date MMDDhhmmYYYY 』,然後輸入『 date 』看看時間是否正常了?
  8. 記得回到 student 的身份喔!
  • 簡易程序管理

程序的管理還挺複雜的,不過,我們只要記得一件事即可,那就是程式是可以被管理的。基本上的管理可以是這樣:

  • SIGHUP (1):命令程序重新讀取設定檔,有點像 reload 之意。
  • SIGINT (2):模擬 [ctrl]+c 的中斷方式處理
  • SIGKILL (9):強迫中斷
  • SIGTERM (15):嘗試正常情境中斷

如果需要傳送上面的訊號給某一個 PID 的話,就可以使用 kill 這個指令來處理喔:

[student@localhost ~]$ kill -[signal] PID
例題 10.4-2: 用 kill 傳送訊號給 PID 進行程序管理
  1. 開兩個視窗,其中一個進行 top 指令
  2. 在另外一個視窗當中,透過 ps 或 pstree 找到 top 的 PID 號碼為何
  3. 傳送 -2 的訊號,看看另一個視窗的 top 變怎樣了?
  4. 找到 atd 這個程序的 PID 號碼
  5. 能不能讓 atd 重讀設定檔 (reload) 呢?
  6. 切換身份成為 root 後,能不能處理上面的動作?
  7. 回到 student 身份。

10.5: 課後練習

作業上傳時的注意事項:

  1. 伺服器的詳細資料,以及相關傳輸軟體設定,請參考第一章的 1.5 節的內容。
  2. 可以使用 MS office 的 word 或者是 libreoffice 的 writer 等軟體來撰寫你的作業,作業檔名可以使用 .doc, .docx 或者是 .odt 或者是 pdf 等格式,均可接受。
  3. 若作業中有圖檔,請將圖檔降低水平解析度到 800 像素以下再貼到文章中,檔案容量以不超過 2Mbytes 為限。
  4. 檔名請設定為: os_4XXXCYYY_unit10.doc (4XXXCYYY 是你的學號,請填正確,有分大小寫,請確認)
  5. 請上傳到你家目錄底下的 os 目錄中 (若不存在,請自行建立該目錄)

開始本章節題目:

  1. 簡答題:
    1. 在 Linux 系統中,哪些組合按鍵可以進入 tty3 呢?
    2. 承上,那一個組合按鍵可以中斷正在前景運作的程式?
    3. 承上,那一個按鍵可以達成命令補齊/檔名補齊/參數與選項補齊的功能?
    4. 那一個變數可以修改語系的顯示效果
    5. 承上,如何設定語系資料成為 zh_TW.utf8 這個?
    6. 如何將工作目錄切換到 /usr/bin ?寫下指令
    7. 承上,如何回到自己的家目錄?
    8. 承上,如何回到上一個工作目錄?
    9. 說明『 /usr/bin 』與『 local/bin 』(1)那一個是絕對路徑檔名與相對路徑檔名 (2)主要的區分是什麼符號?
    10. 說明 Linux 底下,隱藏檔的檔名為何?
    11. 寫下本章提到的觀察程序的指令主要有那三個?
    12. 在系統的運作過程中,什麼是 CPU bound 與 I/O bound
    13. 當輸入 top 與 ps -l 這兩個指令時,哪個欄位的內容代表的就是不同優先權的等待佇列號碼?
    14. 透過 ll 指令 --help 功能,找到我想要輸出完整時間 (full time) 時,該如何下達指令? 例如寫下列出根目錄底下所有檔名的完整時間。
    15. 傳送訊號給 PID 時,1, 9, 15 號碼的訊號,各別代表什麼意思?
  2. 使用 student 身份操作底下的指令,並分別拍照回傳:
    1. (1)切換路徑到 /dev/shm 底下, (2)顯示出目前的工作目錄, (3)顯示出 /var/log 這個目錄本身的詳細權限與檔名資料 (不是該目錄內的檔名)。 將三個指令的運作結果截圖貼上。
    2. (1)使用 [tab] 按鈕的功能,找出 h 開頭的指令有哪些? (2)輸入 hostnamectl 結果顯示什麼?將上述兩個指令的執行結果截圖貼上
    3. 找到適當的指令輸入,讓系統可以顯示出 /tmp 目錄下的隱藏檔檔名,將指令與結果拍照貼上。
    4. 找到適當的指令輸入,讓系統可以依據時間排序,將 /etc/sysconfig 的檔名依據時間排序結果輸出,將指令與結果拍照貼上
    5. 承上,找到適當的指令,讓時間反向 (reverse) 輸出檔名,將指令與結果拍照貼上
    6. 透過任何上課教的 Linux 指令,找到 crond 這個程序,拍下 crond 的 PID 號碼
    7. 拍下 top 的執行畫面,然後說明 (1)系統共有幾隻程序 (2)正在運作中的程序有幾隻 (3)有幾隻程序是在停止 (stop) 的狀態 (4)有幾隻程序變成殭屍程序了。
    8. 承上,在 top 底下按下 1 之後,看看有幾顆 CPU,將 CPU 數量部份的畫面截圖貼上。
    9. (1)找到你的 bash 程序的 PID (2)將 PID 的 Nice 值重設為 7,(3)再次觀察你 bash 的 NI 與 PRI 變化。將指令與結果截圖貼上。
    10. (1)以 NI 值 10 執行名為『 sleep 1h 』的指令串,(2)到另一個視窗,找到這個 sleep 的 PID 後,以 top 單純觀察這隻 PID (整個畫面只有一個 PID), 請將 (1) 的指令寫下,並將 (2) 的結果截圖貼上。
  3. 使用 root 身份操作底下的指令,並分別拍照回傳:
    1. (1)找出名為 cups 的 PID 號碼,並且 (2)強迫刪除該 PID 的運作。請將執行過程截圖貼上。
    2. (1)找出名為 crond 程序的 PID 號碼,(2)並且強迫 crond 重讀設定檔 (reload),將執行過程截圖貼上。
    3. (1)使用 date 這個指令設定時間成為正確的時間,(2)使用 date 輸出當下的時間,(3)將執行指令與過程截圖貼上。