在 Unix 系統裡面,最重要的兩個要素就是檔案 (file) 以及程序 (process) 了。 在這份文件裡面,我們要談的是關於檔案的部分。在 Unix 系統裡的檔案可以分為四種, 分別是:
其中「一般檔案」和「目錄檔案」就如同大家已往接觸 DOS、Win95/NT 所擁有的觀念。 可以將其比喻為一棵樹,一般檔案就好比是樹葉,而目錄檔案則好比是樹枝。這就是檔案 系統的樹狀結構。
裝置檔案則是與已往對檔案的觀念稍有不同。在 UNIX 作業系統裡,每個周邊 設備都用 /dev 目錄下面的一個檔案來代表。不管是滑鼠、硬碟、音效卡以及虛擬終端機 等等都有相對應的裝置檔案。所以裝置檔案只會出現在 /dev 目錄下。
符號連結檔就像是一個一般檔案的「分身」,一個檔案和他的符號連結檔是具有相同 內容,但是會在不同目錄或是具有不同的名稱。前述的三種檔案形式都可以有符號連結 檔。
其他資料請參考書中第七章或其他 Unix 相關書籍裡與檔案系統相關的資料。
這個檔案的內容是描述本機器所掛上的每個檔案系統的資料。例如:
# Device Mountpoint FStype Options Dump Pass# # 裝置名稱 使用目錄 形態 選項 /dev/sd0s1b none swap sw 0 0 /dev/sd0a / ufs rw 1 1 /dev/sd0s1e /var ufs rw 1 1 /dev/sd0s1f /usr ufs rw 1 1 /dev/sd0s1g /mnt ufs rw 1 1 #/dev/sd1s1e /opt ufs rw 1 1 /dev/sd1s1f /opt ufs rw 1 1 /dev/ccd0c /common ufs rw 1 1 /dev/cd0a /cdrom cd9660 ro,auto 0 0 proc /proc procfs rw 0 0
每一行開始若為 "#" ,則表示此行為注解。每一行描述一個檔案系統。分別是 裝置名稱、使用的目錄、檔案系統形態,以及一些特別的選項。
此指令用來將檔案系統掛到一個目錄上。如果你已在/etc/fstab
檔案裡定義過了,那就只要以目錄名稱做參數即可。例如 mount /mnt。
此指令將卸下掛在某個目錄的檔案系統。用法是umount /mnt。後述
的一些指令都要先把使用中的檔案系統卸下來才能繼續進行。
這個指令的目地在於查看整台機器目前所掛上的檔案系統與其狀態。直接使用
df 就會產生如下結果:
Filesystem 1K-blocks Used Avail Capacity Mounted on ^^^^^^^^^^ ^^^^^^^^^ ^^^^ ^^^^^ ^^^^^^^^ ^^^^^^^^^^ 檔案系統 總容量 使用 剩餘 使用率 所用目錄 /dev/sd0a 49231 18991 26302 42% / /dev/sd0s1e 49231 1710 43583 4% /var /dev/sd0s1f 847103 499486 279849 64% /usr /dev/sd0s1g 992755 54058 859277 6% /mnt /dev/ccd0c 2017711 821718 1135462 42% /common procfs 4 4 0 100% /proc /dev/cd0a 664134 664134 0 100% /cdrom /dev/sd1s1f 996943 135937 781251 15% /opt
其中容量所用的單位是 1KB。如果你的系統是以 512 Bytes 為一個最小單位的話,可以
加上 -k 參數。
在 Unix 中,每一個檔案都會佔用一個 inode。所以每個檔案系統都有一個 inode 列表
,以構成 Unix 系統的樹狀檔案結構。df -i可以查詢每個檔案系統的 inode
使用量。例如:
Filesystem 1K-blocks Used Avail Capacity iused ifree %iused Mounted on /dev/sd0a 49231 18991 26302 42% 1157 14201 8% / /dev/sd0s1e 49231 1722 43571 4% 215 15143 1% /var /dev/sd0s1f 847103 499487 279848 64% 32102 175256 15% /usr /dev/sd0s1g 992755 54058 859277 6% 11 245747 0% /mnt /dev/ccd0c 2017711 821718 1135462 42% 8118 483400 2% /common procfs 4 4 0 100% 58 4058 1% /proc /dev/cd0a 664134 664134 0 100% 0 0 100% /cdrom /dev/sd1s1f 996943 135937 781251 15% 3 245755 0% /opt
其中iused、ifree、%iused就是與 inode 相關的資料。
這個指令是把一個檔案系統的詳細資料列印出來,須注意的是目標檔案系統必須是 目前沒有被掛在任何目錄下使用的才行。
這個指令的用途在於檢查你的檔案系統。通常是在你的檔案系統有問題時才會用到
。與上一個指令相同處在於,它只能檢查未掛上的檔案系統。fsck -y會對
fsck 所問的每個問題都回答 "Yes",才不會因為等待使用者輸入答案而浪費時間。
此指令的意思即為更改目前路徑(change directory)。與 dos 下的用法一樣,只是
路徑是以 "/" 分隔。例如: cd /usr/local/bin。
列出某目錄下的所有檔案(內定是目前所在的目錄)。
ls -l 會列出檔案的詳細狀態(相當於 dos 下的 dir 指令)
。ls -a 則會連隱藏檔 (檔名為 "." 開頭的檔案) 也列出來。
把檔案的內容顯示出來。more會在每顯示一頁時就暫停等候使用者的
命令 (例如:空白鍵就繼續顯示下一頁。),而cat則不會停下來。
創造目錄。例如:mkdir /foo/bar。
刪除目錄,必須為空目錄才可用此指令,例如:rmdir /foobar。
搬移檔案或目錄,例如:mv foo bar。
複製檔案或目錄。例如:
cp foo bar (複製檔案)
cp -RL /foo /bar (複製整個目錄)
刪除檔案或目錄。例如:
rm foobar (刪除檔案)
rm -fr /foo/bar (刪除整個目錄)
此指令可以判斷檔案的格式為何。例如:
file foobar.gif foobar.gif: GIF image data, version 89a, 800 x 600, 256 colors
他所依賴的資料為 /etc/magic ,詳情請參看 magic(5) 的說明文件。
此指令為製作符號連結用的,例如:ln -s foo bar
此指令用來更改檔案的擁有者。例如:chown root.wheel foobar
可以把檔案的擁有者更改成 root (同時是 wheel 群組)。
每一個檔案都可以設定權限,chmod 即為此用途的指令。首先看看什麼是檔案權限:
ls -l
drwxr-xr-x 95 root wheel 1536 Nov 17 16:05 home/ -r-xr-xr-x 1 root wheel 1203402 Aug 14 14:11 kernel* -rw------- 1 root wheel 14912 Aug 8 08:30 ktrace.out lrwxrwxrwx 1 root wheel 11 Jul 30 22:57 sys@ -> usr/src/sys drwxrwxrwt 2 root wheel 1024 Aug 14 21:41 lost+found/ ^^^^^^^^^^ ^^^^ ^^^^^^^^ ^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ 檔案權限 擁有者 (群組) 大小 時 間 檔案名稱 brw-r----- 1 root operator 6, 2 Jul 30 23:14 cd0c crw-rw-rw- 1 root wheel 6, 0 Nov 19 08:11 ptyp0
所以一開頭的十個英文字母就分別代表檔案形態以及權限。第一個英文字母為檔案 形態,後面九個為檔案權限。例如:
-rwxr-xr-x ^^^^^^^^^^ | | | | | | | ---> Others , 除擁有者及其群組外的其他使用者。 | | ------> Group , 與擁有者同群組的使用者。 | ---------> User , 檔案擁有者。 -----------> 檔案形態。
首先說明檔案形態:
對於每個檔案,不論其形態為何,都要針對不同對象設定其檔案權限。
再來說明檔案權限種類:
檔案權限的對象分別為:
設定的範例:
chmod go-w foobar : 取消擁有者之外其他人對 foobar 檔案寫入的權限。
chmod 644 foobar : 讓 foobar 檔案成為擁有者可讀寫,其他人只能
讀的狀態。
chmod 755 foobar : 讓 foobar 檔案成為擁有者可讀寫及執行,其他
人只能讀與執行。
根據使用者的需求列出符合條件的檔案。舉例如下:
find / -name "*foo*" -lsfind / -mtime +7 -deletefind / -user foo -group bar -lsfind / -size +2048 -ls