2004 年 1 月 01 日
IBM 電子商務(wù)架構(gòu)師 Chris Walden 將通過他在 developerWorks 上發(fā)表的九篇系列文章來指導(dǎo)您如何在 Linux 環(huán)境中運用您的 Windows 操作技巧。在本部分,我們研究了 Linux 的分層目錄結(jié)構(gòu),以及裝載和設(shè)備。
在 Linux 中文件和存儲設(shè)備的使用與 Windows 中不同。雖然同樣有文件和分層目錄結(jié)構(gòu),但是除此以外您還需要建立一種不同的思維方式。
清單 1. 目錄結(jié)構(gòu)
/ |-- bin |-- boot |-- dev |-- etc |-- mnt |-- opt | |-- IBM | | |-- WebSphereStudio | | `-- db2 | |-- IBMHttpServer |-- root |-- sbin |-- tmp |-- usr | |-- X11R6 | | |-- bin | | |-- include | | |-- lib | | |-- man | | `-- share | |-- bin | |-- dict | |-- doc | |-- etc | |-- include | |-- lib | |-- libexec | |-- local | | |-- OpenOffice | | | |-- sbin
|
沒有驅(qū)動器字母!
在 Linux 中沒有驅(qū)動器字母,這確實相當(dāng)有用。如果您曾經(jīng)在復(fù)雜的網(wǎng)絡(luò)環(huán)境中使用過 Windows 系統(tǒng),并且運行這個系統(tǒng)的機器帶有若干個設(shè)備,那么您可能會發(fā)現(xiàn)字母表中的字母不夠用。在 Linux 中,只有一個文件結(jié)構(gòu)。它以 root (/) 開始,所有的本地文件系統(tǒng),所有本地設(shè)備,以及所有的遠程文件系統(tǒng)都表示為這個結(jié)構(gòu)中的子目錄。
當(dāng) Linux 第一次引導(dǎo)時,它根據(jù) /etc/fstab 文件中的信息構(gòu)建這個文件結(jié)構(gòu)。Windows 為硬盤驅(qū)動器分區(qū)和其他存儲設(shè)備分配驅(qū)動器字母,而 Linux 在 root 文件結(jié)構(gòu)中為它們分配目錄。這個分層的結(jié)構(gòu)是完全可配置的,并且可以動態(tài)地修改。
裝載!
將一個設(shè)備添加到文件系統(tǒng)中,術(shù)語上稱為 裝載。Linux 會自動裝載一個 / (root) 文件系統(tǒng)。也可能會有一個單獨的 /boot 文件系統(tǒng),其中存放的是核心的內(nèi)核引導(dǎo)文件。Linux 還將裝載一些特殊的文件系統(tǒng)。交換分區(qū)并不表示為文件系統(tǒng)的一部分,但是內(nèi)核會處理它。不過,其他特殊的文件系統(tǒng),比如 proc,被看作是文件系統(tǒng)的常規(guī)部分,可以像普通文件一樣對它進行處理。
|
什么是 /proc?
/proc 文件系統(tǒng)是 Windows 思想與 Linux 思想不同之處的極好示例。 /proc 存儲的是對正在運行的系統(tǒng)各個方面的虛擬描述。在那里有 IRQ 設(shè)置、內(nèi)存使用、加載的設(shè)備驅(qū)動器、網(wǎng)絡(luò)狀態(tài)等很多信息。甚至有一個叫做 /proc/kcore 的文件,是所有用到的系統(tǒng)內(nèi)存的虛擬描述。這里的每一個文件都可以像普通文件或二進制文件一樣解析。可以編寫某些文件來改變運行著的內(nèi)核的行為,而不用重新引導(dǎo)。例如,為打開系統(tǒng)中啟用的第一個以太網(wǎng)設(shè)備的 IP 轉(zhuǎn)發(fā),您可以使用一個文件命令:
echo 1 > /proc/sys/net/ipv4/conf/eth0/forwarding
|
這種系統(tǒng)的主要好處在于,您只需要使用簡單的腳本技術(shù),就可以對您的正在運行的系統(tǒng)進行深入而有效的操作。
|
|
其他文件系統(tǒng),比如可移動的媒體或者遠程文件系統(tǒng),需要手工裝載。裝載一個文件系統(tǒng)時,您需要知道在 Linux 中對它進行引用的正確方法,還需要有一個空目錄作為 裝載點。對于可移動媒體,Linux 可能在安裝時就為您創(chuàng)建了裝載點。在 Red Hat Linux 中,cdrom 設(shè)備被設(shè)置裝載到 /mnt/cdrom 目錄。也就是說,當(dāng)您將一張 CD 放入 CDROM 設(shè)備后,輸入命令:
mount /mnt/cdrom
CD 就會被添加到文件系統(tǒng)中,CDROM 設(shè)備會被鎖定以使它不會被意外彈出。只需要到 /mnt/cdrom 目錄就可以訪問 CD 中的內(nèi)容。當(dāng)不再使用 CD 時,您可以用下面的命令將它從文件系統(tǒng)中移除:
umount /mnt/cdrom
/mnt/cdrom 目錄將變空,CDROM 設(shè)備的鎖定被解除。您現(xiàn)在可以安全地彈出 CD。對其他可移動媒體也是如此,比如軟盤驅(qū)動器 (/mnt/floppy)。
運行不帶參數(shù)的 mount
命令會顯示出當(dāng)前已裝載的文件系統(tǒng)。
|
為什么都需要加鎖?
不要忘記,Linux 不僅是多用戶的,而且是多會話的。也就是說幾個用戶可以同時登錄到系統(tǒng)中、運行程序、使用資源。這與 Windows 中的登錄后使用共享文件不同。每一個用戶都可以像自己坐在控制臺前一樣使用系統(tǒng)。為了保持穩(wěn)定,Linux 不允許任意釋放當(dāng)前正在使用的文件系統(tǒng),通過鎖定 CD,在直到?jīng)]有人再使用之前 CD 不會被彈出。
|
|
/etc/fstab 文件
設(shè)備與其裝載點之間的關(guān)聯(lián)關(guān)系在 /etc/fstab 中配置。這個文件可以直接修改,也可以由管理工具來維護。下面是一個 /etc/fstab 示例:
理解 /etc/fstab
/dev/hda5 |
|
ext3 |
defaults |
1 1 |
/dev/hda2 |
/boot |
ext3 |
exec,dev,duid,rw |
1 2 |
/dev/hda6 |
swap |
swap |
defaults |
0 0 |
/dev/scd0 |
/mnt/cdrom |
auto |
ro,noauto,exec |
0 0 |
none |
/dev/pts |
devpts |
id=5,mode=620 |
0 0 |
none |
/proc |
proc |
defaults |
0 0 |
none |
/dev/shm |
tmpfs |
defaults |
0 0 |
每一行表示一個要裝載的文件系統(tǒng)。第一列指出的是要裝載的設(shè)備。第二列是裝載點,也就是設(shè)備在文件系統(tǒng)中的位置。第三列指出了文件系統(tǒng)的類型。第四列是處理文件系統(tǒng)的選項。最后一列是文件系統(tǒng)的標(biāo)志位。第一個數(shù)字是 1 或者 0,指定系統(tǒng)是否應(yīng)該用 dump(系統(tǒng)備份的一個選項)進行復(fù)制。第二個數(shù)字是 0、1 或者 2,指定了在引導(dǎo)時檢查文件系統(tǒng)的次序。0 表示完全不檢查。1 表示要最先檢查, root (/) 文件系統(tǒng)需要指定為 1。其他文件系統(tǒng)應(yīng)該是 2。
在上面列出的 fstab 文件中,root 文件系統(tǒng)位于第一個 IDE 硬盤驅(qū)動器的第五個分區(qū)中,這個分區(qū)是擴展分區(qū)的第一個邏輯驅(qū)動器。/boot 文件系統(tǒng)位于第一個 IDE 硬盤驅(qū)動器的第二個主分區(qū)中,其中存放的是內(nèi)核啟動文件。交換分區(qū)位于第一個 IDE 硬盤驅(qū)動器的第六個分區(qū),也就是擴展分區(qū)的第二個邏輯驅(qū)動器。列表中的其他文件系統(tǒng)相應(yīng)的設(shè)備是“none”。我們馬上就要闡述這一問題。現(xiàn)在我們先來關(guān)注物理磁盤。
|
什么都是文件
在 Linux 中,文件系統(tǒng)由類似于文件的名稱來表示。在 /dev 目錄下的所有文件都是稱為 nodes 的特殊文件,它們通過設(shè)備驅(qū)動程序鏈接到物理設(shè)備。這就使得您可以做一些有趣的事情。例如,為制作一張 CD 的 ISO 映像,您可以使用 cp (copy) 命令:
cp /dev/cdrecorder MyCD.iso
|
這樣復(fù)制的是一個二進制映像而不是 CD 的文件結(jié)構(gòu)。
以文件為中心的方法還允許您可以為設(shè)備名稱指定有意義的別名。例如,通常有一個叫做 /dev/cdrom 的別名,指向物理 CDROM 設(shè)備,而這個設(shè)備通常是 /dev/hdc。 一旦創(chuàng)建了別名,您就可以通過 /dev/cdrom 訪問那個設(shè)備,這樣更好記。別名技術(shù)還允許您標(biāo)準(zhǔn)化腳本,使這些腳本可以在物理配置不同的系統(tǒng)上使用。
|
|
第四列中的選項將隨文件系統(tǒng)類型而不同。在上面的例子中,/ 和 /boot 的裝載選項為“default”。也就是說,它們使用異步 I/O 以可讀寫方式自動裝載。只有 root 可以裝載或者缷載設(shè)備,但是用戶可以執(zhí)行二進制文件和使用“sticky bit”(稍后介紹)。文件系統(tǒng)將被作為塊字符設(shè)備來處理。然而,對 /mnt/cdrom 來說,選項就不同了。它不會被自動裝載,并且將會作為只讀文件系統(tǒng)裝載。用戶將可以在該文件系統(tǒng)中執(zhí)行腳本和程序。
添加文件系統(tǒng)
在 /etc/fstab 文件中添加新的一行,您就可以將文件系統(tǒng)添加到 /etc/fstab。作為一個實際的例子,我有一個 RAID 設(shè)備,存儲的是部門所用到的文件資源。這個設(shè)備中只有數(shù)據(jù)文件,并且保持與操作系統(tǒng)分離,這樣在出現(xiàn)硬件故障時可以將它轉(zhuǎn)移到另一個系統(tǒng)。RAID 已經(jīng)配置好,在 Linux 中識別為 /dev/sdc,即第三個 SCSI 設(shè)備。在第一個分區(qū)上創(chuàng)建了帶日志的 ext3 文件系統(tǒng),這樣我們通過 /dev/sdc1 就可以訪問它。我希望在計算機引導(dǎo)時自動將這個 RAID 裝載到文件系統(tǒng)中。
我在 /etc/fstab 中添加了如下一行:
/dev/sdc1 /data ext3 defaults 0 0
這樣在引導(dǎo)時 RAID 就會像 / 和 /boot 系統(tǒng)一樣被裝載。現(xiàn)在我只要再創(chuàng)建一個目錄作為指定的裝載點:
mkdir /data
一旦創(chuàng)建了這個空目錄,我們可以將文件系統(tǒng)裝載到它:
mount /data
RAID 現(xiàn)在關(guān)聯(lián)到了 /data。如果系統(tǒng)被重新引導(dǎo),/data 將自動裝載。
分區(qū)
在 Linux 中分區(qū)與 Windows 中本質(zhì)上相同??刂婆_命令 fdisk
可以創(chuàng)建和管理分區(qū)。當(dāng)您使用 fdisk
時,您必須指明它要操作哪個設(shè)備??墒褂妹?fdisk -l
來查看可用設(shè)備。
清單 2. 使用 fdisk
[root@cmw-t30 root]# fdisk -l Disk /dev/hda: 240 heads, 63 sectors, 7752 cylinders Units = cylinders of 15120 * 512 bytes Device Boot Start End Blocks Id System /dev/hda1 1 8 60448+ 8e Linux LVM /dev/hda2 9 15 52920 83 Linux /dev/hda3 * 16 1403 10493280 c Win95 FAT32 (LBA) /dev/hda4 1404 7751 47990880 f Win95 Ext‘d (LBA) /dev/hda5 1404 5565 31464688+ 83 Linux /dev/hda6 5566 5635 529168+ 82 Linux swap /dev/hda7 5636 7751 15996928+ b Win95 FAT32
|
上面的清單來自于一臺膝上型電腦,所以它顯示的結(jié)構(gòu)與服務(wù)器有些不同。它顯示了一個有若干個分區(qū)的 IDE 硬盤驅(qū)動器。如果有其他設(shè)備,同樣也將會被列出。例如,第二個 IDE 硬盤驅(qū)動器可能會顯示為 /dev/hdb。
指定一個設(shè)備再次運行 fdisk
,您會得到一個簡短的提示。
清單 3. 對一個設(shè)備運行 fdisk
[root@cmw-t30 root]# fdisk /dev/hda The number of cylinders for this disk is set to 7752. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help):
|
輸入“m”可以查看命令菜單。您可以使用“p”來顯示當(dāng)前的分區(qū)表。您可以創(chuàng)建、刪除和修改現(xiàn)有分區(qū)的類型。“l”將為您列出可用分區(qū)類型的完全列表。用“w”將您的修改寫入到分區(qū)表并退出程序,或者使用 “q”不保存修改而退出。一些修改會立即生效。有一些修改需要系統(tǒng)重新引導(dǎo)方能生效。
Linux 下的分區(qū)規(guī)則與 Windows 中相同。您可以使用 4 個主分區(qū),每個都可以成為擴展分區(qū)。
文件系統(tǒng)類型
Linux 可以處理內(nèi)核所能識別的任何文件系統(tǒng)類型。相當(dāng)多的類型是默認(rèn)編譯到內(nèi)核中的,并且可以再添加新的文件系統(tǒng)。下面是一些重要的文件系統(tǒng)類型:
- ext2:標(biāo)準(zhǔn) Linux 文件系統(tǒng)
- ext3:帶日志的標(biāo)準(zhǔn) Linux 文件系統(tǒng)
- vfat:Microsoft 的 Fat32 文件系統(tǒng)
- jfs:IBM 的日志文件系統(tǒng)
- reiserfs:另一個流行的日志文件系統(tǒng)
|
日志節(jié)約時間,保全數(shù)據(jù)
日志文件系統(tǒng)有助于在非正常關(guān)閉時保護數(shù)據(jù)。如果一個卷沒有缷載就被關(guān)閉,可能還遺留下未完成的工作,以及處于 in-between 狀態(tài)的文件。在典型的文件系統(tǒng)中,需要對這個卷進行全面的檢查,對較大的卷來說這需要比較長的時間。日志文件系統(tǒng)會對磁盤的每一個寫操作的事務(wù)記錄保持一段時間(比如 5 秒)。當(dāng)這個卷沒有被完全地缷載時,文件系統(tǒng)只需要回滾到最后一個已知的正常狀態(tài)。原來恢復(fù)一個卷需要 20 分鐘時間,現(xiàn)在只需要幾秒!
|
|
格式化分區(qū)
分區(qū)創(chuàng)建完成后,用適當(dāng)版本的 mkfs
命令對其進行格式化。文件系統(tǒng)將有其自己版本的 mkfs
,比如 mkfs.ext2
或者 mkfs.ext3
。這些助手腳本讓您可以只需要指定分區(qū)就可以創(chuàng)建一個文件系統(tǒng)。下面是一些例子:
清單 4. 使用 mkfs
# Create an ext2 file system on the third # parition of the first IDE hard drive mkfs.ext2 /dev/hda3 # Create an ext3 file system on the first # partition of the 2nd SCSI hard drivemkfs.ext2 mkfs.ext3 /dev/sdb1 # Create a jfs file system in an extended # partition on the first IDE hard drive. mkfs.jfs /dev/hda5
|
有一些高級的參數(shù)會影響分區(qū)如何格式化,但是對通常的用途來說,使用默認(rèn)的參數(shù)就可以了。一旦分區(qū)經(jīng)過了格式化,它就可以裝載到 / 文件系統(tǒng)中。一個文件系統(tǒng)必須在被缷載后才可以重新格式化。
其他文件系統(tǒng)工具
讓我們來看一看其他有用的工具。
控制臺工具
有幾個工具可以查看磁盤和文件系統(tǒng)的狀態(tài)。
df
df
表示“disk free”。它會報告裝載的文件系統(tǒng)上已用的和可用的磁盤空間的大小。有用的開關(guān):
檢查磁盤空間
df -h |
人類可讀的格式;以易讀的 k、M、G 而不是以字節(jié)為單位來顯示文件的大小 |
df -l |
僅列出本地文件系統(tǒng);默認(rèn)情況下,遠程文件系統(tǒng)也會被列出 |
du
du
表示“disk usage”。它會報告特定的文件和每個子目錄 (參數(shù)中指定的目錄) 所使用的磁盤空間大小。有用的開關(guān):
檢查磁盤使用情況
du -a |
列出所有文件所占的空間,而不僅是目錄 |
du -h |
人類可讀的格式;以易讀的 k、M、G 而不是以字節(jié)為單位來顯示文件的大小 |
du -c |
在所有的參數(shù)處理完成后輸出一個總計;可以用來得到給定的一組文件或目錄所占的總的磁盤空間 |
du -s |
只顯示出每個參數(shù)指定的文件大小的總和 |
fsck
這個程序用來檢查和修復(fù)文件系統(tǒng),相當(dāng)于 Windows 中的 chkdsk
。如同 mkfs
一樣,對應(yīng)不同的文件系統(tǒng)類型它有不同的版本。 fsck
必須運行于已缷載的卷上,雖然除非是在文件系統(tǒng)沒有缷載完全的時候,否則很少會用到它。 man fsck
和 info fsck
,以及本文最后的 參考資料中都提供了詳細的資料。
Webmin
Webmin 有一些工具用于管理文件系統(tǒng)和分區(qū)。
圖 1. Webmin 分區(qū)工具
硬件、本地磁盤上的分區(qū)
每一個磁盤和分區(qū)以及它們的使用情況都被顯示出來。點擊一個文件系統(tǒng)可以查看詳細信息。對于已卸載的分區(qū),可以編輯它的類型,以及格式化它的文件系統(tǒng)。
系統(tǒng)、磁盤和網(wǎng)絡(luò)文件系統(tǒng)
裝載的和卸載的文件系統(tǒng)都在 /etc/fstab 中列出。普通文件系統(tǒng)類型有一個用于創(chuàng)建條目的向?qū)?。沒有識別出的文件系統(tǒng)類型可以在這里裝載和缷載,但是只能手工編輯 /etc/fstab。大多數(shù)服務(wù)器文件系統(tǒng)在這里都可以很好地處理。
完整的體系是分區(qū)的總和
雖然在 Linux 中對分區(qū)和文件系統(tǒng)的管理與 Windows 中有很多類似之處,但是從驅(qū)動器字母過渡到完全的分層樹可能還需要作一些調(diào)整。因此,有一些健壯的控制臺工具可以使用這些功能及 /etc 目錄下的配置文件。Webmin 等基于瀏覽器的前端提供了一些有用的工具。
參考資料
關(guān)于作者
|
|
|
Chris Walden 是位于德克薩斯州奧斯汀的 IBM Developer Relations Technical Consulting(也稱為 dragonslayers )的一名電子商務(wù)架構(gòu)師,該公司為 IBM 商業(yè)伙伴提供教育、實現(xiàn)和咨詢。他致力于 Linux 相關(guān)工作,一有機會就向身邊的人宣傳 Linux 的種種好處。除了完成他的架構(gòu)師的職責(zé)之外,他還精通 Linux 基礎(chǔ)設(shè)施服務(wù)器的各個領(lǐng)域,包括混合平臺用戶環(huán)境下的文件、打印以及其他應(yīng)用服務(wù)等等。Chris 有 10 年的計算機行業(yè)經(jīng)驗,從現(xiàn)場支持到 Web 應(yīng)用開發(fā)和顧問,各個領(lǐng)域他都曾涉足。您可以通過 cmwalden-at-us.ibm.com 與 Chris 聯(lián)系。
|