一、 UNIX 的使用與架構: A. login / logout 我們要能夠進入 UNIX 系統。每個人都有一個 username 與 password, username 是你在這個系統中的名字,而 password 就是密碼,用來 保護你的帳號不會被別人偷走。 我們稱進入系統的動作為 login ,在進入系統之前,首先我們會見到以下的 畫面: SunOS UNIX (ccsun24) login: 然後你 login: 之後接著打你的 username ,系統就會自動找出你的資料, 接著出現一行 password: 這時所要輸入的就是你的密碼了。在輸入密碼的時候,並不會顯示在螢幕上, 避免你的密碼在使用的時候被別人偷看到。 如果你的密碼正確,系統會顯示出你已經 login 的訊息,並顯示上一次 login 的時間。當系統完成對你的使用環境設定的工作時,會顯示出一個提示符號,如下 面的形式: jjtseng@ccsun28:/u/gcp/82/8217529/doc ! > 在 > 符號之後你就可以輸入你所要下的指令( command ) ,如 ls , who , 等 等。不過要注意的是,在 UNIX 之下英文字母的大小寫是有差別的,如果像我的 username 是 jjtseng , 則我打入 JJTseng ,系統就不知道這個 user 是誰了。同 樣的,你所下的指令也要注意大小寫的差別。 UNIX 的指令分成兩種,一種是實際存放在檔案系統的程式,如 ls , who , cat , more ....等等都是,另一種是 shell 內建的指令,後面的內容對這兩種 指令都會有詳細的介紹。你也可以寫程式來增加你可使用的指令,如系上大部份 存放在 /usr/local/bin 的指令都是屬於這一類。 當你用完系統,準備離開時,別忘了要 logout ,否則人雖然走了,可是還 是會有人在你離開系統後用你的名義使用系統,如果這個人做了些壞事,帳可是 都算在你頭上的。離開系統可以使用 exit 指令。鍵入 exit , 按 enter 鍵, 系統就會離開,而等待下一個人進入系統。 B. Shell Shell 的原意是殼,在 UNIX 裡面就是一個提供使用者使用的環境。每一個 使用者在 login 後系統會提供使用者一個 login shell , 在使用期間使用者亦 可自行開啟其他的 shell 用以執行 shell script 或是另外建立一個使用環境。 Shell 本身是一種解譯器( Interpreter ), 它提供一種語言,供使用者對作 業系統下達指令,我們一般的指令就是它的語言的一個最簡單的格式。你也可以 在使用期間根據一些使用的狀況來加上迴圈及判斷結構,通常我們在寫一個 shell script 時比較會利用到 shell 的其他語言結構( if , for , while 等),不過在 命令列提示號之下亦可直接使用。 你可以將一連串的命令寫到一個檔案,建立一個 shell script , 這樣你就可 以將一些常做的事情直接整理成一個大的 batch job 。 在 shell 中還提供使用者方便的利用 UNIX 的轉向及 pipe 功能,使用者可以 利用這些功能將指令的輸出存檔或做為另一個指令的輸入,也可以將大量的輸入資料 放在一個檔案中,然由讓指令自此檔案抓取所需之輸入資料。 除此之外, shell 也提供建立別名( alias )和變數( variable )的功能,使 得使用者可以更加彈性的對系統下達命令。 其餘有關 shell 更詳細的使用說明請參照本手冊的其它部份。 C. 檔案、目錄、與檔案系統 UNIX 使用一個 single root 的樹狀結構檔案系統,最頂層稱為根目錄( root ), 包含許多目錄,每一個目錄底下均存放許多的檔案與子目錄,用這樣的樹狀結構從根 目錄到每一個檔案均會有一個唯一的找尋的路徑。而每一個使用者在 UNIX 下面均有 一個 HOME directory ,做為這個使用者個人資料的存放處。 UNIX 的每一個目錄裡頭,有兩個特殊的目錄: 一個是其本身「.」,另一個 是其上一層目錄「..」。這兩個目錄的用途在於使得樹狀架構的檔案系統各目錄 可以很輕易的雙向溝通,同時在使用上也較為方便。 在 UNIX 上一些特殊的目錄儲存了各種不同需求的檔案與作為指令的程式,如 下所述( 以下的以交大資工系計中的檔案系統為準,在不同的地方可能有不同的放 置方法 ) : a. /bin 、/usr/bin 、/usr/ucb /bin 和 /usr/bin 兩個目錄主要放的是標準的指令,例如 ls , rm , cat ... 等等,各個系統的 /bin , /usr/bin 下的指令大多都相同,主要 在避免不同 UNIX 系統之間的差異性。 /usr/ucb 放的是由 U.C. Berkeley 所發展出來的一些應用程式,像 telnet , ftp , rlogin , rsh 等均存放在此。 b. /usr/local/bin /usr/local/bin 所存放的指令多為系上所特有的指令,因為大多是由歷屆中 心講師及助教所撰寫或 install 的程式和軟體,系上大部份 network service 的執行程式均放在此,如 tin , elm , 以及許多有用的轉換程式,像 hz2ps , b2g , g2b 等等。 c. /lib 、/usr/lib 在此目錄之中所存放的是所有程式所需要的程式庫。在 UNIX 中,編譯程式時 常需要許多的函數和副程式,而這些函數和副程式多存放在程式庫( library ) 寫程式時就不用重新撰寫這些部份的程式碼了。 同時,大部份的 UNIX 執行檔在編譯完成時將不會將副程式的程式碼加到執行 檔中,而是等到執行時才自程式庫取出副程式的程式碼,這種動作稱為動態鏈 結( Dynamic link ),可想而知這樣的設計可以減少許多的儲存空間,而這些 供動態鏈結用的程式庫亦是存放在 /usr/lib 中,所以這個目錄是非常重要的 目錄,如果它的內容有錯往往會造成系統完全無法工作。 d. /etc /etc 這個目錄是存放管理 UNIX 系統用的程式,以及一些系統設定檔。 e. /home2/X11R5 在資工系裡頭,使用最普遍的圖形使用者介面( Graphics User Interface , GUI ) 是由麻省理工學院(MIT)所發展出來的 X window , 目前使用的是 X11R5(Version 11 Release 5),這一部份的程式,程式庫,標頭檔及其他資源檔均放在 /home2/X11R5 這個目錄下。 f. /usr/man 在 UNIX 中,提供 man 指令( manual )讓使用者在使用時可隨時察詢一些指令, 函數,表格的使用法和規格,是一個非常有用的指令,而這些指令的 help 訊息 就是存放在 /usr/man 下面。 D. Process 在 UNIX 中,一個執行中的程式就是一個 Process , 它佔有記憶體,是一 個"活著"的物體。每一個 Process 有一個 Process ID , 你可以用 ps 指令來 觀察目前系統中所有的 processes ,也可以利用 kill 指令送訊號給你自己的 process ( 為何叫 kill 不叫 send ? 因為通常都是送一個"殺掉"的訊號 )。 .