UNIX 簡介
FileSystem
Home
每個使用者在 UNIX 系統中皆有各自的個人家目錄(Home Directory)做為該使用者個人資料之存放處。
- 家目錄路徑可由
$HOME
環境變數取得- 於 Shell 中執行
echo $HOME
即可查看該值
- 於 Shell 中執行
/bin
、/sbin
-
/bin
:bin
為binary
的簡寫,放置的是在單人維護模式下還能夠被操作的指令,如:cat
、cp
、mv
、等常用指令 -
/sbin
:主要用於放置開機、修復、還原系統所需要的指令或用於查詢、設定系統環境的指令。通常只用超級使用者(root)可以設定系統,而其他使用者最多只能用於查詢設定,如:ifconfig
、mkfs
、reboot
、等指令
/lib
用於放置於開機時以及在 /bin
或 /sbin
底下的指令會呼叫的函式庫(Library)。
/etc
系統主要的設定檔皆存放於此,包括帳號密碼檔、服務設定檔、等等。
/usr
usr 為 Unix Software Resource 的縮寫,將各軟體套件提供之額外資源放置於此目錄下,之中亦有相同於根目錄(/
)下之檔案結構。
Process
任何執行中的程式都稱為一個處理程序(Process),每個程序都會有一個對應的編號,稱之為 PID (Process ID),我們可以使用 ps
來顯示當下自己帳號執行的所有程序:
$ ps
PID TTY TIME CMD
20331 pts/12 00:00:00 tcsh
20340 pts/12 00:00:00 tcsh
21024 pts/12 00:00:00 ps
當中 PID
顯示的就是該程序的編號,你也可以使用 top
或 htop
來管理 Process,詳細的操作方式可以參考 UNIX 常見指令教學。
在類 Unix 系統中,每個程序都會有一個 niceness 值,用來讓 OS 決定各個程序的優先度,其值分布在 -20
~ +19
,新程序預設為 0
,越低代表優先度越高。使用者可以使用 renice
指令使程序執行時使用指定的 niceness 值,但只有系統管理員能夠將 niceness 值設為低於 0
的值:
$ nice -n 10 bash
如果發現您在執行的程式使用了過多的 CPU 資源,可以用 cpuset
(FreeBSD)/taskset
(Linux)設定程序與 CPU 的親和性,意思就是能讓程序只跑在您所指定的 CPU 核心上:
# 查看 PID 20331 的程序的 CPU 親和性
$ cpuset -g -p 20331
pid 20331 mask: 0, 1, 2, 3
# 將 PID 20331 的程序設定至 Core 0, Core 2 上執行
$ cpuset -l 0,2 -p 20331
# 再次查看 PID 20331 的程序的 CPU 親和性
$ cpuset -g -p 20331
pid 20331 mask: 0, 2
# 查看 PID 20331 的程序的 CPU 親和性
$ taskset -p 20331
pid 20331's current affinity mask: f
# 將 PID 20331 的程序設定至 Core 0, Core 2 上執行
$ taskset -p -c 0,2 20331
pid 20331's current affinity list: 0-3
pid 20331's new affinity list: 0,2
當程序處於執行狀態時,我們可以藉由傳送訊號(Signal)來控制程序運作的情形,例如使用 kill -1 20331
可以傳送編號 1
的訊號至 PID 20331 的程序,不同的編號在系統中都會有不同的意義,常見的訊號如下:
# | 名稱 | 用途 |
---|---|---|
1 | SIGHUP | 常用於通知程序重新讀取設定檔 |
9 | SIGKILL | 強制中斷並結束程序,這有可能會造成程序正在存取的檔案沒有被正確的寫回 |
15 | SIGTERM | 通知程序結束,程序在接受到此訊號後可以自行決定該如何結束 |
如果想要對某程式的所有程序傳送訊號時,則可以改用 killall
來進行,例如 killall -15 bash
則會對所有 bash
的程序傳送編號 15 的訊號。