UNIX 簡介

FileSystem

Home

每個使用者在 UNIX 系統中皆有各自的個人家目錄(Home Directory)做為該使用者個人資料之存放處。

  • 家目錄路徑可由 $HOME 環境變數取得
    • 於 Shell 中執行 echo $HOME 即可查看該值

/bin/sbin

  • /binbinbinary 的簡寫,放置的是在單人維護模式下還能夠被操作的指令,如:catcpmv、等常用指令
  • /sbin:主要用於放置開機、修復、還原系統所需要的指令或用於查詢、設定系統環境的指令。通常只用超級使用者(root)可以設定系統,而其他使用者最多只能用於查詢設定,如:ifconfigmkfsreboot、等指令

/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 顯示的就是該程序的編號,你也可以使用 tophtop 來管理 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 的訊號。

References