1.05k likes | 1.18k Views
第 13 章. 檔案系統與 權限設定. 本章提要. 13-1 認識系統的目錄 13-2 Linux 下的路徑表示法 13-3 檔案系統的結構 13-4 設定目錄與檔案使用權限 13-5 使用者與群組的權限關係 13-6 連結與符號連結. 前言. 當所有人都把目光投注在作業系統身上時 , 卻常常忘記了一個極為重要的配角 - 檔案系統。檔案系統的優劣與否 , 和作業系統的執行效率、穩定性以及可靠度息息相關。在本章裡我們會說明各個系統目錄的用途、檔案系統的架構、檔案與目錄的權限設定 , 以及檔案的連結與符號連結 , 讓您更了解 Linux 的檔案系統。.
E N D
第 13 章 檔案系統與 權限設定
本章提要 • 13-1 認識系統的目錄 • 13-2 Linux 下的路徑表示法 • 13-3 檔案系統的結構 • 13-4 設定目錄與檔案使用權限 • 13-5 使用者與群組的權限關係 • 13-6 連結與符號連結
前言 • 當所有人都把目光投注在作業系統身上時, 卻常常忘記了一個極為重要的配角 - 檔案系統。檔案系統的優劣與否, 和作業系統的執行效率、穩定性以及可靠度息息相關。在本章裡我們會說明各個系統目錄的用途、檔案系統的架構、檔案與目錄的權限設定, 以及檔案的連結與符號連結, 讓您更了解 Linux 的檔案系統。
13-1 認識系統的目錄 • 在安裝 Linux 的磁碟中會有許多系統預設的目錄, 這些目錄依照不同的用途而放置特定的檔案。以下將詳細說明各預設目錄的功用: • /:根目錄, 包含整個 Linux 系統的所有目錄和檔案。 • /bin:此目錄放置操作系統時, 所需使用的各種指令程式。例如 cp、rpm、kill、tar、mv、rm與 ping等等常用指令, 還有各種不同的 shell, 如 bash、bash2、tcsh 等等。
認識系統的目錄 • /boot:系統啟動時必須讀取的檔案, 包括系統核心在內。 • /dev:存放周邊設備代號的檔案。例如硬碟的 /dev/hda、終端機的 /dev/tty0 等等。這些檔案比較特殊, 它們實際上都指向所代表的周邊設備。 • /etc:放置與系統設定、管理相關的檔案。例如記錄帳號名稱的 passwd 檔、投影密碼檔 shadow 都放在這裡。
認識系統的目錄 • /etc/rc.d:這個目錄包含了開機或關機時所執行的 script 檔案。 • /etc/X11:放置 X Window System各設定檔的目錄。 • /home:此目錄預設用來放置使用者帳號的家目錄。 • /lib:放置一些共用的函式庫。
認識系統的目錄 • /lib/modules:存放系統核心的模組。某些可被模組化的部份, 並不需要在編譯系統核心時放入核心本體, 避免核心過大導致效率低落。 • /lost+found:檔案系統發生問題時, Linux 會自動掃描磁碟試圖修正錯誤, 倘若找到遺失或錯誤的區段, 就會將這些區段轉成檔案存放於此目錄, 等候管理人員進一步處理。
認識系統的目錄 • /misc:預設空無一物, 供管理者堆放公共雜物。預設權限是全部使用者都可以讀取和執行檔案, 但是只有管理者能夠寫入檔案。 • /mnt:此目錄下預設有 /mnt/cdrom 和 /mnt/floppy 兩個目錄, 用來做為光碟與軟碟片的掛載點。 • 有些發行版 (如 SUSE Linux 、Fedora Core 3 ) 會另有 /media 目錄, 其預設的光碟及軟碟掛載目錄位於該目錄下。
認識系統的目錄 • /proc:系統核心和執行程序之間的資訊, 比如說執行 ps、free等指令時所看到的訊息, 就是從這裡讀取。這目錄內的檔案並非真的存在, 使用者看到的是如同幻影般的虛擬檔案。 • /root:系統管理者專用的目錄, 亦即 root 帳號的家目錄。 • /sbin:此目錄存放啟動系統需執行的程式, 例如 fsck、init、grub、lilo與 swapon等。
認識系統的目錄 • /tmp:供全部使用者暫時放置檔案的目錄。系統預設可讓所有使用者讀取、寫入和執行檔案, 因此對於一般使用者來說, 若臨時覺得自己的磁碟空間不敷使用, 便能暫時利用此目錄存放檔案。這裡也是暫存檔的目錄, 某些程式在執行中所產生的臨時檔案, 會存放在這個目錄內。 • /usr:此目錄包括許多子目錄, 用來存放系統指令、程式等資訊。
認識系統的目錄 • /usr/bin:放置使用者可以執行的指令程式, 如 find、free、gcc等等。 • /usr/local:此目錄用來存放自行編譯的軟體, 以便與使用 RPM 安裝的軟體互相區隔, 避免兩個套件系統發生衝突的情況。 • /usr/share/doc:存放各種文件的目錄。 • /usr/share/man:放置多種線上說明文件。
認識系統的目錄 • /usr/src:存放原始碼的地方, Linux 系統核心的原始碼就放在這裡。 • /usr/X11R6: X Window System除了放在 /etc/X11 目錄中的設定檔外, 其他所有檔案都放在這個目錄下。
認識系統的目錄 • /var:系統執行時, 內容經常變動的資料或暫存檔, 都會放置在這個目錄裡。包括使用者的郵件檔案、記載系統活動過程的記錄 (log) 檔、列印工作的佇列檔、暫存檔及系統執行程式的 PID (Process ID, 程序識別碼) 記錄等等。Apache 網頁目錄與 FTP 目錄等伺服器的專用目錄也位於此處。
認識系統的目錄 • /var/tmp:前面介紹的 /tmp 目錄除了放置所有使用者暫時存放的檔案之外, 還提供程式存放其產生的暫存檔, 因此經常會因堆放許多檔案, 而顯得非常雜亂。管理者通常會定時清理 /tmp 目錄, 維護磁碟空間的整潔。假如不想將某些檔案淌入 /tmp 目錄的混水之中, 避免殃及池魚而遭管理者刪除, 可以選擇存放在這裡, 雖然還是一個暫存目錄, 至少環境清幽, 檔案比較不會被無辜砍殺。
13-2 Linux 下的路徑表示法 • Linux 的目錄是一個樹狀結構, 所有的目錄都在根目錄下。在切換目錄, 或是儲存、複製、搬移檔案時都需要指定路徑, 讓系統知道您的目的地為何。在指定路徑的時候, 我們可以採用 "絕對路徑" 或 "相對路徑", 此兩者的區別如下:
Linux 下的路徑表示法 • 絕對路徑:所謂絕對路徑就是由根目錄開始, 逐一列出檔案或目錄的所在位置。例如使用者 tony 家目錄下, tmp 子目錄中 test.txt 檔的絕對路徑即為/home/tony/tmp/test.txt。 • 絕對路徑的好處在於清楚:使用者可以由路徑中清楚的看到目錄或檔案在目錄樹中的位置。缺點則在於麻煩:當檔案位於多層子目錄下時, 即使有指令補全功能的 鍵幫忙, 要列出詳細的路徑還是一件很累人的事。
Linux 下的路徑表示法 • 相對路徑:相對路徑是相對於某一個特定目錄的路徑表示法。例如: "." 代表現行目錄, "./tmp/test.txt" 即表示在現行目錄下 tmp 子目錄中的 test.txt 檔。 • 相對路徑的好處在於簡單且較具彈性:不需要長篇大論的由根目錄開始列出檔案或目錄的位置, 並且在某些不需要強制要求絕對位置的狀況下, 可以讓使用者彈性的決定要從哪個目錄開始放置相對路徑所描述的檔案或目錄。
Linux 下的路徑表示法 • 使用相對路徑之前, 必須要先知道常用的目錄符號及其代表的意義, 筆者表列如下:
Linux 下的路徑表示法 • 例如以 root 帳號登入, 目前位於 /etc/httpd 目錄下, 則可以如下使用上述目錄符號切換目錄:
13-3 檔案系統的結構 • 大多數 Linux 發行版預設都是採用 ext3 檔案系統。 • ext3 是 ext2 的下一代,其與 ext2 的相異處在於 ext3 是一個日誌式檔案系統(Journal File System), 也就是在原來的 ext2 的格式下, 再加上日誌功能。
13-3 檔案系統的結構 • ext3 的優點 • 如何將 ext2 轉換為 ext3? • inode 檔案結構 • 實際儲存檔案的資料區塊 • inode 的數量 • inode 的內容 • 查詢硬碟使用狀況的相關指令
ext3 的優點 • 日誌式檔案系統最大的優點在於提供了更好的安全性。ext3 檔案系統會將整個磁碟所做過的更動, 像寫日記一樣完整的記錄下來。 • 一旦發生非預期的當機狀況, 會在下次啟動時, 自動檢查已記錄的日誌, 然後依照日誌記錄的動作再做一次, 將系統恢復到當機前的正常狀態。
ext3 的優點 • 而同樣的情況若發生在 ext2 檔案系統時, 便需要辛苦地執行 fsck指令檢查與修復整個檔案系統。 • 現在動輒數十 GB 的磁碟空間, 一旦不正常關機, 便要耗費相當多的時間來檢查及修復檔案系統, 且不能百分之百保證所有的資料都不會流失。
ext3 的優點 • 因此, 採用 ext3 可讓資料更具安全性, 且可大幅減少不正常關機後所花費的系統修復時間, 讓資料的使用更有效率。 • 再者, 由於其與 ext2 的架構完全相同,唯一的相異處僅在於多出一個日誌檔案來紀錄磁碟的狀態, 所以兩者間的轉換十分容易, 使用者不必經歷繁瑣的資料備份動作, 便可以將 ext2 更新為 ext3。
如何將 ext2 轉換為 ext3? • 在 ext3 檔案系統問世之前, 許多 Linux 發行版都採用 ext2 做為預設的檔案系統 (或者支援此檔案系統), 目前大多數發行版還是可以在安裝時選擇使用 ext2 檔案系統。 • 若您硬碟中的某個分割區原本是使用 ext2 檔案系統, 現在想將其改為 ext3, 該怎麼做呢?只要使用 tune2fs -j指令, 就可以為檔案系統是 ext2 的分割區建立日誌, 不需要重新格式化, 就能使用新的檔案系統。
如何將 ext2 轉換為 ext3? • 假設我們現在要將 /dev/hda3 的檔案系統由 ext2 轉換為 ext3, 可如下操作 :
如何將 ext2 轉換為 ext3? • 建立日誌之後, 請修改 /etc/fstab 檔: • 重新啟動後, 該分割區就開始使用 ext3檔案系統了!
inode 檔案結構 • ext3 與 ext2 檔案系統所使用的檔案結構相同, 稱為 inode (index node)。 • 它用來記錄檔案的類型、大小、權限、擁有者、檔案連結的數目等屬性, 以及指向資料區塊 (block) 的指標 (pointer):
inode 檔案結構 • inode 中存放的指標, 會指到磁碟中實際存放檔案資料的區塊。小的檔案僅需用到 direct blocks 的空間, 若再大則會用到 indirect blocks、double indirectblocks 或 triple indirect blocks。
實際儲存檔案的資料區塊 • 由之前的說明可知, ext3 檔案結構中的 inode 記錄檔案屬性, 並不實際儲存檔案資料。存放檔案資料的地方, 是資料區塊。而在儲存檔案資料時, 每個檔案都會佔用一個 inode, 而且大多數的檔案最少都會佔用一個資料區塊。因此,inode 所需數量的多寡, 實際上便與資料區塊的數量有關。也就是說, 在一般狀況下, inode 的數量不應該少於資料區塊的數量。
實際儲存檔案的資料區塊 • 接著我們先來看看資料區塊的數量如何決定。在建立 ext3 檔案系統時, 使用者可以自行決定每個資料區塊的大小是 1024、2048 或 4096 Bytes, 若沒有指定, 則系統預設值為 4096 Bytes。因此, 每個分割區中的資料區塊數量, 便可以藉由以下公式算出:
實際儲存檔案的資料區塊 • 同樣的, 只要將硬碟分割區中的資料區塊數量乘上大小, 也可以反推得知該分割區的容量。您可以使用 dumpe2fs指令來查看您的硬碟分割區中有多少資料區塊:
實際儲存檔案的資料區塊 • 接著檢視 dumpe2fs.txt 可以得知以下資訊:
實際儲存檔案的資料區塊 • 因此我們可以用以下算式算出該分割區的大小:
inode 的數量 • 了解資料區塊的大小及作用後, 接著來看看 inode 的數量。 • 剛剛我們說過, inode 的數量與資料區塊的數量相關, 不過兩者間的消長, 並沒有等比例的對應關係。比如有一個大小為 50 KB 的檔案, 儲存在資料區塊大小為 4 KB 的分割區內, 便會佔用 13 個資料區塊, 卻僅用掉 1 個 inode。
inode 的數量 • 此外,當然也有比較特殊的狀況, 像是在前面提到的 /proc 目錄, 因為該目錄下的檔案實際上都不存在, 所以並沒有消耗資料區塊, 但是卻佔用 inode。 • 假設某分割區的磁碟空間被 1000 個大型檔案塞滿, 全部的資料區塊都用完了。雖然這些檔案只佔用了 1000 個 inodes, 此時即使還有可以使用的 inode,也無法再儲存其他的檔案。
inode 的數量 • 同樣的, 若先把 inode 用完 (理論上可以, 實際上若正確規劃, 很難發生), 就算還有很多資料區塊尚未使用, 也會因為 inode 耗盡而無法再存放其他檔案。 • 因此在最初建立檔案系統時, 就應依據將來系統運作時, 檔案資料可能的儲存狀況, 來決定資料區塊的大小及 inode 的數量。
inode 的數量 • 以狀況比較特殊的 BBS 為例,由於 BBS 網站中的文章數量眾多, 但每篇文章所佔空間都不大。 • 所以如果您的系統要用來架設 BBS 網站, 則用以儲存資料的分割區, 便應採用較小的資料區塊, 以增加資料區塊的數量, 而 inode 的數量則可以設定成與資料區塊的數量相同。
inode 的數量 • 如果您不知道該如何指定 inode 的數量, 也沒關係, 只要您的系統並沒有特殊的用途, 在不指定的狀況下, 系統會自動根據您的資料區塊數量, 建立一般狀況下適用的 inode 數量。 • 了解 inode 的數量與資料區塊間的關係後, 是不是想看看您的分割區中,inode 的數量及使用狀況呀!請執行 df -i指令觀察。
inode 的數量 • 資料區塊大小及 inode 數量可以在執行 mke2fs指令, 建立檔案系統時指定。相關參數設定, 可執行 man mke2fs指令查詢。 • 執行 df指令可得知各個分割區的大小、使用率及剩餘空間等資訊, 若想得知每個目錄佔用磁碟空間的資訊, 則請執行 du指令。
inode 的內容 • 檔案模式(mode) :inode 會描述其所對應的資料類型, 這些資料可以是一個檔案、目錄、符號連結 (symbolic link) 或周邊設備代號 (包括儲存設備的分割區編號) 等。此外還有關於權限設定的資訊, 這在多人多工的作業系統中是極為重要的環節。
inode 的內容 • 擁有者資訊(owner information):檔案或目錄擁有者的 UID 與 GID, 這些資訊和權限設定息息相關。 • 檔案大小(size):單位以 byte 計算。 • 時間戳記(timestamp):inode 對應之資料的最初建立時間與最後修改時間。
inode 的內容 • 資料區塊位址(address of data block):存放檔案必定會佔用資料區塊, 且每個資料區塊都有其存在的位址。如果 inode 所對應的資料為實體檔案, 而非虛擬檔案 (如 /proc 目錄內的檔案), 則 inode 會指出這些位址, 讓系統得以順利找到檔案並使用它。一個 inode 能夠指向 12 個資料區塊, 如果 12 個資料區塊還放不下這個檔案, 它就會啟用間接指向指標(indirect pointer), 透過另一個資料區塊指向更多的資料區塊, 以便容納大型檔案。
查詢硬碟使用狀況的相關指令 • 監控硬碟空間及 inode 使用狀況是系統管理者常常需要執行的工作, 筆者將本章提及的相關指令整理說明如下: • dumpe2fs:查詢硬碟分割區中的資料區塊與 inode 的相關資訊。
查詢硬碟使用狀況的相關指令 • 檢視 /tmp/dump2fs.txt 檔可以獲得以下資訊:
查詢硬碟使用狀況的相關指令 • df:查詢各分割區的大小、目前使用的狀況及剩餘的空間。 • 執行 df 指令查詢時加上 -i 參數, 可以查詢系統中各分割區 inode 的使用狀況;加上 -h 參數, 可以查得各分割區的總容量及目前使用的狀況;加上 "." 則可以得知現行目錄所在的分割區為何。
查詢硬碟使用狀況的相關指令 • du:查詢系統中每一個目錄所佔用的磁碟空間。