UNIX 作業系統操作簡介

UNIX 是個多人多工作業系統。另外,UNIX 有很多種,如 AT&T UNIX (SVR4)、

SunOS 4.1.3、HP-UX R8、AIX V3、 XENIX、Linux 等等,國內學校工作站以使用

SunOS 為主流,各系統大同小異,以下介紹其基本指令的操作。

 ○ 第一節  命令格式 ○
        命令 [選項] [處理對像]
        例:  ls -la mydir

  □ 命令一般是小寫字串,注意大小寫有別。

  □ 選項通常以減號(-)再加上一個或數個字元表示,用來選擇一個命令的不同操作

  □ 同一行可下數個命令,命令間應以分號隔開。

  □ 命令之後加上 & 可使該命令背景執行。

     ☉ 一般在 shell 下執行程式,我們必須等剛下過的指令執行結束後,才能繼

        續下指令,這就是前景執行,如果程式執行時間太長,不想等待它,可將該

        程式放至背景執行,此時就可繼續做別的事了。

  □ UNIX 命令列有不少保留字,如 "\", "&", "|", ">", "<", "(", ")", "/",

     "!", "$", "*", "'" 等,這些字元均有特殊解譯,如果命名或參數要用到保留

     字,請在保留字之前加上反斜線 "\",例如 \! 代表 !, \\ 代表 \ 。

  □ 線上求助指令 -- man   可在線上用來查詢各種命令用法(manual page)的指令

     例︰man ls     查詢 ls 這個指令的用法

         man man    查詢 man 指令的用法

     以下大部份指令僅列簡要說明,詳細用法可用 man 查詢。為節省篇幅,舉例不

     多,讀者需時常上機使用才能真正熟悉指令的用法。
 ○ 第二節  檔案及目錄指令 ○
  □ 和 DOS 相似,UNIX 采用階層式目錄管理結構,由根目錄( / )開始一層層將子

     目錄建下去,各階層目錄以 / 隔開。

  □ home directory︰使用者 login 時,工作目錄的位置,是由系統管理者所設定

  □ "~" 符號代表自己的 home directory,例如 ~/myfile 是指自己 home 目錄下

     myfile 這個檔案;~b82000/bin/qkmj 代表 b82000 的 home 目錄下, bin 目

     錄內 qkmj 檔案。

  □ 檔名有區分大小寫,長度可達 256 字元 (隨系統而異),且不限點號(.)的數目

  □ 隱藏檔︰檔名或目錄名以 . 開頭即為隱藏檔。

  □ .   表示目前所在目錄

     ..  表示上一層目錄

  □ UNIX 的萬用字元有三種,'*' 和 '?' 用法和 DOS 相同,另可用 [....]

     代表區間內的任一字元,如 test[0-5] 即代表 test0, test1, ...,test5

     的集合。

  □ 以下是 ls -l 指令輸出的例子,分別介紹各欄位的意義

      total 63

      drwx------  4 b1503045     1536 Feb 13 16:37 Mail

      drwx------  2 b1503045      512 Jan  9 16:26 News

      drwx------  2 b1503045      512 Feb  7 00:46 bin

      drwx------  2 b1503045     1024 Nov  1 16:43 c

      -rw-------  1 b1503045     3051 Feb  7 01:49 dial-up

      -rw-r-----  1 b1503045    37106 Feb 13 02:00 wwwfaq1

      drwx------  2 b1503045      512 Aug 11  1994 doc

      lrwxrwxrwx  1 b1503045       11 Sep  5 20:36 docs -> /remote/doc

      drwxr-xr-x  2 b1503045      512 Feb  7 00:43 pub

     ↓══┬══↓ ══┬═   ═┬═ ══┬═══ ══┬══

                                                       □

        檔案形式︰

         -  一般檔案。

         d  目錄。

         l  符號鍊結檔,(symbolic link file)用 ln -s 命令造成的,上例中

            ,cd docs 和 cd /remote/doc 的效果是一樣的。

         c  字元式周邊設備,以一個字元一個字元方式傳輸,如終端機。

         b  區塊式周邊設備,能一次大量傳輸,如磁盤機。

         s  socket 檔。

        檔案存取權限︰共九個字元,每三個分為一組,共三組 rwx 的組合。

        前三個 rwx 是檔案擁有人的權限,中間三個是所屬群體(group)的權限,

        最後三個是其他人的使用權限。rwx 代表的意義如下︰

            對檔案而言  對目錄而言

         r  可讀此檔    可得知目錄內有哪些檔案

         w  可修改此檔  可在此目錄內建檔及殺檔

         x  可執行此檔  可進入此目錄內

         -  無此使用權  無此使用權

        ☉ 所謂的所屬群體(group),在台大計中 ccsun 工作站,同系學生定為

           同一 group;在系計中 cctwin 工作站,同年級學生定為同一 group。

        ☉ 以上例而言,wwwfaq1 這個檔案自己可以讀寫,同一 group 的人只能讀

           ,其他人對此檔完全沒有存取權。

        ☉ 自己的檔案,可用 chmod 指令改變其存取權,有兩種使用方法,如下︰

              八進位法  -- chmod <八進位數> <檔案>

              此方法如同在畫體育選課志願卡,共三個八進位數字,r=4,w=2,

              x=1,-=0。例如 -rwxr-xr-x 為 755,rw-r----- 為 640。如上例,

              若下 chmod 644 dial-up 即可將 dial-up 這個檔的存取權從 600

              變成 644,亦即讓其他人均可讀此檔案。

              其實最前面還有一個八進位數,但很少用到,其意義如下︰

                4000  程式執行時,設定使用者識別碼(SUID)位元為 on

                2000  程式執行時,設定使用者所屬團體識別碼(SGID)位元為 on

                1000  sticky bit on,程式執行後會常駐記憶體。

              符號法  -- chmod <who op 存取權> [<who op 存取權> ...] <檔案>

              <who>   u (user)  檔案擁有者

                      g (group) 所屬 group

                      o (other) 其他使用者

                      a (all)   包括 u, g, o

              <op>    + 加上存取權

                      - 除去存取權

                      = 重新設定存取權

              <存取權> 有 r, w, x, s, t (常用前三者)

              例如,chmod u-w wwwfaq1 讓自己不能更改 wwwfaq1 這個檔案,

              chmod a+x a+r bin 允許所有人進入 bin 目錄並可查看有哪些檔案。

        檔案連結(link)次數。

        檔案擁有者。超級使用者(系統管理員)為 root。

        檔案大小,單位為 byte。

        檔案內容最近一次更新時間。

     □ 檔案名稱。

  □ 指令簡介

     ☉ ls      列出目錄內檔案名稱(如 DOS 的 dir/w)

        ls -l   除了列出檔名外,並列出檔案屬性及擁有者、檔案大小及建立時間

                等資訊

        ls -a   列出所有檔案,包括隱藏檔

        ls -R   遞回地列出所有檔案(子目錄內所有檔案亦列出)

        ls -F   依檔案格式分類

                可執行檔檔名後加'*',目錄名稱後加上'/',link檔檔名加上'@'

     ☉ pwd     查詢目前所在之目錄名稱

     ☉ cd      更換目前工作目錄位置

                若只打 cd 不加目錄名,則回到自己的 home directory

                回到上一層目錄,必須打 cd .. ,cd 和 .. 中間要有空白

     ☉ cat     查看文字檔內容

     ☉ more    以一頁一頁方式顯示一個文字檔

                當最後一行出現 --more(16%)-- ,表示你已看了 16% 的文章。此

                時可用 more 內的指令︰

                space   往下捲動一頁

                Enter   往下捲動一行,若先鍵入數字再按Enter可下卷指定的行數

                q 或 Q  停止輸出,回到系統提示符號

                h       顯示可用指令及其功能

     ☉ cp <原始檔> <複製檔>    就是 copy 啦!

     ☉ mv <原始檔> <目的檔>    若原始檔和目的檔在同一目錄下,可更改檔名,

                                若加上路徑名,可在目錄間搬移檔案

     ☉ rm      刪除檔案,若加上 -i 會徵求確認後刪除

        rm -r <目錄名>  刪除該目錄及該目錄之下的所有檔案

        rm -rf  同上,但不會先徵求確認

                注︰UNIX沒有undelete,殺檔前請確定你的大腦很清醒

     ☉ mkdir   建立子目錄

     ☉ rmdir   刪除子目錄,目錄內須無檔案

     ☉ chmod   設定檔案或目錄的存取權限

     ☉ lpr     將檔案放進 printer queue 中等候列表

     ☉ lpq     顯示 printer queue 的內容

     ☉ lp      列印資料

     ☉ lpstat  查詢列印狀態與印表機相關資訊

     ☉ pr      文字檔之格式化輸出

  □ 進階指令

     ☉ grep    於檔案中尋找特定字串

                例︰grep fopen *.c 可印出所有 *.c 檔案中,有 fopen 字串的

                    那一行。

     ☉ tail    印出檔案最後 10 行內容

        tail -200   印出檔案最後 200 行內容

     ☉ which   查詢某個執行檔是放在那個路徑之下

     ☉ od      以八進位察看檔案內容

     ☉ ln      連接(link)檔案

        ln -s   symbolic link

     ☉ wc      計算檔案的行數、字數及字元數

     ☉ touch   更改檔案修改或被存取時間

     ☉ diff    檔案比較

     ☉ find    檔案搜尋

     ☉ df      顯示可使用之檔案儲存空間及檔案數目

     ☉ du      計算磁盤機使用情形

     ☉ umask   建檔時,取消部份存取權

     ☉ tee     將 stdin 輸出到 stdout 並複製一份於檔案中
 ○ 第三節  通信指令 ○
  □ 指令簡介

     ☉ rusers  查看有哪些人上機

     ☉ ku      比 rusers 更好用,並提供 finger, talk, write, mail 等功能。

     ☉ mesg y  接受其他使用者訊息(系統預設值)

        mesg n  拒絕其他使用者訊息

     ☉ talk    線上一對一交談系統,對方必須在線上才能使用,可讓同一主機或

                使用相同網路協定的不同主機的使用者交談,若要使用中文請用

                ctalk。

                ○例如,若你使用台大計中工作站,發現你的朋友 b2503000 正在

                  使用 ccsun22 這台機器,可下 talk b2503000@ccsun22 這個指

                  令,接著等待回音,若對方願意和你聊天,則螢幕畫面將會分為

                  上下兩部份,上半部份為自己輸入的訊息,下半部份則是對方的

                  應答。

                ○按下 Ctrl-C 可結束對話

                ○若 b2503000 要和你聊天時,會出現如下畫面

                  Message from Talk_Daemon at 11:21

                  talk:  connection requested by b2503000@ccsun22

                  talk:  respond with talk b2503000@ccsun22

                  若想回答請輸入 talk b2503000@ccsun22 再按 Enter 即可

                ○此時若螢幕內容混亂,在某些軟體中可按 Ctrl-L 重繪螢幕文字

                  ,若你正在編輯文件,該文件也不會受影響,仍可繼續編輯。

                ○若你不想和他 talk ,可用 mesg n 命令拒絕。

                ○若遠方機器與本地機器相容,亦可使用此命令和遠方機器使用者

                  聊天,例如︰talk u8234567@ccsun19.cc.nctu.edu.tw

                  即可和交大 ccsun19 上的 u8234567 聊天

     ☉ finger  可查詢本地機器或遠方機器使用者簡要資料

                例︰finger b1503045@cc.ntu.edu.tw

     ☉ mail    讀取及傳送電子郵件

                以下指令可利用 mail 傳送文字檔

                mail user < filename

     ☉ write   送訊息給其他在系統中的使用者,也可視為功能較差的 talk 程式

                ,記得按 Ctrl-D 結束

     ☉ rlogin,rsh,telnet   遠端登錄(login)

  □ 進階指令

     ☉ vacation    自動回應來信
 ○ 第四節  系統資訊 ○
  □ 指令簡介

     ☉ quota -v    察看自己可用磁盤空間大小(單位︰KB)及檔案個數

     ☉ date    現在的日期、時間

     ☉ who     查詢目前和你使用同一機器的有哪些人及login時間地點

     ☉ w       查詢目前上機者詳細狀況

     ☉ whoami  察看自己帳號名稱

     ☉ groups [帳號名] 查看某人的 group

     ☉ yppasswd    更改密碼

     ☉ ypchsh  更改自己的 login shell

     ☉ ypchfn  更改自己的全名(full name,不是帳號名)

     ☉ cal     印出月曆或年歷

     ☉ tty     顯示目前所用終端機名稱

     ☉ history 查看自己下過的指令

  □ 進階指令

     ☉ nslookup    向 Name Server 查詢 hostname 及 IP
 ○ 第五節  處理程序(Process)的控制 ○
  □ 指令簡介

     ☉ ps      顯示 process 的狀態(process status)

                PID  欄︰即 ProcessID,一個正在執行的程式在系統中的唯一編號

                Owner欄︰該 process 的擁有者

     ☉ kill    停止處理程序,通常先用 ps 命令查得 Process ID,再殺之

        kill -9 立即停止一個 process

        kill -9 -1  殺掉系統內所有屬於自己的 process

        ○ 若在工作站上無法離線時,可先 login 另一台工作站,然後再 rsh

           到原來當掉的工作站,下 kill -9 -1 指令即可正常退出。

     ☉ jobs    列出現在正在執行的工作

     ☉ fg      將中止的 job 回到前景繼續執行

     ☉ bg      背景執行

  □ 進階指令

     ☉ at      在指定時間執行命令

     ☉ batch   依序執行多個命令

     ☉ crontab 要求系統定期執行特定命令

     ☉ nice    調整 process 的優先權

     ☉ nohup   使 process 在 logout 後繼續執行
 ○ 第六節  其他命令 ○
  □ 指令簡介

     ☉ cc      C Compiler

     ☉ compress    將檔案壓縮成 *.Z 格式

     ☉ uncompress  將 *.Z 格式的壓縮檔解壓

     ☉ alias   替命令取別名

                例︰alias  dir  'ls -al'

                以後打 dir 就等同於下 ls -al 命令

     ☉ set     查看或設定 shell 變數

        ○ 這裡介紹幾個重要的變數︰

              home︰你的 home directory.

              path︰和 DOS 的 path 變數功能一樣,系統會順著 path 中的目錄

                    去找可執行檔。

              term︰終端機形態,常用 vt100、vt102、ansi。

        ○ set <變數名>=<設定值> 就可以設定變數的值,$<變數名> 代表此變數

           的值。例如︰set term=vt100 ; set path=($home/bin $path)

           另外須注意 path 的第一個目錄最好不要設為 . ,這是系統安全的考量

     ☉ setenv  查看或設定環境變數

     ☉ echo    回應訊息到標準輸出

     ☉ sort    資料排序

     ☉ su      權限轉換為指定使用者

     ☉ banner  放大特定字串

     ☉ calendar    重要事項提醒

     ☉ spell   拼字檢查

     ☉ sleep   暫停一段時間不使用 CPU(通常用在 Shell Script)

     ☉ test    測試檔案型態或檢查字串、數值大小(通常用在 Shell Script)

     ☉ wait    等待 process 執行結束(通常用在 Shell Script)
 ○ 第七節  終端機常用控制鍵 ○
  □ Ctrl-C     中斷程式的執行。

     Ctrl-Z     暫停程式的執行,稍後可下 fg 或 bg 指令繼續,若未下 fg 或

                bg 指令繼續執行,該 process 仍會留在系統內。

     Ctrl-S 或 Pause 鍵    螢幕暫停輸出

     Ctrl-Q     螢幕恢復輸出

     Ctrl-D     EOT (End of Transmission)

  □ 有時候按了鍵盤,螢幕卻沒任何反應,看起來好像當機,可能就是不小心按了

     Ctrl-S 鍵,此時按 Ctrl-Q 就可恢復正常。

  □ 若你輸入中文時,螢幕卻出現亂碼,請先於 UNIX 提示符號下打 stty pass8,

     系統就不會過濾字元的 bit7(the most significant bit)。

  □ 若你進編輯器或者其他的全螢幕程式,出現螢幕文字上卷的問題時,請先於

     UNIX 提示符號下打 stty rows 24 或 resize 就可恢復正常。
 ○ 第八節  管道(pipe)及輸出入重導(redirection) ○
  □ UNIX 把輸出入設備亦視為檔案,這些設備可能是鍵盤,螢幕,印表機,也可以

     是磁盤檔,以下是 UNIX 的標準輸出入設備︰

     ☉ 標準輸入(stdin)

        平時為鍵盤,可用 < 轉向。

        例︰mail b82000 < myfile 可將 myfile 檔案寄給 b82000

     ☉ 標準輸出(stdout)

        平時為螢幕,可用 > 轉向,用 >> 可將結果附加(append)在檔案尾端。

        例︰finger b81045 > myfile 可將查詢結果寫在 myfile 檔案上。

     ☉ 標準錯誤輸出(stderr)

        平時為螢幕,如 stdout 被轉向,仍可在螢幕看到錯誤訊息。 stderr 可用

        >& 轉向,用 >>& 將錯誤訊息附加在檔案尾端。

  □ 管道︰管道的符號是 "|",用來連接兩個命令。"|" 左邊指令的輸出作為 "|"

     右邊指令的輸入。例︰ls -l .. | more 可將上一層目錄內容以一頁一頁方式

     輸出;who | grep b.503 | sort | more 可將目前上線的電機系學生名單經過

     排序後分頁輸出。
 ○ 第九節  Shell 與 Shell Script 簡介 ○
  □ DOS 的 COMMAND.COM 就是一種 shell,負責解譯你所下的指令並執行它。同樣

     的,UNIX 上也有這樣的東東,它是在你成功 login 以後由系統自動啟動的。

     UNIX 上有不少種 shell,sh, csh, ksh, tcsh, bash 等皆是,一般都是用csh

     ,login shell 可用 ypchsh 命令改變,但你必須先知道你要換的新殼子在那

     個目錄下。tcsh 有類似 DOSKEY 的功能,值得推  。

  □ DOS 中有所謂的批次檔,用以方便處理一些例行工作。UNIX 也有批次處理,它

     就叫做 Shell Script,而且比 DOS 的批次檔強很多,寫法幾乎是一個高階語

     言。Shell Script 是個文字檔,但其地位和其它的命令或可執行檔是完全相同

     的,只要用 chmod 指令將 Shell Script 存取權設為可執行即可。欲知 Shell

     Script 寫法及其相關細節,請參閱 manual page 或 UNIX 相關書籍。

  □ $home 目錄下的 .login 檔就是一個典型的 Shell Script,類似 DOS 的

     autoexec.bat。
 ○ 第十節  X Window 視窗系統簡介 ○
  □ 若你在工作站主機 login,可打 startx 或 openwin 指令進入 X Window 系統

     ,進入 XWindow 後按滑鼠左鍵或右鍵不放,可看到系統選單,選擇你要執行的

     程式,選 Exit 就可離開 XWindow 系統。進入 X Window 後可啟動 cxterm 就

     有中文視窗。

  □ X Window 系統大而繁雜,但操作上不難,欲深入  解其功能可參閱 X Window

     的標準本 <The X Window System, Volume 3: X Window System User's Guide

     for X11R5> 。網路上也有免費的 X Window 入門指南中文本,可進各大gopher

     站查閱或抓取。