250 likes | 371 Views
UNIX 簡介. 國立暨南國際大學 計算機與網路中心 研究助理 張克寧 klim@ncnu.edu.tw. Operating System. Shell. disk network cpu printer. O S. smtp. init. inetd. process. system resources. system call. encoded. /etc/passwd user:passwd: uid : gid :gcos:home:shell. telnet or login. login. username
E N D
UNIX 簡介 國立暨南國際大學 計算機與網路中心 研究助理 張克寧 klim@ncnu.edu.tw
Operating System Shell disk network cpu printer . . O S smtp init inetd . . process system resources system call
encoded /etc/passwd user:passwd:uid:gid:gcos:home:shell telnet or login login username password 檢查passowrd 執行 shell 更換工作目錄
shell • 命令編譯器 • 內部命令: cd, set, unset.....(與shell種類相關) • 外部命令: 外部程式 • 環境變數 (可用 env 顯示) • PATH: 外部執行程式搜尋順序 /usr/bin:/usr/sbin:/usr/ucb:/usr/ccs/bin:. .表現在目錄, 不建議使用或放在最後 xyz -> /usr/bin/xyz-> /usr/sbin/xyz -> ....-> ./xyz
線上求助 • man: 手冊 (manual) ,ex: man wc • man -k keyword, 尋找與keyword相關的指令 (系統需建索引檔:windex or whatis, 以catman 建立) • 分冊: Vol 1:command, Vol2: system call... cat(1): 表示 cat 在手冊的第一冊 • 新手可試 man man • 環境變數: MANPATH, 內定 /usr/man
file system • 階層式的檔案架構, 樹狀結構 • 所有device 都是一個file (special file) / pathname: /etc/password root usr var home etc mount point ..... bin mail passwd ..... ..... ncnu ..... ..... ..... ..... ls
目錄相關指令 • ls: 查看目錄, ls [-al.....] [dir] • cd: 更換目錄, cd [dir] • pwd:顯示現在目錄 • mkdir: 新造目錄, mkdir dir • rmdir: 刪除目錄 rmdir dir (dir 需為空的)
/home/staff/cc/klim Mail News ....... ....... 目錄相關指令 $ ls Mail bin fonts image mail misc slides tmp News doc gwm kernel mbox nsmail src util $ pwd /home/staff/cc/klim $ cd News $ ls comp.lang.forth.001 comp.lang.forth.003 comp.lang.forth.005 comp.lang.forth.002 comp.lang.forth.004 comp.lang.forth.006 $ pwd /home/staff/cc/klim/News $ cd .. $ mkdir newdir $ ls newdir $ rmdir newdir $
檔案相關指令 • cat: 顯示檔案內容, cat [file1 file2..] • more: 一頁一頁顯示檔案內容, more file • 編輯器: ed, ex, vi, emacs, joe • cp: 複製, cp a b, cp a b c dir • rm:刪除, rm a b c ..... • mv: 更換檔名或移動檔案 mv a b, mv a b c dir • ln: 檔案鏈結, ln [-s] a b, a--> b
/home/staff/cc/klim ....... mbox tmp ....... sun 檔案相關指令 $ cat mbox From teresa@tcmds.com.tw Mon Mar 16 09:01 CST 1998 Received: from dns.tcmds.com.tw ([210.66.177.61]) by^C $ more mbox From teresa@tcmds.com.tw Mon Mar 16 09:01 CST 1998 . . --More--(15%) $ joe mbox $ cp mbox sun $ cp mbox sun tmp $ rm sun tmp/sun $ mv mbox sun $ mv sun tmp
檔案屬性 d rwx rwx rwx r: read w: write x: execute $ ls -al total 201 drwxr-xr-x 24 klim sys 1536 Mar 17 16:09 . drwxr-xr-x 12 root other 512 Mar 10 19:49 .. drwxr-xr-x 2 klim sys 512 Mar 6 08:49 Mail drwxr-xr-x 2 klim sys 512 Mar 5 09:14 News -rw-r--r-- 1 klim sys 49259 Mar 14 20:28 kernel -rw------- 1 klim sys 4820 Mar 16 17:35 mbox owner group other d: directory -: file type owner group size date
檔案屬性 • chmod:更改屬性, chmod mode file1 file2 .. chmod 444 mbox chmod a+r,u+wx,g+x,o-wx mbox • mode: octal number, augo[+-]rwx • chown: 更改owner, chown user file .... superuser 方能執行 • chgrp: 更改group, chgrp group file .... 421 421 421
檔案相關指令 • head: 列出檔案的前十行, head f1 f2 .... • tail: 列出檔案的後十行, tail f1 f2 ..... • grep pattern f1 f2...:列出檔案中包含pattern的那些行 • find: 在目錄中尋找符合條件的檔 • du: 統計目錄所用空間 • df: 列出磁碟機使用情形
檔案相關指令 $ head -3 posted From klim Fri Mar 6 08:59:26 1998 Subject: test , ignore it Newsgroups: tw.test $ tail -3 posted this is a test. just ignore it. $ grep From posted From klim Fri Mar 6 08:59:26 1998 $
檔案相關指令 從目前目錄開始尋找檔名為 duplex.ps , 並且列印出來 $ find . -name duplex.ps -print ./misc/duplex.ps $ du misc 6 misc $ df Filesystem 1024-blocks Used Available Capacity Mounted on /dev/dsk/c0t0d0s0 96031 16540 69891 19% / /dev/dsk/c0t0d0s6 674471 402207 204824 66% /usr /dev/dsk/c0t0d0s3 240055 160943 55112 74% /var /dev/dsk/c0t0d0s5 288855 145740 114235 56% /opt staff:/export/staff 2064704 810248 1244136 39% /home/staff $ NFS
$HOME a b c d f4 f1 f2 f3 練習 • 建立右邊的目錄結構, a b c d 為目錄, • f1 f2 f3 f4 為檔案. 參考mkdir, cd , touch • 由目錄 b 切換至目錄 d • 把 f2 移至目錄 b • 把目錄 d 移至 a • 刪除目錄 c • 參考ls, • 以時間先後列出檔案 • 以檔案大小列出檔案 • 列出目錄 a 及其下所有目錄及檔案
輸出入轉向與pipe • cat f1 f2 > f3 • mail user@address < letter • ls | wc -w • /bin/time ls > /dev/null • sh: /bin/time ls > /dev/null 2> time.out /bin/time ls > out 2>&1 • csh:/bin/time ls > ls.out /bin/time ls >& out stdout stdin pipe stderr
$ cat duplex.ps %%BeginFeature << /Duplex true >> setpagedevice << /Tumble false >> setpagedevice %%EndFeature $ wc duplex.ps 4 12 99 duplex.ps $ ls course duplex.ps refcard.format rivest warn $ ls | wc -w 5 $ $ /bin/time ls course duplex.ps refcard.format rivest warn real 0.0 user 0.0 sys 0.0 $ /bin/time ls > /dev/null 2> out $ /bin/time ls > out 2>&1 stdout stderr sh syntax
線上交談 • talk user, talk user@hostname • write user: 線上送訊 • mesg n: 切斷通訊, mesg y 打開通訊 • who: 查看線上使用者 • w: 查看線上使用情形
程序 (process) • ps: 印出程序相關資訊 • /bin/ps -ef, /usr/ucb/ps aux 列出所有程序 • kill: 送訊號給程序 • kill -HUP pid, kill -1 pid : 經常用來使某個程序重讀裝置檔(configutation file) • kill -TERM pid: 結束某個程序 • kill -9 pid: 強迫結束 • nice, renice: 設定程序的優先權
程序和子程序 fork Shell O S Shell execl (...program..) program system call
離線作業 • command &: 將command 置入背景執行 • 若程式需讀入stdin 或寫出 stdout stderr時, 需加以轉向, 否則會停住 • 有 job control的shell (csh, tcsh, bash): • 可用 ctrl-Z 停住正在跑的程式 • bg [%n] : 置入背景, fg [%n]: 移至前景 • jobs: 查看目前的程序 • nohup command args &: 置入背景且logout後不會因SIGHUP停住
離線作業 • at: 定某個時間執行程式 • atq, atrm: 查詢及移除排定時間的程式 • crontab: 定時執行, /usr/spool/cron/crontabs • crontab [filename], crontab [-elr] usrname 0,30 * * * * /usr/news/bin/nntpsend 分 時 日 月 星期 命令 $ at midnight at> mail klim@ncnu.edu.tw < announce at> <EOT> job 890236800.a at Thu Mar 19 00:00:00 1998 $ atq Rank Execution Date Owner Job Queue Job Name 1st Mar 19, 1998 00:00 klim 890236800.a a stdin $ atrm 890236800.a 890236800.a: removed $
其它 • date: 顯示日期 • cal: 月曆, cal [[month] year], ex: 1997 • 列印: • lpr [-Pprinter] f1 f2 ....., 列印檔案[至printer] • lpq [-Pprinter], 顯示[printer]的佇列 • lprm [-Pprinter] queue#, 刪除[printer]佇列中的 jobs • gcc, g++: C C++ compiler • telnet, finger.... • FAQ, 各大BBS中UNIX版的精華區
練習 • 找出自己 login process 的 pid • 執行 ps 的時間要多久 • 如何將時間資料導入一檔案中 • 如何將時間資料與 ps 的結果各導入不同檔案中 • 西元二千元二月廿九日是星期幾?