Download presentation
Presentation is loading. Please wait.
Published by渭禧 管 Modified 7年之前
1
Unix 系統設計 教學目標: This course will introduce the Unix operation system’s architectures and concurrent programming on Linux system. 教學大綱:教學內容大綱可分為以下5個部分 Unix的基本概念 Shell Programming Process Inter Process Communication Linux GUI
2
主要教材:Richard Stones、Neil Matthew, Beginning Linux Programming 3rd Edition. ISBN: 0-7645-4497-7
3
大綱 Unix 系統背景 開始使用Unix Unix 基本指令 Unix 檔案系統 Shell 命令 nano .bashrc
export TERM=vt100 LANG=zh_TW.Big5 (zh_TW.UTF-8)
4
1969 年 Ken Thompson 在AT&T的 Bell Lab,利用一部閒置的 PDP-7 研究新的作業系統 .
Dennis Ritchie 加入 Ken Thompson 一同開發這個新作業系統 . 4.x BSD (Berkeley Software Distribution) System IV 八十年代末有一些整合的動作,如 Sun Solaris Os 及 POSIX
5
Unix 的哲學是作業系統核心只提供少數不可或缺的功能,其它的功能則以使用者程式的型式加上去 .
1991 年,Linus Torvalds (波蘭)開始使用 MINIX,他對 MINIX 提供的功能不滿意,自行發展 Linux .
6
Slackware (4.0) 元老 RedHat (6.1) 安裝容易 .Debian 結構最嚴謹 SuSE (歐洲) Turbolinux (日本,大陸) OpenLinux(?) Caldera公司商用軟體 PowerLinux 網虎based on RH--?Xlinux 1.0萬國語言版 Mandrake Linux based on RH Corel Linux BluePoint Linux (大陸華南) CLE :中文延伸套件 0.9
7
Unix 作業系統的特點 多使用者/多工能力(Multi-user/Multi-tasking) 開放性系統(Open system)
網路環境(Network Environment)優良 公用程式(Utility)/外殼(Shell)功能強 可攜性(Portability)高
8
Unix 系統架構 整個 Unix 系統架構可區分為四個層次: 硬體(Hardware):包含各種週邊設備的驅動程式。
系統核心(Kernel):CPU 排序、記憶體管理、行程管理。 外殼(Shell):人機介面程式、各種系統操作命令。 使用者(User)/應用程式(Application Program)/ 檔案系統(File system)
9
開始使用 Unix 系統 使用 Unix 系統有兩種主要方法: X-windows:CDE 視窗介面操作,類似 Windows 操作方法。
The Common Desktop Environment (CDE) is an X Window environment that provides a consistent look and feel across multiple Unix platforms. Command-Line:控制命令行的輸入。 the shell interface
10
登入主機 login 使用者登入 password 使用者密碼輸入 Red Hat Linux release 9 (Shrike)
Kernel on an i686 login: cwang Password: Last login: Wed Sep 8 08:58:02 from tsnien]$
11
簡單操作系統 pwd 顯示目前工作位置 Every account has a home directory. man: 查詢指令用法
/home/tsnien $
13
認識系統的目錄 在安裝 Linux 的磁碟中會有許多系統預設的目錄, 這些目錄依照不同的用途而放置特定的檔案。以下將詳細說明各預設目錄的功用: /:根目錄, 包含整個 Linux 系統的所有目錄和檔案。 /bin:此目錄放置操作系統時, 所需使用的各種指令程式。例如 cp、rpm、kill、tar、mv、rm 與 ping 等等常用指令, 還有各種不同的 shell, 如 bash、bash2、tcsh 等等。
14
認識系統的目錄 /boot:系統啟動時必須讀取的檔案, 包括系統核心在內。
/dev:存放周邊設備代號的檔案。例如硬碟的 /dev/hda、終端機的 /dev/tty0 等等。這些檔案比較特殊, 它們實際上都指向所代表的周邊設備。 /etc:放置與系統設定、管理相關的檔案。例如記錄帳號名稱的 passwd 檔、投影密碼檔 shadow 都放在這裡。
15
認識系統的目錄 /etc/rc.d:這個目錄包含了開機或關機時所執行的 script 檔案。
/etc/X11:放置 X Window System各設定檔的目錄。 /home:此目錄預設用來放置使用者帳號的家目錄。 /lib:放置一些共用的函式庫。
16
認識系統的目錄 /lib/modules:存放系統核心的模組。某些可被模組化的部份, 並不需要在編譯系統核心時放入核心本體, 避免核心過大導致效率低落。 /lost+found:檔案系統發生問題時, Linux 會自動掃描磁碟試圖修正錯誤, 倘若找到遺失或錯誤的區段, 就會將這些區段轉成檔案存放於此目錄, 等候管理人員進一步處理。
17
認識系統的目錄 /misc:預設空無一物, 供管理者堆放公共雜物。預設權限是全部使用者都可以讀取和執行檔案, 但是只有管理者能夠寫入檔案。
/mnt:此目錄下預設有 /mnt/cdrom 和 /mnt/floppy 兩個目錄, 用來做為光碟與軟碟片的掛載點。 有些發行版 (如 SUSE Linux 、Fedora Core 3 ) 會另有 /media 目錄, 其預設的光碟及軟碟掛載目錄位於該目錄下。
18
認識系統的目錄 /proc:系統核心和執行程序之間的資訊, 比如說執行 ps、free 等指令時所看到的訊息, 就是從這裡讀取。這目錄內的檔案並非真的存在, 使用者看到的是如同幻影般的虛擬檔案。 /root:系統管理者專用的目錄, 亦即 root 帳號的家目錄。 /sbin:此目錄存放啟動系統需執行的程式, 例如 fsck、init、grub、lilo 與 swapon 等。
19
認識系統的目錄 /tmp:供全部使用者暫時放置檔案的目錄。系統預設可讓所有使用者讀取、寫入和執行檔案, 因此對於一般使用者來說, 若臨時覺得自己的磁碟空間不敷使用, 便能暫時利用此目錄存放檔案。這裡也是暫存檔的目錄, 某些程式在執行中所產生的臨時檔案, 會存放在這個目錄內。 /usr:此目錄包括許多子目錄, 用來存放系統指令、程式等資訊。
20
認識系統的目錄 /usr/bin:放置使用者可以執行的指令程式, 如 find、free、gcc 等等。
/usr/local:此目錄用來存放自行編譯的軟體, 以便與使用 RPM 安裝的軟體互相區隔, 避免兩個套件系統發生衝突的情況。 /usr/share/doc:存放各種文件的目錄。 /usr/share/man:放置多種線上說明文件。
21
認識系統的目錄 /usr/src:存放原始碼的地方, Linux 系統核心的原始碼就放在這裡。
/usr/X11R6: X Window System除了放在 /etc/X11 目錄中的設定檔外, 其他所有檔案都放在這個目錄下。
22
認識系統的目錄 /var:系統執行時, 內容經常變動的資料或暫存檔, 都會放置在這個目錄裡。包括使用者的郵件檔案、記載系統活動過程的記錄 (log) 檔、列印工作的佇列檔、暫存檔及系統執行程式的 PID (Process ID, 程序識別碼) 記錄等等。Apache 網頁目錄與 FTP 目錄等伺服器的專用目錄也位於此處。
23
認識系統的目錄 /var/tmp:前面介紹的 /tmp 目錄除了放置所有使用者暫時存放的檔案之外, 還提供程式存放其產生的暫存檔, 因此經常會因堆放許多檔案, 而顯得非常雜亂。管理者通常會定時清理 /tmp 目錄, 維護磁碟空間的整潔。假如不想將某些檔案淌入 /tmp 目錄的混水之中, 避免殃及池魚而遭管理者刪除, 可以選擇存放在這裡, 雖然還是一個暫存目錄, 至少環境清幽, 檔案比較不會被無辜砍殺。
24
13-2 Linux 下的路徑表示法 Linux 的目錄是一個樹狀結構, 所有的目錄都在根目錄下。在切換目錄, 或是儲存、複製、搬移檔案時都需要指定路徑, 讓系統知道您的目的地為何。在指定路徑的時候, 我們可以採用 "絕對路徑" 或 "相對路徑", 此兩者的區別如下:
25
Linux 下的路徑表示法 絕對路徑:所謂絕對路徑就是由根目錄開始, 逐一列出檔案或目錄的所在位置。例如使用者 tony 家目錄下, tmp 子目錄中 test.txt 檔的絕對路徑即為/home/tony/tmp/test.txt。 絕對路徑的好處在於清楚:使用者可以由路徑中清楚的看到目錄或檔案在目錄樹中的位置。缺點則在於麻煩:當檔案位於多層子目錄下時, 即使有指令補全功能的 鍵幫忙, 要列出詳細的路徑還是一件很累人的事。
26
Linux 下的路徑表示法 相對路徑:相對路徑是相對於某一個特定目錄的路徑表示法。例如: "." 代表現行目錄, "./tmp/test.txt" 即表示在現行目錄下 tmp 子目錄中的 test.txt 檔。 相對路徑的好處在於簡單且較具彈性:不需要長篇大論的由根目錄開始列出檔案或目錄的位置, 並且在某些不需要強制要求絕對位置的狀況下, 可以讓使用者彈性的決定要從哪個目錄開始放置相對路徑所描述的檔案或目錄。
27
Linux 下的路徑表示法 使用相對路徑之前, 必須要先知道常用的目錄符號及其代表的意義, 筆者表列如下:
28
Linux 下的路徑表示法 例如以 root 帳號登入, 目前位於 /etc/httpd 目錄下, 則可以如下使用上述目錄符號切換目錄:
29
檔案與目錄管理 ls [-ailS] 參數說明: -a :全部的檔案都列出(連同隱藏檔) -i :印出 inode 的值 -l :長的列出,連同檔案大小的資料等等 -S :以檔案大小排序
30
Linux 檔案 # ls –al
31
Linux 檔案種類 正規檔案( regular file ) 目錄 (directory): 連結檔 (link):
第一個屬性為 [ - ] 純文字檔(ascii) 二進位檔(binary) 目錄 (directory): 第一個屬性為 [ d ] 連結檔 (link): 第一個屬性為 [ l ] 設備檔 (device): 區塊 (block) 設備檔,第一個屬性為 [ b ]; 字元 (character) 設備檔,第一個屬性為 [ c ]。 p 表示有名稱的通道(Pipe)檔案
32
檔案存取特權 任何檔案可針對下列三種類別使用者規劃權限:
擁有者(Owner):第一個 rwx(rwx )。檔案擁有者存取此檔案的權利如何。 群組(Group):第二個 rwx(--- rwx ---)。檔案擁有者所屬群組的其他組員,存取該檔案的權限如何。 其他(Other):第三個 rwx( rwx)。任何人存取該檔案的權限如何。
33
更改檔案權限 修改檔案的模式(chmod):僅檔案擁有者才可以針對該檔案變更存取模式。
u 檔案的使用者(擁有者) g 群組(group) o 其他人(other) a 所有人(包含 u, g, o) = 指定權限 + 增加權限 - 移除權限
34
範例 範例一:增加擁有者執行(x)的權利 範例二:移除群組的讀與寫的權利 $ chmod u+x filename
$ chmod g-rw filename 另外,chmod 也可以直接設定被執行的權利。設定方式如下: rwx rwx rwx (0~7 0~7 0~7) r =0/1,0 則表示沒有該權限,1 表示有該權限;譬如擁有者有讀取與寫入的權限,則表示為:110,以 8 進位表示則為 6。因此,每一群組的權限為 0 ~7。
35
檔案與目錄管理 cd pwd mkdir 變換目錄 cd /root 顯示目前的目錄 建立一個新目錄
mkdir –p /root/abc/123 rmdir 刪除一個裡面是空的空目錄 rmdir –p abc/123 環境變數PATH echo $PATH PATH=”$PATH”:/root
36
檔案與目錄管理 cp [-drsu] [來源檔] [目的檔] 參數說明: -d:在進行 copy 的時候,如果是 copy 到 link 檔案,若不加任何參數,則預設情況中會將 link 到的原始檔案copy 到目的地,若加 -d 時,則 link 檔案可原封不動的將 link 這個捷徑其拷貝到目的地 -r:可以進行目錄的 copy -s:做成連結檔,而不 copy 之意!與 ln 指令相同功能! -u, --update:如果來源檔比較新,或者是沒有目的檔,那麼才會進行 copy 的動作
37
檔案與目錄管理 rm [-fir] [檔名] 參數說明: -i :提供使用者確認(這是預設值) -r :遞迴刪除 -f :強力刪除
38
檔案與目錄管理 mv [-u] [來源檔] [目的檔] 參數說明: -u :同樣的,為 update 的簡寫,當來源檔比目的檔還新的時後才會動作
39
觀看檔案內容 cat 由第一行開始顯示檔案內容 tac 從最後一行開始顯示,可以看出 tac 是 cat 的倒著寫
more 一頁一頁的顯示檔案內容 less 與 more 類似,可以往前翻頁 head 只看頭幾行 tail 只看尾巴幾行 nl 顯示的時候,順道輸出 行號 od 以二進位的方式讀取檔案內容
40
檔案與目錄操作命令 cat 顯示檔案內容 $ cat file_1
$cat >file_2 將螢幕上所輸入的字元,複製到 file_2 檔案內。Ctrl+Z 結束輸入。 $ cat file_2 >file_3 將所顯示的 file_2,轉向複製到 file_3。 $ cat file_2 >>file_3將所顯示的 file_2,Append 到 file_3 上。 『<』轉向輸入。 『>』轉向輸出。 『>>』轉向 Append。 $ cal >oct.2004 $ cal >nov.2004
41
程序控制 ps顯示目前系統process狀況。 格式:ps [options] Option: -a 顯示全部的process。
-u 顯示process的使用者。 -l 顯示process更多的訊息。
42
程序控制 指令 & 將欲執行的命令(或程式),放到背景作業執行。 Example: %cc myprog.c &
%who | sort > list & *如果在.chrc檔內有set notify的命令,則系統會以[Done]來顯示背景作業己執行完畢。
43
程序控制 jobs列出在此系統上所有的Background job。 [1] Stopped mail huang
[2] Running cat > file1 [3] Stopped vi (1) (2) (3) (4) (1) job number 工作代號。 (2) + 表示current job。 - 表示next current。 (3)每個job目前執行的狀況。 (4) job的作業內容。
44
程序控制 kill刪除一個job。 格式:kill %job-number或kill pid Example: %kill %3
*如果尚無法清除此job,則可則改用以 %kill -9取代kill指令。 %kill
45
FTP ftp hostname ? ls, dir get, put mget, mput lcd
46
grep grep : very useful command which looks for a particular string in all the files in the directory and tell you were it has found it grep –n : also returns the line number. For instance, grep –n string *.F searches for string in the files with an F extension and returns the line number
47
Other who/w查詢目前進入系統的使用者。 %who %whoami %who am i %w
talk user talk to another user
48
Other fnger查詢目前進入系統的使用者。 %finger u
49
Other nslookup 格式:nslookup 網站 examples: %nslookup
50
Other ping 格式:ping 網站 examples: %ping bbs.ccu.edu.tw
51
Other traceroute 網站 格式:traceroute 網站 examples:
%traceroute
52
Other passwd change password
53
六、vi 編輯 Unix/Linux 文字編輯工具,常見的有: 使用任何編輯工具都必須考慮到終端機型態的問題,設定方式如下:
emacs:功能較 vi 強。 pico:郵件編輯工具。 xedit:X-Windows 編輯工具。 CDE 編輯工具:類似 Word 的操作方式。 使用任何編輯工具都必須考慮到終端機型態的問題,設定方式如下: $ TERM=vt100 $ export TERM
54
6-1 vi 模式 命令模式:『:』記號底下,允許輸入編輯 命令。 輸入模式:允許輸入文字。 模式切換:
命令模式 => 輸入模式:i, I, a, A, R, o, O。 輸入模式 => 命令模式:按『ESC』鍵。
55
6-1 vi 模式 單鍵命令功能: i:插入文字到游標右邊。 I:同上,但左邊。 a:附加文字到游標右邊。 A:附加文字到該行尾端。
o:目前行的下方開一行。 O:目前行的上方開一行。 x:刪除游標上文字。 dd:刪除游標上該行。 yy:將游標所在整行複製到緩衝區內。 p:將緩衝區內資料複製到游標所在位置。
56
6-1 vi 模式 游標移動: 上、下、左、右鍵。 Ctrl + h, j, k, l。
57
6-2 vi 文字命令 記號『:』:在命令模式下,由鍵盤輸入冒號。 : e file_1:編輯 file_1 檔案。
: w file_2:存檔寫入 file_2 檔案。 : q:離開。 : wq:寫入並離開。 : q!:強迫離開。 : ! ls -l:執行 Shell 命令。 : e:回到全螢幕編輯。 : /text:由游標位置開始,尋找 text 文字的所在位置。 : /:重複上一個尋找。
58
6-3 vi 範例練習 (1) 編寫一個 hello.c 程式 # include <stdio.h> int main() {
printf("Good Lucky to you\n"); return 0; } C file 副檔名必須 *.c
59
# include <stdio.h>
int main() { printf("Good Lucky to you\n"); return 0; }
60
6-3 vi 範例練習 編譯程式 執行程式 $ cc –o hello hello.c $ gcc –o hello hello.c
$ g++ -o hello hello.c 執行程式 $ ./hello
61
% cc foobar.c 執行檔就是 a.out % cc -o foobar foobar.c 執行檔就是 foobar
62
int foo (int *p); int main (void) { int *p = 0; /* null pointer */ return foo (p); } foo (int *p) int y = *p; return y;
63
% cc -g foobar.c g 將會把一些給 gdb 用的除錯訊息包進去執行檔裡面
64
Segmentation fault (core dumped)
這個錯誤表示你的程式在記憶體中試著做一個嚴重的非法運作(illegal operation), UNIX 就是被設計來保護整個作業系統免於被惡質的程式破壞,所以才會告訴你這個訊息。 基本上當程式在很多情況下發生錯誤後, 作業系統會把 core memory 中的資訊寫入 core 這檔案中, 以便讓 programmer 知道程式到底是為何出錯。
65
ulimit -c 0 代表 core dump 被關掉 ulimit -c unlimited gdb a.out core
Type where in gdb
66
# include <stdio.h>
int main() { int i, j ; for(i=0; i < ; i++) for(j=0; j < ; j++) ; printf("Good Lucky to you\n"); return 0; }
Similar presentations