原文出處: huangguisu Linux系統(tǒng)一般有4個(gè)主要部分: 內(nèi)核、shell,、文件系統(tǒng)和應(yīng)用程序。內(nèi)核,、shell和文件系統(tǒng)一起形成了基本的操作系統(tǒng)結(jié)構(gòu),,它們使得用戶可以運(yùn)行程序、管理文件并使用系統(tǒng),。部分層次結(jié)構(gòu)如圖1-1所示,。
1. linux內(nèi)核內(nèi)核是操作系統(tǒng)的核心,具有很多最基本功能,,它負(fù)責(zé)管理系統(tǒng)的進(jìn)程,、內(nèi)存、設(shè)備驅(qū)動(dòng)程序,、文件和網(wǎng)絡(luò)系統(tǒng),,決定著系統(tǒng)的性能和穩(wěn)定性。 Linux 內(nèi)核由如下幾部分組成:內(nèi)存管理,、進(jìn)程管理,、設(shè)備驅(qū)動(dòng)程序、文件系統(tǒng)和網(wǎng)絡(luò)管理等,。如圖: 圖1 系統(tǒng)調(diào)用接口:SCI 層提供了某些機(jī)制執(zhí)行從用戶空間到內(nèi)核的函數(shù)調(diào)用,。這個(gè)接口依賴于體系結(jié)構(gòu),甚至在相同的處理器家族內(nèi)也是如此,。SCI 實(shí)際上是一個(gè)非常有用的函數(shù)調(diào)用多路復(fù)用和多路分解服務(wù),。在 ./linux/kernel 中您可以找到 SCI 的實(shí)現(xiàn),并在 ./linux/arch 中找到依賴于體系結(jié)構(gòu)的部分,。 1. 內(nèi)存管理對(duì)任何一臺(tái)計(jì)算機(jī)而言,,其內(nèi)存以及其它資源都是有限的。為了讓有限的物理內(nèi)存滿足應(yīng)用程序?qū)?nèi)存的大需求量,,Linux 采用了稱為“虛擬內(nèi)存”的內(nèi)存管理方式,。Linux 將內(nèi)存劃分為容易處理的“內(nèi)存頁(yè)”(對(duì)于大部分體系結(jié)構(gòu)來(lái)說(shuō)都是 4KB)。Linux 包括了管理可用內(nèi)存的方式,,以及物理和虛擬映射所使用的硬件機(jī)制,。 不過(guò)內(nèi)存管理要管理的可不止 4KB 緩沖區(qū)。Linux 提供了對(duì) 4KB 緩沖區(qū)的抽象,,例如 slab 分配器,。這種內(nèi)存管理模式使用 4KB 緩沖區(qū)為基數(shù),然后從中分配結(jié)構(gòu),并跟蹤內(nèi)存頁(yè)使用情況,,比如哪些內(nèi)存頁(yè)是滿的,,哪些頁(yè)面沒(méi)有完全使用,哪些頁(yè)面為空,。這樣就允許該模式根據(jù)系統(tǒng)需要來(lái)動(dòng)態(tài)調(diào)整內(nèi)存使用,。 2 .進(jìn)程管理
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[root@localhost ~]# fdisk -l Disk /dev/hda: 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 970 7791493+ 7 HPFS/NTFS /dev/hda2 971 9729 70356667+ 5 Extended /dev/hda5 971 2915 15623181 b W95 FAT32 /dev/hda6 2916 4131 9767488+ 83 linux /dev/hda7 4132 5590 11719386 83 linux /dev/hda8 5591 6806 9767488+ 83 linux /dev/hda9 6807 9657 22900626 83 linux /dev/hda10 9658 9729 578308+ 82 linux swap / Solaris |
請(qǐng)注意第一行,, Disk /dev/hda: 80.0 GB, 80026361856 bytes ,,這個(gè)就是表示機(jī)器中只有一個(gè)硬盤設(shè)備/dev/hda ,體積大小為 80.0G,;下面的就是硬盤的分區(qū),,每個(gè)分區(qū)都有詳細(xì)的信息,在這里不詳細(xì)說(shuō)了,;
Linux下磁盤分區(qū)和目錄的關(guān)系如下:
– 任何一個(gè)分區(qū)都必須掛載到某個(gè)目錄上,。
– 目錄是邏輯上的區(qū)分。分區(qū)是物理上的區(qū)分,。
– 磁盤Linux分區(qū)都必須掛載到目錄樹(shù)中的某個(gè)具體的目錄上才能進(jìn)行讀寫(xiě)操作,。
– 根目錄是所有Linux的文件和目錄所在的地方,需要掛載上一個(gè)磁盤分區(qū),。
/bin 二進(jìn)制可執(zhí)行命令
/dev 設(shè)備特殊文件
/etc 系統(tǒng)管理和配置文件
/etc/rc.d 啟動(dòng)的配置文件和腳本
/home 用戶主目錄的基點(diǎn),比如用戶user的主目錄就是/home/user,,可以用~user表示
/lib 標(biāo)準(zhǔn)程序設(shè)計(jì)庫(kù),,又叫動(dòng)態(tài)鏈接共享庫(kù),作用類似windows里的.dll文件
/sbin 系統(tǒng)管理命令,,這里存放的是系統(tǒng)管理員使用的管理程序
/tmp 公用的臨時(shí)文件存儲(chǔ)點(diǎn)
/root 系統(tǒng)管理員的主目錄(呵呵,,特權(quán)階級(jí))
/mnt 系統(tǒng)提供這個(gè)目錄是讓用戶臨時(shí)掛載其他的文件系統(tǒng)。
/lost+found 這個(gè)目錄平時(shí)是空的,,系統(tǒng)非正常關(guān)機(jī)而留下“無(wú)家可歸”的文件(windows下叫什么.chk)就在這里
/proc 虛擬的目錄,,是系統(tǒng)內(nèi)存的映射??芍苯釉L問(wèn)這個(gè)目錄來(lái)獲取系統(tǒng)信息,。
/var 某些大文件的溢出區(qū),比方說(shuō)各種服務(wù)的日志文件
/usr 最龐大的目錄,,要用到的應(yīng)用程序和文件幾乎都在這個(gè)目錄,。其中包含:
/usr/X11R6 存放X window的目錄
/usr/bin 眾多的應(yīng)用程序
/usr/sbin 超級(jí)用戶的一些管理程序
/usr/doc linux文檔
/usr/include linux下開(kāi)發(fā)和編譯應(yīng)用程序所需要的頭文件
/usr/lib 常用的動(dòng)態(tài)鏈接庫(kù)和軟件包的配置文件
/usr/man 幫助文檔
/usr/src 源代碼,linux內(nèi)核的源代碼就放在/usr/src/linux里
/usr/local/bin 本地增加的命令
/usr/local/lib 本地增加的庫(kù)
文件系統(tǒng)指文件存在的物理空間,,linux系統(tǒng)中每個(gè)分區(qū)都是一個(gè)文件系統(tǒng),,都有自己的目錄層次結(jié)構(gòu)。linux會(huì)將這些分屬不同分區(qū)的,、單獨(dú)的文件系統(tǒng)按一定的方式形成一個(gè)系統(tǒng)的總的目錄層次結(jié)構(gòu),。一個(gè)操作系統(tǒng)的運(yùn)行離不開(kāi)對(duì)文件的操作,因此必然要擁有并維護(hù)自己的文件系統(tǒng)。
磁盤分區(qū)完畢后還需要進(jìn)行格式化(format),之后操作系統(tǒng)才能夠使用這個(gè)分區(qū),。 格式化的目的是能使操作系統(tǒng)可以使用的文件系統(tǒng)格式(即我們上面提到文件系統(tǒng)類型).
每種操作系統(tǒng)能夠使用的文件系統(tǒng)并不相同. 如windows 98 以前的微軟操作系統(tǒng)主要利用的文件系統(tǒng)是 FAT (或 FAT16),,windows 2000 以后的版本有所謂的 NTFS 文件系統(tǒng),至于 Linux 的正統(tǒng)文件系統(tǒng)則為 Ext2 (Linux second extended file system, ext2fs)這一個(gè),。此外,,在默認(rèn)的情況下,windows 操作系統(tǒng)是不會(huì)認(rèn)識(shí) Linux 的 Ext2 的,。
傳統(tǒng)的磁盤與文件系統(tǒng)之應(yīng)用中,,一個(gè)分區(qū)就是只能夠被格式化成為一個(gè)文件系統(tǒng),所以我們可以說(shuō)一個(gè) filesystem 就是一個(gè) partition,。但是由于新技術(shù)的利用,例如我們常聽(tīng)到的LVM與軟件磁盤陣列(software raid),, 這些技術(shù)可以將一個(gè)分區(qū)格式化為多個(gè)文件系統(tǒng)(例如LVM),,也能夠?qū)⒍鄠€(gè)分區(qū)合成一個(gè)文件系統(tǒng)(LVM, RAID)! 所以說(shuō),,目前我們?cè)诟袷交瘯r(shí)已經(jīng)不再說(shuō)成針對(duì) partition 來(lái)格式化了,, 通常我們可以稱呼一個(gè)可被掛載的數(shù)據(jù)為一個(gè)文件系統(tǒng)而不是一個(gè)分區(qū)喔!
那么文件系統(tǒng)是如何運(yùn)行的呢,?這與操作系統(tǒng)的文件數(shù)據(jù)有關(guān),。較新的操作系統(tǒng)的文件數(shù)據(jù)除了文件實(shí)際內(nèi)容外, 通常含有非常多的屬性,,例如 Linux 操作系統(tǒng)的文件權(quán)限(rwx)與文件屬性(擁有者,、群組、時(shí)間參數(shù)等),。 文件系統(tǒng)通常會(huì)將這兩部份的數(shù)據(jù)分別存放在不同的區(qū)塊,,權(quán)限與屬性放置到 inode 中,至于實(shí)際數(shù)據(jù)則放置到 data block 區(qū)塊中,。 另外,,還有一個(gè)超級(jí)區(qū)塊 (superblock) 會(huì)記錄整個(gè)文件系統(tǒng)的整體信息,包括 inode 與 block 的總量,、使用量,、剩余量等。
對(duì)于一個(gè)磁盤分區(qū)來(lái)說(shuō),在被指定為相應(yīng)的文件系統(tǒng)后,,整個(gè)分區(qū)被分為 1024,,2048 和 4096 字節(jié)大小的塊。根據(jù)塊使用的不同,,可分為:
就像一本書(shū)有封面,、目錄和正文一樣,。在文件系統(tǒng)中,超級(jí)塊就相當(dāng)于封面,,從封面可以得知這本書(shū)的基本信息,; inode 塊相當(dāng)于目錄,從目錄可以得知各章節(jié)內(nèi)容的位置,;而數(shù)據(jù)塊則相當(dāng)于書(shū)的正文,,記錄著具體內(nèi)容。
Linux正統(tǒng)的文件系統(tǒng)(如ext2、3等)將硬盤分區(qū)時(shí)會(huì)劃分出超級(jí)塊,、inode Table區(qū)塊和data block數(shù)據(jù)區(qū)域,。一個(gè)文件由一個(gè)超級(jí)塊、inode和數(shù)據(jù)區(qū)域塊組成,。Inode包含文件的屬性(如讀寫(xiě)屬性,、owner等,以及指向數(shù)據(jù)塊的指針),,數(shù)據(jù)區(qū)域塊則是文件內(nèi)容,。當(dāng)查看某個(gè)文件時(shí),會(huì)先從inode table中查出文件屬性及數(shù)據(jù)存放點(diǎn),,再?gòu)臄?shù)據(jù)塊中讀取數(shù)據(jù),。
ext2文件系統(tǒng)示意圖
我們將 inode 與 block 區(qū)塊用圖解來(lái)說(shuō)明一下,如下圖所示,,文件系統(tǒng)先格式化出 inode 與 block 的區(qū)塊,,假設(shè)某一個(gè)文件的屬性與權(quán)限數(shù)據(jù)是放置到 inode 4 號(hào)(下圖較小方格內(nèi)),而這個(gè) inode 記錄了文件數(shù)據(jù)的實(shí)際放置點(diǎn)為 2, 7, 13, 15 這四個(gè) block 號(hào)碼,,此時(shí)我們的操作系統(tǒng)就能夠據(jù)此來(lái)排列磁盤的閱讀順序,,可以一口氣將四個(gè) block 內(nèi)容讀出來(lái)! 那么數(shù)據(jù)的讀取就如同下圖中的箭頭所指定的模樣了,。
圖 inode/block 數(shù)據(jù)存取示意圖
這種數(shù)據(jù)存取的方法我們稱為索引式文件系統(tǒng)(indexed allocation),。那有沒(méi)有其他的慣用文件系統(tǒng)可以比較一下啊,? 有的,那就是我們慣用的閃盤(閃存),,閃盤使用的文件系統(tǒng)一般為 FAT 格式,。FAT 這種格式的文件系統(tǒng)并沒(méi)有 inode 存在,所以 FAT 沒(méi)有辦法將這個(gè)文件的所有 block 在一開(kāi)始就讀取出來(lái),。每個(gè) block 號(hào)碼都記錄在前一個(gè) block 當(dāng)中,, 其讀取方式有點(diǎn)像下圖所示:
圖、FAT文件系統(tǒng)數(shù)據(jù)存取示意圖
上圖中我們假設(shè)文件的數(shù)據(jù)依序?qū)懭?->7->4->15號(hào)這四個(gè) block 號(hào)碼中,, 但這個(gè)文件系統(tǒng)沒(méi)有辦法一口氣就知道四個(gè) block 的號(hào)碼,,他得要一個(gè)一個(gè)的將 block 讀出后,才會(huì)知道下一個(gè) block 在何處,。 如果同一個(gè)文件數(shù)據(jù)寫(xiě)入的 block 分散的太過(guò)厲害時(shí),,則我們的磁盤讀取頭將無(wú)法在磁盤轉(zhuǎn)一圈就讀到所有的數(shù)據(jù), 因此磁盤就會(huì)多轉(zhuǎn)好幾圈才能完整的讀取到這個(gè)文件的內(nèi)容,!
常常會(huì)聽(tīng)到所謂的“碎片整理”吧,? 需要碎片整理的原因就是文件寫(xiě)入的 block 太過(guò)于離散了,此時(shí)文件讀取的效能將會(huì)變的很差所致。 這個(gè)時(shí)候可以透過(guò)碎片整理將同一個(gè)文件所屬的 blocks 匯整在一起,,這樣數(shù)據(jù)的讀取會(huì)比較容易?。?nbsp;想當(dāng)然爾,,F(xiàn)AT 的文件系統(tǒng)需要經(jīng)常的碎片整理一下,,那么 Ext2 是否需要磁盤重整呢?
由于 Ext2 是索引式文件系統(tǒng),,基本上不太需要常常進(jìn)行碎片整理的,。但是如果文件系統(tǒng)使用太久, 常常刪除/編輯/新增文件時(shí),,那么還是可能會(huì)造成文件數(shù)據(jù)太過(guò)于離散的問(wèn)題,,此時(shí)或許會(huì)需要進(jìn)行重整一下的。 不過(guò),,老實(shí)說(shuō),,鳥(niǎo)哥倒是沒(méi)有在 Linux 操作系統(tǒng)上面進(jìn)行過(guò) Ext2/Ext3 文件系統(tǒng)的碎片整理說(shuō)!似乎不太需要啦,!^_^
可以用ln命令對(duì)一個(gè)已經(jīng)存在的文件再建立一個(gè)新的連接,,而不復(fù)制文件的內(nèi)容。連接有軟連接和硬連接之分,,軟連接又叫符號(hào)連接,。它們各自的特點(diǎn)是:
硬連接:原文件名和連接文件名都指向相同的物理地址。目錄不能有硬連接,;硬連接不能跨越文件系統(tǒng)(不能跨越不同的分區(qū))文件在磁盤中只有一個(gè)拷貝,,節(jié)省硬盤空間;
由于刪除文件要在同一個(gè)索引節(jié)點(diǎn)屬于唯一的連接時(shí)才能成功,,因此可以防止不必要的誤刪除,。
符號(hào)連接:用ln -s命令建立文件的符號(hào)連接符號(hào)連接是linux特殊文件的一種,作為一個(gè)文件,,它的數(shù)據(jù)是它所連接的文件的路徑名,。類似windows下的快捷方式。
可以刪除原有的文件而保存連接文件,,沒(méi)有防止誤刪除功能,。
這一段的的內(nèi)容過(guò)于抽象,又是節(jié)點(diǎn)又是數(shù)組的,,我已經(jīng)盡量通俗再通俗了,,又不好加例子作演示。大家如果還是云里霧里的話,,我也沒(méi)有什么辦法了,,只有先記住,,日后在實(shí)際應(yīng)用中慢慢體會(huì)、理解了,。這也是我學(xué)習(xí)的一個(gè)方法吧,。
內(nèi)核數(shù)據(jù)結(jié)構(gòu)
Linux內(nèi)核的VFS子系統(tǒng)可以圖示如下:
文件與IO: 每個(gè)進(jìn)程在PCB(Process Control Block)中都保存著一份文件描述符表,文件描述符就是這個(gè)表的索引,,每個(gè)表項(xiàng)都有一個(gè)指向已打開(kāi)文件的指針,,現(xiàn)在我們明確一下:已打開(kāi)的文件在內(nèi)核中用file結(jié)構(gòu)體表示,文件描述符表中的指針指向file結(jié)構(gòu)體,。
在file結(jié)構(gòu)體中維護(hù)File Status Flag(file結(jié)構(gòu)體的成員f_flags)和當(dāng)前讀寫(xiě)位置(file結(jié)構(gòu)體的成員f_pos),。在上圖中,進(jìn)程1和進(jìn)程2都打開(kāi)同一文件,,但是對(duì)應(yīng)不同的file結(jié)構(gòu)體,,因此可以有不同的File Status Flag和讀寫(xiě)位置。file結(jié)構(gòu)體中比較重要的成員還有f_count,,表示引用計(jì)數(shù)(Reference Count),,后面我們會(huì)講到,dup,、fork等系統(tǒng)調(diào)用會(huì)導(dǎo)致多個(gè)文件描述符指向同一個(gè)file結(jié)構(gòu)體,,例如有fd1和fd2都引用同一個(gè)file結(jié)構(gòu)體,那么它的引用計(jì)數(shù)就是2,,當(dāng)close(fd1)時(shí)并不會(huì)釋放file結(jié)構(gòu)體,,而只是把引用計(jì)數(shù)減到1,如果再close(fd2),,引用計(jì)數(shù)就會(huì)減到0同時(shí)釋放file結(jié)構(gòu)體,,這才真的關(guān)閉了文件。
每個(gè)file結(jié)構(gòu)體都指向一個(gè)file_operations結(jié)構(gòu)體,,這個(gè)結(jié)構(gòu)體的成員都是函數(shù)指針,,指向?qū)崿F(xiàn)各種文件操作的內(nèi)核函數(shù)。比如在用戶程序中read一個(gè)文件描述符,,read通過(guò)系統(tǒng)調(diào)用進(jìn)入內(nèi)核,然后找到這個(gè)文件描述符所指向的file結(jié)構(gòu)體,,找到file結(jié)構(gòu)體所指向的file_operations結(jié)構(gòu)體,,調(diào)用它的read成員所指向的內(nèi)核函數(shù)以完成用戶請(qǐng)求。在用戶程序中調(diào)用lseek,、read,、write、ioctl,、open等函數(shù),,最終都由內(nèi)核調(diào)用file_operations的各成員所指向的內(nèi)核函數(shù)完成用戶請(qǐng)求,。
file_operations結(jié)構(gòu)體中的release成員用于完成用戶程序的close請(qǐng)求,之所以叫release而不叫close是因?yàn)樗灰欢ㄕ娴年P(guān)閉文件,,而是減少引用計(jì)數(shù),,只有引用計(jì)數(shù)減到0才關(guān)閉文件。對(duì)于同一個(gè)文件系統(tǒng)上打開(kāi)的常規(guī)文件來(lái)說(shuō),,read,、write等文件操作的步驟和方法應(yīng)該是一樣的,調(diào)用的函數(shù)應(yīng)該是相同的,,所以圖中的三個(gè)打開(kāi)文件的file結(jié)構(gòu)體指向同一個(gè)file_operations結(jié)構(gòu)體,。如果打開(kāi)一個(gè)字符設(shè)備文件,那么它的read,、write操作肯定和常規(guī)文件不一樣,,不是讀寫(xiě)磁盤的數(shù)據(jù)塊而是讀寫(xiě)硬件設(shè)備,所以file結(jié)構(gòu)體應(yīng)該指向不同的file_operations結(jié)構(gòu)體,,其中的各種文件操作函數(shù)由該設(shè)備的驅(qū)動(dòng)程序?qū)崿F(xiàn),。
每個(gè)file結(jié)構(gòu)體都有一個(gè)指向dentry結(jié)構(gòu)體的指針,“dentry”是directory entry(目錄項(xiàng))的縮寫(xiě),。我們傳給open,、stat等函數(shù)的參數(shù)的是一個(gè)路徑,例如/home/akaedu/a,,需要根據(jù)路徑找到文件的inode,。為了減少讀盤次數(shù),內(nèi)核緩存了目錄的樹(shù)狀結(jié)構(gòu),,稱為dentry cache,,其中每個(gè)節(jié)點(diǎn)是一個(gè)dentry結(jié)構(gòu)體,只要沿著路徑各部分的dentry搜索即可,,從根目錄/找到home目錄,,然后找到akaedu目錄,然后找到文件a,。dentry cache只保存最近訪問(wèn)過(guò)的目錄項(xiàng),,如果要找的目錄項(xiàng)在cache中沒(méi)有,就要從磁盤讀到內(nèi)存中,。
每個(gè)dentry結(jié)構(gòu)體都有一個(gè)指針指向inode結(jié)構(gòu)體,。inode結(jié)構(gòu)體保存著從磁盤inode讀上來(lái)的信息。在上圖的例子中,,有兩個(gè)dentry,,分別表示/home/akaedu/a和/home/akaedu/b,它們都指向同一個(gè)inode,,說(shuō)明這兩個(gè)文件互為硬鏈接,。inode結(jié)構(gòu)體中保存著從磁盤分區(qū)的inode讀上來(lái)信息,,例如所有者、文件大小,、文件類型和權(quán)限位等,。每個(gè)inode結(jié)構(gòu)體都有一個(gè)指向inode_operations結(jié)構(gòu)體的指針,后者也是一組函數(shù)指針指向一些完成文件目錄操作的內(nèi)核函數(shù),。
和file_operations不同,,inode_operations所指向的不是針對(duì)某一個(gè)文件進(jìn)行操作的函數(shù),而是影響文件和目錄布局的函數(shù),,例如添加刪除文件和目錄,、跟蹤符號(hào)鏈接等等,屬于同一文件系統(tǒng)的各inode結(jié)構(gòu)體可以指向同一個(gè)inode_operations結(jié)構(gòu)體,。
inode結(jié)構(gòu)體有一個(gè)指向super_block結(jié)構(gòu)體的指針,。super_block結(jié)構(gòu)體保存著從磁盤分區(qū)的超級(jí)塊讀上來(lái)的信息,例如文件系統(tǒng)類型,、塊大小等,。super_block結(jié)構(gòu)體的s_root成員是一個(gè)指向dentry的指針,表示這個(gè)文件系統(tǒng)的根目錄被mount到哪里,,在上圖的例子中這個(gè)分區(qū)被mount到/home目錄下,。
file、dentry,、inode,、super_block這幾個(gè)結(jié)構(gòu)體組成了VFS的核心概念。對(duì)于ext2文件系統(tǒng)來(lái)說(shuō),,在磁盤存儲(chǔ)布局上也有inode和超級(jí)塊的概念,,所以很容易和VFS中的概念建立對(duì)應(yīng)關(guān)系。而另外一些文件系統(tǒng)格式來(lái)自非UNIX系統(tǒng)(例如Windows的FAT32,、NTFS),,可能沒(méi)有inode或超級(jí)塊這樣的概念,但為了能mount到Linux系統(tǒng),,也只好在驅(qū)動(dòng)程序中硬湊一下,,在Linux下看FAT32和NTFS分區(qū)會(huì)發(fā)現(xiàn)權(quán)限位是錯(cuò)的,所有文件都是rwxrwxrwx,,因?yàn)樗鼈儽緛?lái)就沒(méi)有inode和權(quán)限位的概念,,這是硬湊出來(lái)的。
linux系統(tǒng)中每個(gè)分區(qū)都是一個(gè)文件系統(tǒng),,都有自己的目錄層次結(jié)構(gòu)。linux會(huì)將這些分屬不同分區(qū)的,、單獨(dú)的文件系統(tǒng)按一定的方式形成一個(gè)系統(tǒng)的總的目錄層次結(jié)構(gòu),。這里所說(shuō)的“按一定方式”就是指的掛載,。
將一個(gè)文件系統(tǒng)的頂層目錄掛到另一個(gè)文件系統(tǒng)的子目錄上,使它們成為一個(gè)整體,,稱為掛載,。把該子目錄稱為掛載點(diǎn).
例如要讀取硬盤中的一個(gè)格式化好的分區(qū)、光盤或軟件等設(shè)備時(shí),,必須先把這些設(shè)備對(duì)應(yīng)到某個(gè)目錄上,,而這個(gè)目錄就稱為“掛載點(diǎn)(mount point)”,這樣才可以讀取這些設(shè)備,。 掛載后將物理分區(qū)細(xì)節(jié)屏蔽掉,,用戶只有統(tǒng)一的邏輯概念。所有的東西都是文件,。
注意:1,、掛載點(diǎn)必須是一個(gè)目錄。
2,、一個(gè)分區(qū)掛載在一個(gè)已存在的目錄上,,這個(gè)目錄可以不為空,但掛載后這個(gè)目錄下以前的內(nèi)容將不可用,。
對(duì)于其他操作系統(tǒng)建立的文件系統(tǒng)的掛載也是這樣,。但是需要理解的是:光盤、軟盤,、其他操作系統(tǒng)使用的文件系統(tǒng)的格式與linux使用的文件系統(tǒng)格式是不一樣的,。光盤是ISO9660;軟盤是fat16或ext2,;windows NT是fat16,、NTFS;windows98是fat16,、fat32,;windows2000和windowsXP是fat16、fat32,、 NTFS,。掛載前要了解linux是否支持所要掛載的文件系統(tǒng)格式。
掛載時(shí)使用mount命令,,其格式:mount [-參數(shù)] [設(shè)備名稱] [掛載點(diǎn)]
其中常用的參數(shù)有
-t 指定設(shè)備的文件系統(tǒng)類型(什么提到的文件類型)
-o 指定掛載文件系統(tǒng)時(shí)的選項(xiàng),。有些也可用在/etc/fstab中。常用的有
codepage=XXX 代碼頁(yè)
iocharset=XXX 字符集
ro 以只讀方式掛載
rw 以讀寫(xiě)方式掛載
nouser 使一般用戶無(wú)法掛載
user 可以讓一般用戶掛載設(shè)備
例如:
1. 掛載windows的文件系統(tǒng):
1)首先我們使用sudo fdisk -l查看掛載的設(shè)備,,例如最下面有:/dev/hda5
2)mkdir創(chuàng)建一個(gè)目錄,,這里的目錄是作為掛在目錄,就是你要把E盤掛到這個(gè)目錄下:mk /mnt/winc
3)windows和linux使用的不是一個(gè)文件系統(tǒng),,一般情況下linux不掛載windows文件系統(tǒng),,所以要你手動(dòng)mount:
# mount -t vfat /dev/hda5 /mnt/winc ( -t vfat指出這里的文件系統(tǒng)fat32)
現(xiàn)在就可以進(jìn)入/mnt/winc等目錄讀寫(xiě)這些文件了,。
2.掛載光盤:# mk /mnt/cdrom
# mount -t iso9660 /dev/cdrom /mnt/cdrom (關(guān)盤的名字一般都是cdrom,這條命令一般都通用)
3.虛擬機(jī)共享文件夾:例如在VirtualBox下,,主機(jī)是Windows,,Ubuntu是Guest。共分三步:
1). 首先要安裝虛擬電腦工具包:在VirtualBox的菜單里選擇”設(shè)備”->”安裝虛擬電腦工具包”,,你會(huì)發(fā)現(xiàn)在Ubuntu桌面上多出一個(gè)光盤圖標(biāo),,這張光盤默認(rèn)被自動(dòng)加載到了文件夾/media/cdom0,而且/cdrom自動(dòng)指向這個(gè)文件夾,。默認(rèn)設(shè)置下文件管理器會(huì)自動(dòng)打開(kāi)這張光盤,,可以看到里面有個(gè)”VBoxLinuxAdditions.run”文件。打開(kāi)一個(gè)命令行終端,,依次輸入”cd /cdrom”和”sudo sh ./VBoxLinuxAdditions.run”,,不含雙引號(hào),開(kāi)始安裝工具包,。安裝完畢,,會(huì)用英文提示要重啟Ubuntu,建議立刻重啟,。重啟后,,比較明顯的變化是鼠標(biāo)是共享模式,并且剪貼板也和Windows共享了,。如果有這些變化,,說(shuō)明虛擬電腦工具包已經(jīng)裝成功。
2). 下一步設(shè)置共享文件夾,。
在共享文件夾設(shè)置窗口中,,單擊右側(cè)的”添加一個(gè)共享文件夾”,路徑選擇你想要共享的Windows文件夾,,共享名任取一個(gè)自己喜歡的,,比如”myshare”,選項(xiàng)read-only是指是否只允許ubuntu讀這個(gè)文件夾,,請(qǐng)根據(jù)需要選擇這個(gè)選項(xiàng),。
3). 在ubuntu下掛載這個(gè)共享文件夾:sudo mount -t vboxsf myshare /media/share
其中”myshare”是之前取的共享文件夾的名字,”/media/share”是要掛載到的目標(biāo)文件.
每次開(kāi)機(jī)訪問(wèn)windows分區(qū)都要運(yùn)行mount命令顯然太煩瑣,,為什么訪問(wèn)其他的linux分區(qū)不用使用mount命令呢,?
其實(shí),每次開(kāi)機(jī)時(shí),,linux自動(dòng)將需要掛載的linux分區(qū)掛載上了,。那么我們是不是可以設(shè)定讓linux在啟動(dòng)的時(shí)候也掛載我們希望掛載的分區(qū),如windows分區(qū),以實(shí)現(xiàn)文件系統(tǒng)的自動(dòng)掛載呢,?
這是完全可以的,。在/etc目錄下有個(gè)fstab文件,它里面列出了linux開(kāi)機(jī)時(shí)自動(dòng)掛載的文件系統(tǒng)的列表,。我的/etc/fstab文件如下:
/dev/hda2 / ext3 defaults 1 1
/dev/hda1 /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/hda3 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,codepage=936,iocharset=gb2312 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
/dev/hdb1 /mnt/winc vfat defaults,codepage=936,iocharset=cp936 0 0
/dev/hda5 /mnt/wind vfat defaults,codepage=936,iocharset=cp936 0 0
在/etc/fstab文件里,第一列是掛載的文件系統(tǒng)的設(shè)備名,,第二列是掛載點(diǎn),,第三列是掛載的文件系統(tǒng)類型,第四列是掛載的選項(xiàng),,選項(xiàng)間用逗號(hào)分隔,。第五六列不知道是什么意思,還望高手指點(diǎn),。
在最后兩行是我手工添加的windows下的C,;D盤,加了codepage=936和iocharset=cp936參數(shù)以支持中文文件名,。參數(shù)defaults實(shí)際上包含了一組默認(rèn)參數(shù):
rw 以可讀寫(xiě)模式掛載
suid 開(kāi)啟用戶ID和群組ID設(shè)置位
dev 可解讀文件系統(tǒng)上的字符或區(qū)塊設(shè)備
exec 可執(zhí)行二進(jìn)制文件
auto 自動(dòng)掛載
nouser 使一般用戶無(wú)法掛載
async 以非同步方式執(zhí)行文件系統(tǒng)的輸入輸出操作
大家可以看到在這個(gè)列表里,,光驅(qū)和軟驅(qū)是不自動(dòng)掛載的,參數(shù)設(shè)置為noauto,。(如果你非要設(shè)成自動(dòng)掛載,,你要確保每次開(kāi)機(jī)時(shí)你的光驅(qū)和軟驅(qū)里都要有盤,呵呵,。)
可以用ln命令對(duì)一個(gè)已經(jīng)存在的文件再建立一個(gè)新的連接,而不復(fù)制文件的內(nèi)容,。連接有軟連接和硬連接之分,,軟連接又叫符號(hào)連接。它們各自的特點(diǎn)是:
硬連接:是給文件一個(gè)副本,,原文件名和連接文件名都指向相同的物理地址,。目錄不能有硬連接;硬連接不能跨越文件系統(tǒng)(不能跨越不同的分區(qū))文件在磁盤中只有一個(gè)拷貝,,節(jié)省硬盤空間,;
修改其中一個(gè),與其連接的文件同時(shí)被修改,。如果刪除其中任意一個(gè)其余的文件將不受影響,。
由于刪除文件要在同一個(gè)索引節(jié)點(diǎn)屬于唯一的連接時(shí)才能成功,因此可以防止不必要的誤刪除,。
符號(hào)連接(軟連接):用ln -s命令建立文件的符號(hào)連接符號(hào)連接是linux特殊文件的一種,,作為一個(gè)文件,它的數(shù)據(jù)是它所連接的文件的路徑名。類似windows下的快捷方式,。
當(dāng)然刪除這個(gè)連接,,也不會(huì)影響到源文件,但對(duì)連接文件的使用,、引用都是直接調(diào)用源文件的,。
具體關(guān)系可以看下圖:
圖5:軟鏈接和硬鏈接
從圖上可以看出硬鏈接和軟鏈接的區(qū)別:
1:硬鏈接原文件和新文件的inode編號(hào)一致。而軟鏈接不一樣,。
2:對(duì)原文件刪除,,會(huì)導(dǎo)致軟鏈接不可用,而硬鏈接不受影響,。
3:對(duì)原文件的修改,,軟、硬鏈接文件內(nèi)容也一樣的修改,,因?yàn)槎际侵赶蛲粋€(gè)文件內(nèi)容的,。
磁盤和文件空間 :fdisk df du
文件目錄與管理: cd pwd mkdir rmdir ls cp rm mv
查看文件內(nèi)容 cat、tac,、more,、less、head ,、tail
文件目錄與權(quán)限 :chmod chown chgrp umask
文件查找:which,、whereis、locate,、find,、find
標(biāo)準(zhǔn)的Linux系統(tǒng)一般都有一套都有稱為應(yīng)用程序的程序集,它包括文本編輯器,、編程語(yǔ)言,、X Window、辦公套件,、Internet工具和數(shù)據(jù)庫(kù)等,。
內(nèi)核參數(shù)是用戶和系統(tǒng)內(nèi)核之間交互的一個(gè)接口,通過(guò)這個(gè)接口,,用戶可以在系統(tǒng)運(yùn)行的同時(shí)動(dòng)態(tài)更新內(nèi)核配置,,而這些內(nèi)核參數(shù)是通過(guò)Linux Proc文件系統(tǒng)存在的。因此,,可以通過(guò)調(diào)整Proc文件系統(tǒng)達(dá)到優(yōu)化Linux性能的目的,。
|