UNIX 作業環境架構

 

 

UNIX 的特色:文字介面,多人多工,網路作業

文字介面的意思,是說使用者主要對 UNIX 系統所下達的指令是藉由文字化的指令符號。(UNIX 底下的 X-window 桌面上雖然可見到一些圖示,但那主要是用來發動應用軟體,與對作業系統下令仍有層次上的不同) Unix 的文字指令,都是一些指令英文的縮寫,以方便減少敲擊鍵盤的次數。如 cp (copy)、ls (list) 等。(系上買了不錯的 UNIX 指令辭典,在計算實驗室網頁上,請多多利用。)

多人多工,是指同一時間系統可以有多位使用者使用,且進行的工作可以是多項工作同時進行。有些作業系統是單人單工,如早期的 DOS,有些是單人多工,如 Windows,一個使用者,可以一邊播放影音媒體,一邊處理文書。多工是現代作業系統起碼的要求,因為硬體效能夠好,不這樣做則工作會很沒有效率 (過去的電腦硬體則是不夠大到適合做多工);而多人則是電腦系統要做為公用資源則我們為作業系統的基本要求。過去跑 UNIX 的大電腦,都不是〝個人〞電腦。

註:多工 (multi-tasking) 是利用 CPU 分時 (time-sharing) 的作法達到的,也就是說,電腦的處理器在某一小段時間替某個工作運作,而下一個小時段又替另一個程式運作,但由於 CPU 動作很快,因此使用者 (操作者) 不容易感受到電腦反應時間有所延遲。

UNIX 作業系統的設計一開始就以網路作業的出發點做考量,因此有完整的網路環境及功能。 透過網路資源,除了標準指令可供使用者在取遠端檔案及進入遠端系統外 (如 ftp,telnet),另有整體網路的架構,可以把來自不同主機的資源可以整合在一起 (如 NFS,NIS) 。

 

 

Shell : 把作業系統包起來的 "殼子"

使用者在登入系統後,使用者與作業系統之間的介面,透過對 shell 下指令,作業系統會執行使用者交付的工作。

UNIX 長時間的發展,產生出不同的 shell,其實在不同的 shell 下,所有 UNIX 的指令仍是完全一樣的,故一般的使用者操作動作不會受到任何影響。不同的 shell 只有在設定環境變數以及自動化的指令有所不同,以 UNIX 指令配合環境變數及各 shell 專有的控制指令所構成的自動化程式,叫做 shell script。

基本 UNIX 指令一樣,環境變數的設法不同,因此寫 script 的語法就有不同。即使是專家一般也只需要會寫一種即可,寫出來的 script 是純文學格式,再執行前先要 chmod u+x filename 成可執行。為了省去用 script 前要先進入該種 shell 的麻煩,可以在 script 的第一行寫入 #!/bin/tcsh ,雖然從 script 的語法而言,凡是一行的前面有井字符號 hash mark, # 的,都當作是註解用而不是有效的指令,但在 shell script 這堿O特殊用法,代表跑這個所 script 時作業系統所應該採取的 shell。

以 "UNIX shell script" 為關鍵字到網路上找找,會有很多教材供入門者學習,例如:

SHELL SCRIPTING 教學與心得 http://www.mgt.ncu.edu.tw/~dino/script/

shell的介紹及 shell script programming http://www.mgt.ncu.edu.tw/~dino/unix/

UNIX Shell Programming (Borne Shell or /bin/sh) http://nmc.nchu.edu.tw/linux/shell_lspace.htm

網路農夫 UNIX C Shell http://netlab.cse.yzu.edu.tw/~statue/freebsd/docs/csh/

簡易的 Shell Scripts
http://hw-driver-bal.nctu.cc:52833/pub/slime/tutorial/20060312-08.pdf

 

 

檔案系統與實體貯存裝置

目錄樹

大家對於樹枝狀目錄結構應該是熟悉的,凡是想要以清楚分類為目的來存放物件的設計,自然會用到樹狀結構。

 

根目錄,樹狀目錄的最頂端

/,這個符號叫斜線(slash),不要與 DOS 常用的另有一符號反斜線 \ (back-slash)混淆。

 

掛載實體貯存裝置成為一個目錄

例如你有第二顆 IDE 硬碟,故在 Linux 下的裝置識別代號是 /dev/hdb,若堶惘釣潃茪應帡 /dev/hdb1 及 /dev/hdb2,而你想要讓 /dev/hdb1 其上的資料想出現在 /my_2nd_drive 這個目錄下,則你須要以管理者權限先在根目錄用 mkdir 指令新建 /my_2nd_drive 之空目錄名,然後下 mount /dev/hdb1 /my_2nd_drive 指令。

 

網路檔案系統(Network File System,NFS)

其實,透過網路的聯繫,實體貯存裝置也不一定要在本機上。由管理者下 mount 123.45.67.123:/souce_dir /target_dir 就可以把遠端另一台 IP 是 123.45.67.123 這台電腦的 /source_dir 目錄掛在本地端的 /target_dir 目錄底下(當然,遠端須先把允許本地端掛載特定目錄的權限在 /etc/exportfs 檔中設定起來)。

 

 

 

常見的系統目錄及其功能

/etc

許多系統設定存放的地方,像使用者清單與密碼(passwd 與 shadow)、常駐程式 deamon 組 態

 

/etc/initd.d

常駐服務程式 deamon 放置之處,系統管理者有時須啟動、停止或重新啟動常駐服務時,就要用到放在這堛 script。 例如,重新啟動網頁服務時,要下 /etc/initd.d/httpd restart

/etc/rc.d

一個完整的 UNIX 作業系統安裝包含了幾個可以運行的模式,像是單人無網路或多人網路(都一定是多工多工),或多人 X-視窗等。不同的運行模式會有不同的常駐程式服務,其設定分別存在此目錄中。另外,開機後一定要啟動的程式也設定在這堙A如 rc.local。

 

/etc/httpd/

放置網頁伺服器函式庫(/etc/httpd/modules)及設定(/etc/httpd/conf)的目錄,其中/etc/httpd/conf/httpd.conf 檔內的 DocumentRoot 設定可指定網頁瀏覽器指到這台伺服器時,其對應的資料空間是從那一個目錄開始的,也就是網頁檔案空間的根目錄位置。(改過後記得重新啟動網頁常駐服務才會生效。)

/lib、/usr/lib、/usr/local/lib、/usr/X11R6/lib

存放系統副程式庫(又叫函式庫 library)的預設路徑。堶悸瑰仵蛈W字都長得像 lib***.a 或 lib***.so 這種樣子。我們寫的程式要是有用到這些函式庫堛漯F西,則編譯 (compile) 時就要多下 -l*** 參數(注意用 -l 時,函式庫名頭尾的 lib 及 .a 或 .so 一定要略去,若不想使用 -l,其實直接給函式庫全名,甚至完整路徑全名也可以)

系統及編譯器一般會定 /lib、/usr/lib 為預設搜尋函式庫的路徑,若副程式庫在其他路徑下,則可設LD_LIBRARY_PATH 環境變數(以 C shell csh 或 tcsh為例,下 setenv LD_LIBRARY_PATH your_library_full_path)來指定。

/usr/X11R6/lib 專放與 X-視窗有關的圖形函式,我們課程中使用 pgplot 時會用到。例如 f77 -L/usr/X11R6/lib -lX11 ...

/var

/var 底下常放一些系統服務所需要暫存及記錄的檔案

/var/yp

NIS (舊名 yellow page)程式及設定的 Maikefile 存在處,從該 Makefile 內可找到將共享之密碼檔的位置,有需要新增 user 之 ID 與密碼時,只須以管理者身份先編輯該共享密碼檔,之後在 /var/yp 下打 make 即可。

 

/var/www/html

RedHat 放網頁的預設目錄,也就是 "http://機器名" 的起點,由 /etc/httpd/conf/httpd.conf 指定,也可以從其中的 DocumentRoot 更改其目錄。

 

/var/spool

列印、郵件信箱等需要先排隊再整批作業的服務,其暫存檔先放在這

 

/var/log

系統運作中各部分都會產生紀錄檔,如什麼人進來過 wtmp (一般使用者用 last 指令來看)、對外或自外傳進或傳出什麼檔案 xferlog、開機的裝置啟動資訊。

/usr/local

一個放置常用之公用共程式的目錄

/opt

另一個放置常用之公用共程式的目錄

 

/home 或 /usr/people

一般使用者的 home 目錄,可放各使用者自已的東西。不同的機器或機構可設為不同,像我們計算物理實驗室就設在 /NFS_home/ 之下。 大家記得有要保留的東西要備份起來。

 

/tmp

暫存目錄,媕Y的檔案會被定時自動清除(但目錄殼子不清除會留著,要小心別誤判)。/tmp 如果滿的話,有些程式,像 vi,會沒辦法運作。

 

/dev

裝置的識別代號總目錄

/mnt

許多外接裝置的掛載點,像是 USB 隨身碟

 

/bin、/usr/bin、/usr/sbin、/usr/local/bin

放置很多指令(本身就是小程式)的地方

 

也可以使用圖形介面來認識 UNIX 檔案架構 (待植圖)

 

幾個找東西、找指令的指令

find

whereis

which

env

 

 

轉載文章UNIX 安全構架的九點經驗