導(dǎo)讀
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)并思。
1. linux 內(nèi)核 內(nèi)核是操作系統(tǒng)的核心庐氮,具有很多最基本功能,它負(fù)責(zé)管理系統(tǒng)的進(jìn)程宋彼、內(nèi)存弄砍、設(shè)備驅(qū)動程序仙畦、文件和網(wǎng)絡(luò)系統(tǒng),決定著系統(tǒng)的性能和穩(wěn)定性音婶。 Linux 內(nèi)核由如下幾部分組成:內(nèi)存管理慨畸、進(jìn)程管理、設(shè)備驅(qū)動程序衣式、文件系統(tǒng)和網(wǎng)絡(luò)管理等寸士。如圖:
系統(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.1 內(nèi)存管理 對任何一臺計(jì)算機(jī)而言,其內(nèi)存以及其它資源都是有限的荧飞。為了讓有限的物理內(nèi)存滿足應(yīng)用程序?qū)?nèi)存的大需求量凡蜻,Linux 采用了稱為“虛擬內(nèi)存”的內(nèi)存管理方式。Linux 將內(nèi)存劃分為容易處理的“內(nèi)存頁”(對于大部分體系結(jié)構(gòu)來說都是 4KB)垢箕。Linux 包括了管理可用內(nèi)存的方式,以及物理和虛擬映射所使用的硬件機(jī)制兑巾。
不過內(nèi)存管理要管理的可不止 4KB 緩沖區(qū)条获。Linux 提供了對 4KB 緩沖區(qū)的抽象,例如 slab 分配器蒋歌。這種內(nèi)存管理模式使用 4KB 緩沖區(qū)為基數(shù)帅掘,然后從中分配結(jié)構(gòu),并跟蹤內(nèi)存頁使用情況堂油,比如哪些內(nèi)存頁是滿的修档,哪些頁面沒有完全使用,哪些頁面為空府框。這樣就允許該模式根據(jù)系統(tǒng)需要來動態(tài)調(diào)整內(nèi)存使用吱窝。
為了支持多個(gè)用戶使用內(nèi)存,有時(shí)會出現(xiàn)可用內(nèi)存被消耗光的情況迫靖。由于這個(gè)原因院峡,頁面可以移出內(nèi)存并放入磁盤中。這個(gè)過程稱為交換系宜,因?yàn)轫撁鏁粡膬?nèi)存交換到硬盤上照激。內(nèi)存管理的源代碼可以在 ./linux/mm 中找到。
1.2 進(jìn)程管理 進(jìn)程實(shí)際是某特定應(yīng)用程序的一個(gè)運(yùn)行實(shí)體盹牧。 在 Linux 系統(tǒng)中俩垃,能夠同時(shí)運(yùn)行多個(gè)進(jìn)程励幼,Linux 通過在短的時(shí)間間隔內(nèi)輪流運(yùn)行這些進(jìn)程而實(shí)現(xiàn)“多任務(wù)”。這一短的時(shí)間間隔稱為“時(shí)間片”口柳,讓進(jìn)程輪流運(yùn)行的方法稱為“進(jìn)程調(diào)度” 苹粟,完成調(diào)度的程序稱為調(diào)度程序。
進(jìn)程調(diào)度控制進(jìn)程對 CPU 的訪問啄清。 當(dāng)需要選擇下一個(gè)進(jìn)程運(yùn)行時(shí)六水,由調(diào)度程序選擇最值得運(yùn)行的進(jìn)程±弊洌可運(yùn)行進(jìn)程實(shí)際上是僅等待 CPU 資源的進(jìn)程掷贾,如果某個(gè)進(jìn)程在等待其它資源,則該進(jìn)程是不可運(yùn)行進(jìn)程荣茫。Linux 使用了比較簡單的基于優(yōu)先級的進(jìn)程調(diào)度算法選擇新的進(jìn)程想帅。
通過多任務(wù)機(jī)制,每個(gè)進(jìn)程可認(rèn)為只有自己獨(dú)占計(jì)算機(jī)啡莉,從而簡化程序的編寫港准。每個(gè)進(jìn)程有自己單獨(dú)的地址空間,并且只能由這一進(jìn)程訪問咧欣,這樣浅缸,操作系統(tǒng)避免了進(jìn)程之間的互相干擾以及“壞”程序?qū)ο到y(tǒng)可能造成的危害。 為了完成某特定任務(wù)魄咕,有時(shí)需要綜合兩個(gè)程序的功能衩椒,例如一個(gè)程序輸出文本,而另一個(gè)程序?qū)ξ谋具M(jìn)行排序哮兰。為此毛萌,操作系統(tǒng)還提供進(jìn)程間的通訊機(jī)制來幫助完成這樣的任務(wù)。Linux 中常見的進(jìn)程間通訊機(jī)制有信號喝滞、管道阁将、共享內(nèi)存、信號量和套接字等右遭。
內(nèi)核通過 SCI 提供了一個(gè)應(yīng)用程序編程接口(API)來創(chuàng)建一個(gè)新進(jìn)程(fork做盅、exec 或 Portable Operating System Interface [POSⅨ] 函數(shù)),停止進(jìn)程(kill窘哈、exit)言蛇,并在它們之間進(jìn)行通信和同步(signal 或者 POSⅨ 機(jī)制)。
1.3 文件系統(tǒng) 和 DOS 等操作系統(tǒng)不同宵距,Linux 操作系統(tǒng)中單獨(dú)的文件系統(tǒng)并不是由驅(qū)動器號或驅(qū)動器名稱(如 A: 或 C: 等)來標(biāo)識的腊尚。相反,和 UNIX 操作系統(tǒng)一樣满哪,Linux 操作系統(tǒng)將獨(dú)立的文件系統(tǒng)組合成了一個(gè)層次化的樹形結(jié)構(gòu)婿斥,并且由一個(gè)單獨(dú)的實(shí)體代表這一文件系統(tǒng)劝篷。Linux 將新的文件系統(tǒng)通過一個(gè)稱為“掛裝”或“掛上”的操作將其掛裝到某個(gè)目錄上,從而讓不同的文件系統(tǒng)結(jié)合成為一個(gè)整體民宿。Linux 操作系統(tǒng)的一個(gè)重要特點(diǎn)是它支持許多不同類型的文件系統(tǒng)娇妓。
Linux 中最普遍使用的文件系統(tǒng)是 Ext2,它也是 Linux 土生土長的文件系統(tǒng)活鹰。但 Linux 也能夠支持 FAT哈恰、VFAT、FAT32志群、MINIX 等不同類型的文件系統(tǒng)着绷,從而可以方便地和其它操作系統(tǒng)交換數(shù)據(jù)。由于 Linux 支持許多不同的文件系統(tǒng)锌云,并且將它們組織成了一個(gè)統(tǒng)一的虛擬文件系統(tǒng).
虛擬文件系統(tǒng)(VirtualFileSystem,VFS): 隱藏了各種硬件的具體細(xì)節(jié)荠医,把文件系統(tǒng)操作和不同文件系統(tǒng)的具體實(shí)現(xiàn)細(xì)節(jié)分離了開來,為所有的設(shè)備提供了統(tǒng)一的接口桑涎,VFS 提供了多達(dá)數(shù)十種不同的文件系統(tǒng)彬向。虛擬文件系統(tǒng)可以分為邏輯文件系統(tǒng)和設(shè)備驅(qū)動程序。邏輯文件系統(tǒng)指 Linux 所支持的文件系統(tǒng)攻冷,如 ext2,fat 等娃胆,設(shè)備驅(qū)動程序指為每一種硬件控制器所編寫的設(shè)備驅(qū)動程序模塊。
虛擬文件系統(tǒng)(VFS)是 Linux 內(nèi)核中非常有用的一個(gè)方面等曼,因?yàn)樗鼮槲募到y(tǒng)提供了一個(gè)通用的接口抽象缕棵。VFS 在 SCI 和內(nèi)核所支持的文件系統(tǒng)之間提供了一個(gè)交換層。即 VFS 在用戶和文件系統(tǒng)之間提供了一個(gè)交換層涉兽。
VFS 在用戶和文件系統(tǒng)之間提供了一個(gè)交換層:在 VFS 上面,是對諸如 open篙程、close枷畏、read 和 write 之類的函數(shù)的一個(gè)通用 API 抽象。在 VFS 下面是文件系統(tǒng)抽象虱饿,它定義了上層函數(shù)的實(shí)現(xiàn)方式拥诡。它們是給定文件系統(tǒng)(超過 50 個(gè))的插件。文件系統(tǒng)的源代碼可以在 ./linux/fs 中找到氮发。
文件系統(tǒng)層之下是緩沖區(qū)緩存渴肉,它為文件系統(tǒng)層提供了一個(gè)通用函數(shù)集(與具體文件系統(tǒng)無關(guān))。這個(gè)緩存層通過將數(shù)據(jù)保留一段時(shí)間(或者隨即預(yù)先讀取數(shù)據(jù)以便在需要是就可用)優(yōu)化了對物理設(shè)備的訪問爽冕。緩沖區(qū)緩存之下是設(shè)備驅(qū)動程序仇祭,它實(shí)現(xiàn)了特定物理設(shè)備的接口。
因此颈畸,用戶和進(jìn)程不需要知道文件所在的文件系統(tǒng)類型乌奇,而只需要象使用 Ext2 文件系統(tǒng)中的文件一樣使用它們没讲。
1.4 設(shè)備驅(qū)動程序 設(shè)備驅(qū)動程序是 Linux 內(nèi)核的主要部分。和操作系統(tǒng)的其它部分類似礁苗,設(shè)備驅(qū)動程序運(yùn)行在高特權(quán)級的處理器環(huán)境中爬凑,從而可以直接對硬件進(jìn)行操作,但正因?yàn)槿绱耸曰铮魏我粋€(gè)設(shè)備驅(qū)動程序的錯(cuò)誤都可能導(dǎo)致操作系統(tǒng)的崩潰嘁信。設(shè)備驅(qū)動程序?qū)嶋H控制操作系統(tǒng)和硬件設(shè)備之間的交互。
設(shè)備驅(qū)動程序提供一組操作系統(tǒng)可理解的抽象接口完成和操作系統(tǒng)之間的交互疏叨,而與硬件相關(guān)的具體操作細(xì)節(jié)由設(shè)備驅(qū)動程序完成潘靖。一般而言,設(shè)備驅(qū)動程序和設(shè)備的控制芯片有關(guān)考廉,例如秘豹,如果計(jì)算機(jī)硬盤是 SCSI 硬盤,則需要使用 SCSI 驅(qū)動程序昌粤,而不是 IDE 驅(qū)動程序既绕。
1.5 網(wǎng)絡(luò)接口(NET) 提供了對各種網(wǎng)絡(luò)標(biāo)準(zhǔn)的存取和各種網(wǎng)絡(luò)硬件的支持。網(wǎng)絡(luò)接口可分為網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)驅(qū)動程序涮坐。網(wǎng)絡(luò)協(xié)議部分負(fù)責(zé)實(shí)現(xiàn)每一種可能的網(wǎng)絡(luò)傳輸協(xié)議凄贩。眾所周知,TCP/IP 協(xié)議是 Internet 的標(biāo)準(zhǔn)協(xié)議袱讹,同時(shí)也是事實(shí)上的工業(yè)標(biāo)準(zhǔn)疲扎。
Linux 的網(wǎng)絡(luò)實(shí)現(xiàn)支持 BSD 套接字,支持全部的 TCP/IP 協(xié)議捷雕。Linux 內(nèi)核的網(wǎng)絡(luò)部分由 BSD 套接字椒丧、網(wǎng)絡(luò)協(xié)議層和網(wǎng)絡(luò)設(shè)備驅(qū)動程序組成。網(wǎng)絡(luò)設(shè)備驅(qū)動程序負(fù)責(zé)與硬件設(shè)備通訊救巷,每一種可能的硬件設(shè)備都有相應(yīng)的設(shè)備驅(qū)動程序壶熏。
2. Linux Shell shell 是系統(tǒng)的用戶界面,提供了用戶與內(nèi)核進(jìn)行交互操作的一種接口浦译。它接收用戶輸入的命令并把它送入內(nèi)核去執(zhí)行棒假,是一個(gè)命令解釋器。另外精盅,shell 編程語言具有普通編程語言的很多特點(diǎn)垫卤,用這種編程語言編寫的 shell 程序與其他應(yīng)用程序具有同樣的效果谭期。 目前主要有下列版本的 shell。
(1).Bourne Shell: 是貝爾實(shí)驗(yàn)室開發(fā)的。 (2).BASH: 是 GNU 的 Bourne Again Shell邢笙,是 GNU 操作系統(tǒng)上默認(rèn)的 shell, 大部分 linux 的發(fā)行套件使用的都是這種 shell。 (3).Korn Shell: 是對 Bourne SHell 的發(fā)展,在大部分內(nèi)容上與 Bourne Shell 兼容。 (4).C Shell: 是 SUN 公司 Shell 的 BSD 版本鹰贵。
3. linux 文件系統(tǒng) 文件系統(tǒng)是文件存放在磁盤等存儲設(shè)備上的組織方法。Linux 系統(tǒng)能支持多種目前流行的文件系統(tǒng)康嘉,如 EXT2碉输、 EXT3、 FAT亭珍、 FAT32敷钾、 VFAT 和 ISO9660。
3.1 文件類型 Linux 下面的文件類型主要有: 1) 普通文件:C 語言元代碼肄梨、SHELL 腳本阻荒、二進(jìn)制的可執(zhí)行文件等。分為純文本和二進(jìn)制众羡。 2) 目錄文件: 目錄侨赡,存儲文件的唯一地方。 3) 鏈接文件: 指向同一個(gè)文件或目錄的的文件粱侣。 4) 設(shè)備文件: 與系統(tǒng)外設(shè)相關(guān)的羊壹,通常在/dev 下面。分為塊設(shè)備和字符設(shè)備齐婴。 5)管道 (FIFO) 文件: 提供進(jìn)程之間通信的一種方式 6)套接字 (socket) 文件: 該文件類型與網(wǎng)絡(luò)通信有關(guān) 可以通過 ls –l, file, stat 幾個(gè)命令來查看文件的類型等相關(guān)信息油猫。
3.2 Linux 目錄 文件結(jié)構(gòu)是文件存放在磁盤等存貯設(shè)備上的組織方法。主要體現(xiàn)在對文件和目錄的組織上柠偶;目錄提供了管理文件的一個(gè)方便而有效的途徑情妖。
Linux 使用標(biāo)準(zhǔn)的目錄結(jié)構(gòu),在安裝的時(shí)候诱担,安裝程序就已經(jīng)為用戶創(chuàng)建了文件系統(tǒng)和完整而固定的目錄組成形式毡证,并指定了每個(gè)目錄的作用和其中的文件類型。
完整的目錄樹可劃分為小的部分蔫仙,這些小部分又可以單獨(dú)存放在自己的磁盤或分區(qū)上料睛。這樣,相對穩(wěn)定的部分和經(jīng)常變化的部分可單獨(dú)存放在不同的分區(qū)中匀哄,從而方便備份或系統(tǒng)管理。目錄樹的主要部分有root雏蛮、/usr涎嚼、/var、/home 等挑秉。這樣的布局可方便在 Linux 計(jì)算機(jī)之間共享文件系統(tǒng)的某些部分法梯。Linux 采用的是樹型結(jié)構(gòu)。最上層是根目錄,其他的所有目錄都是從根目錄出發(fā)而生成的立哑。微軟的 DOS 和 windows 也是采用樹型結(jié)構(gòu)夜惭,但是在 DOS 和 windows 中這樣的樹型結(jié)構(gòu)的根是磁盤分區(qū)的盤符,有幾個(gè)分區(qū)就有幾個(gè)樹型結(jié)構(gòu)铛绰,他們之間的關(guān)系是并列的诈茧。最頂部的是不同的磁盤(分區(qū)),如:C捂掰,D敢会,E,F(xiàn) 等这嚣。但是在 linux 中鸥昏,無論操作系統(tǒng)管理幾個(gè)磁盤分區(qū),這樣的目錄樹只有一個(gè)姐帚。從結(jié)構(gòu)上講吏垮,各個(gè)磁盤分區(qū)上的樹型目錄不一定是并列的。
3.3 Linux 磁盤分區(qū) 主分區(qū)罐旗,擴(kuò)展分區(qū)和邏輯分區(qū): linux 分區(qū)不同于 windows, 硬盤和硬盤分區(qū)在 Linux 都表示為設(shè)備. 硬盤分區(qū)一共有三種:主分區(qū)膳汪,擴(kuò)展分區(qū)和邏輯分區(qū)。 硬盤的分區(qū)主要分為主分區(qū) (Primary Partion) 和擴(kuò)展分區(qū) (Extension Partion) 兩種尤莺,主分區(qū)和擴(kuò)展分區(qū)的數(shù)目之和不能大于四個(gè)旅敷。 主分區(qū) (Primary Partion): 可以馬上被使用但不能再分區(qū)。 擴(kuò)展分區(qū) (Extension Partion): 必須再進(jìn)行分區(qū)后才能使用颤霎,也就是說它必須還要進(jìn)行二次分區(qū)媳谁。 邏輯分區(qū) ((Logical Partion)): 由擴(kuò)展分區(qū)建立起來的分區(qū),邏輯分區(qū)沒有數(shù)量上限制友酱。 擴(kuò)展分區(qū)只不過是邏輯分區(qū)的“容器”晴音,實(shí)際上只有主分區(qū)和邏輯分區(qū)進(jìn)行數(shù)據(jù)存儲。
Linux 下硬盤分區(qū)的標(biāo)識 硬盤分區(qū)的標(biāo)識一般使用/dev/hd[a-z]X 或者/dev/sd[a-z]X 來標(biāo)識缔杉,其中 [a-z] 代表硬盤號锤躁,X 代表硬盤內(nèi)的分區(qū)號。 整塊硬盤分區(qū)的塊號標(biāo)識:Linux 下用 hda或详、hdb系羞、sda、sdb 等來標(biāo)識不同的硬盤; 其中: IDE 接口硬盤:表示為/dev/hda1霸琴、/dev/hdb …椒振; SCSI 接口的硬盤、SATA 接口的硬盤表示為/dev/sda梧乘、/dev/sdb … … 澎迎; 硬盤內(nèi)的分區(qū): 如果 X 的值是 1 到 4, 表示硬盤的主分區(qū)(包含擴(kuò)展分區(qū))庐杨;邏輯分區(qū)從是從 5 開始的,比如/dev/hda5 肯定是邏輯分區(qū)了夹供;
例如: 用 hda1灵份、hda2、 hda5哮洽、hda6 來標(biāo)識不同的分區(qū)填渠。其中,字母 a 代表第一塊硬盤袁铐,b 代表第二塊硬盤揭蜒,依次類推。而數(shù)字 1 代表一塊硬盤的第一個(gè)分區(qū)剔桨、2 代表第二個(gè)分區(qū)屉更,依次類推。1 到 4 對應(yīng)的是主分區(qū) (Primary Partition) 或擴(kuò)展分區(qū) (Extension Partition)洒缀。從 5 開始瑰谜,對應(yīng)的都是硬盤的邏輯分區(qū) (Logical Partition)。 一塊硬盤即使只有一個(gè)主分區(qū)树绩,邏輯分區(qū)也是從 5 開始編號的萨脑,這點(diǎn)應(yīng)特別注意。
總結(jié):一個(gè)硬盤分區(qū)首先要確認(rèn)在哪個(gè)硬盤饺饭,然后再確認(rèn)它所在硬盤內(nèi)的哪個(gè)分區(qū)渤早。
對于/dev/hda 類似的表示方法,也并不寞生吧瘫俊;我們在 Linux 通過 fdisk -l 就可以查到硬盤是/dev/hda 還是/dev/hdb鹊杖; [root@localhost ~]# fdisk -lDisk /dev/hda: 80.0 GB, 80026361856 bytes255 heads, 63 sectors/track, 9729 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesDevice 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
請注意第一行, Disk /dev/hda: 80.0 GB, 80026361856 bytes 扛芽,這個(gè)就是表示機(jī)器中只有一個(gè)硬盤設(shè)備/dev/hda 骂蓖,體積大小為 80.0G;下面的就是硬盤的分區(qū)川尖,每個(gè)分區(qū)都有詳細(xì)的信息登下,在這里不詳細(xì)說了; Linux 下磁盤分區(qū)和目錄的關(guān)系如下: – 任何一個(gè)分區(qū)都必須掛載到某個(gè)目錄上叮喳。 – 目錄是邏輯上的區(qū)分被芳。分區(qū)是物理上的區(qū)分。 – 磁盤 Linux 分區(qū)都必須掛載到目錄樹中的某個(gè)具體的目錄上才能進(jìn)行讀寫操作馍悟。 – 根目錄是所有 Linux 的文件和目錄所在的地方畔濒,需要掛載上一個(gè)磁盤分區(qū)。
3.4 linux 主要目錄的功用赋朦。 /bin 二進(jìn)制可執(zhí)行命令 /dev 設(shè)備特殊文件 /etc 系統(tǒng)管理和配置文件 /etc/rc.d 啟動的配置文件和腳本 /home 用戶主目錄的基點(diǎn)篓冲,比如用戶 user 的主目錄就是/home/user,可以用~user 表示 /lib 標(biāo)準(zhǔn)程序設(shè)計(jì)庫宠哄,又叫動態(tài)鏈接共享庫壹将,作用類似 windows 里的.dll 文件 /sbin 系統(tǒng)管理命令,這里存放的是系統(tǒng)管理員使用的管理程序 /tmp 公用的臨時(shí)文件存儲點(diǎn) /root 系統(tǒng)管理員的主目錄(呵呵毛嫉,特權(quán)階級) /mnt 系統(tǒng)提供這個(gè)目錄是讓用戶臨時(shí)掛載其他的文件系統(tǒng)诽俯。 /lost+found 這個(gè)目錄平時(shí)是空的,系統(tǒng)非正常關(guān)機(jī)而留下“無家可歸”的文件(windows 下叫什么.chk)就在這里 /proc 虛擬的目錄承粤,是系統(tǒng)內(nèi)存的映射暴区。可直接訪問這個(gè)目錄來獲取系統(tǒng)信息辛臊。 /var 某些大文件的溢出區(qū)仙粱,比方說各種服務(wù)的日志文件 /usr 最龐大的目錄,要用到的應(yīng)用程序和文件幾乎都在這個(gè)目錄彻舰。其中包含: /usr/X11R6 存放 X window 的目錄 /usr/bin 眾多的應(yīng)用程序 /usr/sbin 超級用戶的一些管理程序 /usr/doc linux 文檔 /usr/include linux 下開發(fā)和編譯應(yīng)用程序所需要的頭文件 /usr/lib 常用的動態(tài)鏈接庫和軟件包的配置文件 /usr/man 幫助文檔 /usr/src 源代碼伐割,linux 內(nèi)核的源代碼就放在/usr/src/linux 里 /usr/local/bin 本地增加的命令 /usr/local/lib 本地增加的庫
3.5 linux 文件系統(tǒng) 文件系統(tǒng)指文件存在的物理空間,linux 系統(tǒng)中每個(gè)分區(qū)都是一個(gè)文件系統(tǒng)刃唤,都有自己的目錄層次結(jié)構(gòu)隔心。linux 會將這些分屬不同分區(qū)的、單獨(dú)的文件系統(tǒng)按一定的方式形成一個(gè)系統(tǒng)的總的目錄層次結(jié)構(gòu)尚胞。一個(gè)操作系統(tǒng)的運(yùn)行離不開對文件的操作硬霍,因此必然要擁有并維護(hù)自己的文件系統(tǒng)。
1. 文件系統(tǒng)類型: ext2 : 早期 linux 中常用的文件系統(tǒng)ext3 : ext2 的升級版笼裳,帶日志功能RAMFS : 內(nèi)存文件系統(tǒng)唯卖,速度很快NFS : 網(wǎng)絡(luò)文件系統(tǒng),由 SUN 發(fā)明侍咱,主要用于遠(yuǎn)程文件共享MS-DOS : MS-DOS 文件系統(tǒng)VFAT : Windows 95/98 操作系統(tǒng)采用的文件系統(tǒng)FAT : Windows XP 操作系統(tǒng)采用的文件系統(tǒng)NTFS: Windows NT/XP 操作系統(tǒng)采用的文件系統(tǒng)HPFS : OS/2 操作系統(tǒng)采用的文件系統(tǒng)PROC : 虛擬的進(jìn)程文件系統(tǒng)ISO9660 : 大部分光盤所采用的文件系統(tǒng)ufsSun : OS 所采用的文件系統(tǒng)NCPFS : Novell 服務(wù)器所采用的文件系統(tǒng)SMBFS : Samba 的共享文件系統(tǒng)XFS : 由 SGI 開發(fā)的先進(jìn)的日志文件系統(tǒng)耐床,支持超大容量文件JFS :IBM 的 AIX 使用的日志文件系統(tǒng)ReiserFS : 基于平衡樹結(jié)構(gòu)的文件系統(tǒng)udf: 可擦寫的數(shù)據(jù)光盤文件系統(tǒng)
2. 文件系統(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)是不會認(rèn)識 Linux 的 Ext2 的木柬。
傳統(tǒng)的磁盤與文件系統(tǒng)之應(yīng)用中皆串,一個(gè)分區(qū)就是只能夠被格式化成為一個(gè)文件系統(tǒng),所以我們可以說一個(gè) filesystem 就是一個(gè) partition眉枕。但是由于新技術(shù)的利用恶复,例如我們常聽到的 LVM 與軟件磁盤陣列 (software raid)怜森, 這些技術(shù)可以將一個(gè)分區(qū)格式化為多個(gè)文件系統(tǒng) (例如 LVM),也能夠?qū)⒍鄠€(gè)分區(qū)合成一個(gè)文件系統(tǒng) (LVM, RAID)谤牡! 所以說副硅,目前我們在格式化時(shí)已經(jīng)不再說成針對 partition 來格式化了, 通常我們可以稱呼一個(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)通常會將這兩部份的數(shù)據(jù)分別存放在不同的區(qū)塊,權(quán)限與屬性放置到 inode 中玷室,至于實(shí)際數(shù)據(jù)則放置到 data block 區(qū)塊中茸炒。 另外,還有一個(gè)超級區(qū)塊 (superblock) 會記錄整個(gè)文件系統(tǒng)的整體信息阵苇,包括 inode 與 block 的總量壁公、使用量、剩余量等绅项。
對于一個(gè)磁盤分區(qū)來說紊册,在被指定為相應(yīng)的文件系統(tǒng)后,整個(gè)分區(qū)被分為 1024快耿,2048 和 4096 字節(jié)大小的塊囊陡。根據(jù)塊使用的不同,可分為: 超級塊 (Superblock): 這是整個(gè)文件系統(tǒng)的第一塊空間掀亥。包括整個(gè)文件系統(tǒng)的基本信息撞反,如塊大小,inode/block 的總量搪花、使用量遏片、剩余量,指向空間 inode 和數(shù)據(jù)塊的指針等相關(guān)信息撮竿。
***inode 塊 (文件索引節(jié)點(diǎn)) ***: 文件系統(tǒng)索引, 記錄文件的屬性吮便。它是文件系統(tǒng)的最基本單元,是文件系統(tǒng)連接任何子目錄幢踏、任何文件的橋梁髓需。每個(gè)子目錄和文件只有唯一的一個(gè) inode 塊。它包含了文件系統(tǒng)中文件的基本屬性 (文件的長度房蝉、創(chuàng)建及修改時(shí)間僚匆、權(quán)限微渠、所屬關(guān)系)、存放數(shù)據(jù)的位置等相關(guān)信息. 在 Linux 下可以通過 “l(fā)s -li” 命令查看文件的 inode 信息咧擂。硬連接和源文件具有相同的 inode 敛助。
數(shù)據(jù)塊 (Block) : 實(shí)際記錄文件的內(nèi)容,若文件太大時(shí)屋确,會占用多個(gè) block。為了提高目錄訪問效率续扔,Linux 還提供了表達(dá)路徑與 inode 對應(yīng)關(guān)系的 dentry 結(jié)構(gòu)攻臀。它描述了路徑信息并連接到節(jié)點(diǎn) inode,它包括各種目錄信息纱昧,還指向了 inode 和超級塊刨啸。
就像一本書有封面、目錄和正文一樣识脆。在文件系統(tǒng)中设联,超級塊就相當(dāng)于封面,從封面可以得知這本書的基本信息灼捂; inode 塊相當(dāng)于目錄离例,從目錄可以得知各章節(jié)內(nèi)容的位置;而數(shù)據(jù)塊則相當(dāng)于書的正文悉稠,記錄著具體內(nèi)容宫蛆。
Linux 正統(tǒng)的文件系統(tǒng) (如 ext2、3 等) 將硬盤分區(qū)時(shí)會劃分出超級塊的猛、inode Table 區(qū)塊和 data block 數(shù)據(jù)區(qū)域耀盗。一個(gè)文件由一個(gè)超級塊、inode 和數(shù)據(jù)區(qū)域塊組成卦尊。Inode 包含文件的屬性 (如讀寫屬性叛拷、owner 等,以及指向數(shù)據(jù)塊的指針)岂却,數(shù)據(jù)區(qū)域塊則是文件內(nèi)容忿薇。當(dāng)查看某個(gè)文件時(shí),會先從 inode table 中查出文件屬性及數(shù)據(jù)存放點(diǎn)躏哩,再從數(shù)據(jù)塊中讀取數(shù)據(jù)煌恢。這種數(shù)據(jù)存取的方法我們稱為索引式文件系統(tǒng) (indexed allocation)蜗字。 那有沒有其他的慣用文件系統(tǒng)可以比較一下昂⑽? 有的亥贸,那就是我們慣用的閃盤 (閃存)躬窜,閃盤使用的文件系統(tǒng)一般為 FAT 格式。FAT 這種格式的文件系統(tǒng)并沒有 inode 存在炕置,所以 FAT 沒有辦法將這個(gè)文件的所有 block 在一開始就讀取出來荣挨。每個(gè) block 號碼都記錄在前一個(gè) block 當(dāng)中, 其讀取方式有點(diǎn)像下圖所示:
上圖中我們假設(shè)文件的數(shù)據(jù)依序?qū)懭?1->7->4->15 號這四個(gè) block 號碼中朴摊, 但這個(gè)文件系統(tǒng)沒有辦法一口氣就知道四個(gè) block 的號碼默垄,他得要一個(gè)一個(gè)的將 block 讀出后,才會知道下一個(gè) block 在何處甚纲。 如果同一個(gè)文件數(shù)據(jù)寫入的 block 分散的太過厲害時(shí)口锭,則我們的磁盤讀取頭將無法在磁盤轉(zhuǎn)一圈就讀到所有的數(shù)據(jù), 因此磁盤就會多轉(zhuǎn)好幾圈才能完整的讀取到這個(gè)文件的內(nèi)容!
常常會聽到所謂的“碎片整理”吧鹃操?需要碎片整理的原因就是文件寫入的 block 太過于離散了韭寸,此時(shí)文件讀取的效能將會變的很差所致。 這個(gè)時(shí)候可以透過碎片整理將同一個(gè)文件所屬的 blocks 匯整在一起荆隘,這樣數(shù)據(jù)的讀取會比較容易岸魉拧! 想當(dāng)然椰拒,F(xiàn)AT 的文件系統(tǒng)需要經(jīng)常的碎片整理一下晶渠,那么 Ext2 是否需要磁盤重整呢?
由于 Ext2 是索引式文件系統(tǒng)燃观, 基本上不太需要常常進(jìn)行碎片整理的褒脯。但是如果文件系統(tǒng)使用太久, 常常刪除/編輯/新增文件時(shí)仪壮,那么還是可能會造成文件數(shù)據(jù)太過于離散的問題,此時(shí)或許會需要進(jìn)行重整一下的胳徽。 不過积锅,老實(shí)說,鳥哥倒是沒有在 Linux 操作系統(tǒng)上面進(jìn)行過 Ext2/Ext3 文件系統(tǒng)的碎片整理說养盗!似乎不太需要啦缚陷!可以用 ln 命令對一個(gè)已經(jīng)存在的文件再建立一個(gè)新的連接,而不復(fù)制文件的內(nèi)容往核。連接有軟連接和硬連接之分箫爷,軟連接又叫符號連接。
它們各自的特點(diǎn)是: 硬連接: 原文件名和連接文件名都指向相同的物理地址聂儒。目錄不能有硬連接虎锚;硬連接不能跨越文件系統(tǒng)(不能跨越不同的分區(qū))文件在磁盤中只有一個(gè)拷貝,節(jié)省硬盤空間衩婚; 由于刪除文件要在同一個(gè)索引節(jié)點(diǎn)屬于唯一的連接時(shí)才能成功窜护,因此可以防止不必要的誤刪除。 符號連接: 用 ln -s 命令建立文件的符號連接符號連接是 linux 特殊文件的一種非春,作為一個(gè)文件柱徙,它的數(shù)據(jù)是它所連接的文件的路徑名。類似 windows 下的快捷方式奇昙。
可以刪除原有的文件而保存連接文件护侮,沒有防止誤刪除功能。 這一段的的內(nèi)容過于抽象储耐,又是節(jié)點(diǎn)又是數(shù)組的羊初,我已經(jīng)盡量通俗再通俗了,又不好加例子作演示什湘。大家如果還是云里霧里的話凳忙,我也沒有什么辦法了业踏,只有先記住,日后在實(shí)際應(yīng)用中慢慢體會涧卵、理解了勤家。這也是我學(xué)習(xí)的一個(gè)方法吧。
3.6 文件系統(tǒng)在內(nèi)核中的表示 內(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è)指向已打開文件的指針,現(xiàn)在我們明確一下:已打開的文件在內(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)前讀寫位置(file 結(jié)構(gòu)體的成員 f_pos)。在上圖中近尚,進(jìn)程 1 和進(jìn)程 2 都打開同一文件蠕啄,但是對應(yīng)不同的 file 結(jié)構(gòu)體,因此可以有不同的 File Status Flag 和讀寫位置戈锻。file 結(jié)構(gòu)體中比較重要的成員還有 f_count歼跟,表示引用計(jì)數(shù)(Reference Count),后面我們會講到格遭,dup哈街、fork 等系統(tǒng)調(diào)用會導(dǎo)致多個(gè)文件描述符指向同一個(gè) file 結(jié)構(gòu)體,例如有 fd1 和 fd2 都引用同一個(gè) file 結(jié)構(gòu)體拒迅,那么它的引用計(jì)數(shù)就是 2骚秦,當(dāng) close(fd1) 時(shí)并不會釋放 file 結(jié)構(gòu)體,而只是把引用計(jì)數(shù)減到 1璧微,如果再 close(fd2)作箍,引用計(jì)數(shù)就會減到 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 通過系統(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ù)以完成用戶請求。在用戶程序中調(diào)用 lseek葱色、read递宅、write、ioctl、open 等函數(shù)办龄,最終都由內(nèi)核調(diào)用 file_operations 的各成員所指向的內(nèi)核函數(shù)完成用戶請求烘绽。
file_operations 結(jié)構(gòu)體中的 release 成員用于完成用戶程序的 close 請求,之所以叫 release 而不叫 close 是因?yàn)樗灰欢ㄕ娴年P(guān)閉文件俐填,而是減少引用計(jì)數(shù)安接,只有引用計(jì)數(shù)減到 0 才關(guān)閉文件。對于同一個(gè)文件系統(tǒng)上打開的常規(guī)文件來說英融,read盏檐、write 等文件操作的步驟和方法應(yīng)該是一樣的,調(diào)用的函數(shù)應(yīng)該是相同的驶悟,所以圖中的三個(gè)打開文件的 file 結(jié)構(gòu)體指向同一個(gè) file_operations 結(jié)構(gòu)體胡野。如果打開一個(gè)字符設(shè)備文件,那么它的 read痕鳍、write 操作肯定和常規(guī)文件不一樣硫豆,不是讀寫磁盤的數(shù)據(jù)塊而是讀寫硬件設(shè)備,所以 file 結(jié)構(gòu)體應(yīng)該指向不同的 file_operations 結(jié)構(gòu)體笼呆,其中的各種文件操作函數(shù)由該設(shè)備的驅(qū)動程序?qū)崿F(xiàn)熊响。
每個(gè) file 結(jié)構(gòu)體都有一個(gè)指向 dentry 結(jié)構(gòu)體的指針,“dentry”是 directory entry(目錄項(xiàng))的縮寫抄邀。我們傳給 open耘眨、stat 等函數(shù)的參數(shù)的是一個(gè)路徑昼榛,例如/home/akaedu/a境肾,需要根據(jù)路徑找到文件的 inode。為了減少讀盤次數(shù)胆屿,內(nèi)核緩存了目錄的樹狀結(jié)構(gòu)奥喻,稱為 dentry cache,其中每個(gè)節(jié)點(diǎn)是一個(gè) dentry 結(jié)構(gòu)體非迹,只要沿著路徑各部分的 dentry 搜索即可环鲤,從根目錄/找到 home 目錄,然后找到 akaedu 目錄憎兽,然后找到文件 a冷离。dentry cache 只保存最近訪問過的目錄項(xiàng),如果要找的目錄項(xiàng)在 cache 中沒有纯命,就要從磁盤讀到內(nèi)存中西剥。
每個(gè) dentry 結(jié)構(gòu)體都有一個(gè)指針指向 inode 結(jié)構(gòu)體。inode 結(jié)構(gòu)體保存著從磁盤 inode 讀上來的信息亿汞。在上圖的例子中瞭空,有兩個(gè) dentry,分別表示/home/akaedu/a 和/home/akaedu/b,它們都指向同一個(gè) inode咆畏,說明這兩個(gè)文件互為硬鏈接南捂。inode 結(jié)構(gòu)體中保存著從磁盤分區(qū)的 inode 讀上來信息,例如所有者旧找、文件大小溺健、文件類型和權(quán)限位等。每個(gè) inode 結(jié)構(gòu)體都有一個(gè)指向inode_operations 結(jié)構(gòu)體的指針钦讳,后者也是一組函數(shù)指針指向一些完成文件目錄操作的內(nèi)核函數(shù)矿瘦。
和 file_operations 不同,inode_operations 所指向的不是針對某一個(gè)文件進(jìn)行操作的函數(shù)愿卒,而是影響文件和目錄布局的函數(shù)缚去,例如添加刪除文件和目錄、跟蹤符號鏈接等等琼开,屬于同一文件系統(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ū)的超級塊讀上來的信息柜候,例如文件系統(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 的核心概念碌嘀。對于 ext2 文件系統(tǒng)來說涣旨,在磁盤存儲布局上也有 inode 和超級塊的概念,所以很容易和 VFS 中的概念建立對應(yīng)關(guān)系。而另外一些文件系統(tǒng)格式來自非 UNIX 系統(tǒng)(例如 Windows 的 FAT32、NTFS)姚建,可能沒有 inode 或超級塊這樣的概念,但為了能 mount 到 Linux 系統(tǒng)烹棉,也只好在驅(qū)動程序中硬湊一下,在 Linux 下看 FAT32 和 NTFS 分區(qū)會發(fā)現(xiàn)權(quán)限位是錯(cuò)的怯疤,所有文件都是 rwxrwxrwx浆洗,因?yàn)樗鼈儽緛砭蜎]有 inode 和權(quán)限位的概念,這是硬湊出來的旅薄。
3.7 掛載文件系統(tǒng) linux 系統(tǒng)中每個(gè)分區(qū)都是一個(gè)文件系統(tǒng)辅髓,都有自己的目錄層次結(jié)構(gòu)泣崩。linux 會將這些分屬不同分區(qū)的、單獨(dú)的文件系統(tǒng)按一定的方式形成一個(gè)系統(tǒng)的總的目錄層次結(jié)構(gòu)洛口。這里所說的“按一定方式”就是指的掛載矫付。
將一個(gè)文件系統(tǒng)的頂層目錄掛到另一個(gè)文件系統(tǒng)的子目錄上,使它們成為一個(gè)整體第焰,稱為掛載买优。把該子目錄稱為掛載點(diǎn). 例如要讀取硬盤中的一個(gè)格式化好的分區(qū)、光盤或軟件等設(shè)備時(shí)挺举,必須先把這些設(shè)備對應(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)容將不可用偿凭。 對于其他操作系統(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 代碼頁iocharset=XXX 字符集ro 以只讀方式掛載rw 以讀寫方式掛載nouser 使一般用戶無法掛載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)罐寨,所以要你手動 mount:
mount -t vfat /dev/hda5 /mnt/winc(-t vfat 指出這里的文件系統(tǒng) fat32)
現(xiàn)在就可以進(jìn)入/mnt/winc 等目錄讀寫這些文件了。 2. 掛載光盤:# mk /mnt/cdrom
mount -t iso9660 /dev/cdrom /mnt/cdrom (關(guān)盤的名字一般都是 cdrom序矩,這條命令一般都通用)
3. 虛擬機(jī)共享文件夾:例如在 VirtualBox 下鸯绿,主機(jī)是 Windows,Ubuntu 是 Guest簸淀。 共分三步: 1). 首先要安裝虛擬電腦工具包: 在 VirtualBox 的菜單里選擇”設(shè)備”->”安裝虛擬電腦工具包”瓶蝴,你會發(fā)現(xiàn)在 Ubuntu 桌面上多出一個(gè)光盤圖標(biāo),這張光盤默認(rèn)被自動加載到了文件夾/media/cdom0租幕,而且/cdrom 自動指向這個(gè)文件夾舷手。默認(rèn)設(shè)置下文件管理器會自動打開這張光盤,可以看到里面有個(gè)”VBoxLinuxAdditions.run”文件劲绪。打開一個(gè)命令行終端聚霜,依次輸入”cd /cdrom”和”sudo sh ./VBoxLinuxAdditions.run”,不含雙引號珠叔,開始安裝工具包蝎宇。安裝完畢,會用英文提示要重啟 Ubuntu祷安,建議立刻重啟姥芥。重啟后,比較明顯的變化是鼠標(biāo)是共享模式汇鞭,并且剪貼板也和 Windows 共享了凉唐。如果有這些變化,說明虛擬電腦工具包已經(jīng)裝成功霍骄。
2). 下一步設(shè)置共享文件夾台囱。 在共享文件夾設(shè)置窗口中,單擊右側(cè)的”添加一個(gè)共享文件夾”读整,路徑選擇你想要共享的 Windows 文件夾簿训,共享名任取一個(gè)自己喜歡的,比如”myshare”米间,選項(xiàng) read-only 是指是否只允許 ubuntu 讀這個(gè)文件夾强品,請根據(jù)需要選擇這個(gè)選項(xiàng)。
3). 在 ubuntu 下掛載這個(gè)共享文件夾:sudo mount -t vboxsf myshare /media/share 其中”myshare”是之前取的共享文件夾的名字屈糊,”/media/share”是要掛載到的目標(biāo)文件.
3.8 自動掛載 windows 分區(qū) 每次開機(jī)訪問 windows 分區(qū)都要運(yùn)行 mount 命令顯然太煩瑣的榛,為什么訪問其他的 linux 分區(qū)不用使用 mount 命令呢? 其實(shí)逻锐,每次開機(jī)時(shí)夫晌,linux 自動將需要掛載的 linux 分區(qū)掛載上了雕薪。那么我們是不是可以設(shè)定讓 linux 在啟動的時(shí)候也掛載我們希望掛載的分區(qū),如 windows 分區(qū)晓淀,以實(shí)現(xiàn)文件系統(tǒng)的自動掛載呢蹦哼? 這是完全可以的。在/etc 目錄下有個(gè) fstab 文件要糊,它里面列出了 linux 開機(jī)時(shí)自動掛載的文件系統(tǒng)的列表纲熏。我的/etc/fstab 文件如下: /dev/hda2 / ext3 defaults 1 1/dev/hda1 /boot ext3 defaults 1 2none /dev/pts devpts gid=5,mode=620 0 0none /proc proc defaults 0 0none /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)間用逗號分隔鱼填。第五六列不知道是什么意思,還望高手指點(diǎn)毅戈。 在最后兩行是我手工添加的 windows 下的 C苹丸;D 盤,加了 codepage=936 和 iocharset=cp936 參數(shù)以支持中文文件名苇经。參數(shù) defaults 實(shí)際上包含了一組默認(rèn)參數(shù): rw 以可讀寫模式掛載 suid 開啟用戶 ID 和群組 ID 設(shè)置位 dev 可解讀文件系統(tǒng)上的字符或區(qū)塊設(shè)備 exec 可執(zhí)行二進(jìn)制文件 auto 自動掛載 nouser 使一般用戶無法掛載 async 以非同步方式執(zhí)行文件系統(tǒng)的輸入輸出操作 大家可以看到在這個(gè)列表里赘理,光驅(qū)和軟驅(qū)是不自動掛載的,參數(shù)設(shè)置為 noauto扇单。(如果你非要設(shè)成自動掛載商模,你要確保每次開機(jī)時(shí)你的光驅(qū)和軟驅(qū)里都要有盤,呵呵蜘澜。)
3.9 軟連接施流、硬鏈接 可以用 ln 命令對一個(gè)已經(jīng)存在的文件再建立一個(gè)新的連接,而不復(fù)制文件的內(nèi)容鄙信。連接有軟連接和硬連接之分瞪醋,軟連接又叫符號連接。它們各自的特點(diǎn)是:硬連接:是給文件一個(gè)副本装诡,原文件名和連接文件名都指向相同的物理地址银受。目錄不能有硬連接;硬連接不能跨越文件系統(tǒng)(不能跨越不同的分區(qū))文件在磁盤中只有一個(gè)拷貝慎王,節(jié)省硬盤空間蚓土;修改其中一個(gè)宏侍,與其連接的文件同時(shí)被修改赖淤。如果刪除其中任意一個(gè)其余的文件將不受影響。由于刪除文件要在同一個(gè)索引節(jié)點(diǎn)屬于唯一的連接時(shí)才能成功谅河,因此可以防止不必要的誤刪除咱旱。
符號連接(軟連接):用 ln -s 命令建立文件的符號連接符號連接是 linux 特殊文件的一種确丢,作為一個(gè)文件,它的數(shù)據(jù)是它所連接的文件的路徑名吐限。類似 windows 下的快捷方式鲜侥。
當(dāng)然刪除這個(gè)連接,也不會影響到源文件诸典,但對連接文件的使用描函、引用都是直接調(diào)用源文件的。 具體關(guān)系可以看下圖:從圖上可以看出硬鏈接和軟鏈接的區(qū)別: 1:硬鏈接原文件和新文件的 inode 編號一致狐粱。而軟鏈接不一樣舀寓。 2:對原文件刪除,會導(dǎo)致軟鏈接不可用肌蜻,而硬鏈接不受影響互墓。 3:對原文件的修改,軟蒋搜、硬鏈接文件內(nèi)容也一樣的修改篡撵,因?yàn)槎际侵赶蛲粋€(gè)文件內(nèi)容的。
3.10 文件目錄管理命令 磁盤和文件空間 :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
4. linux 應(yīng)用 標(biāo)準(zhǔn)的 Linux 系統(tǒng)一般都有一套都有稱為應(yīng)用程序的程序集私蕾,它包括文本編輯器僵缺、編程語言、X Window踩叭、辦公套件磕潮、Internet 工具和數(shù)據(jù)庫等。
5. linux 內(nèi)核參數(shù)優(yōu)化 內(nèi)核參數(shù)是用戶和系統(tǒng)內(nèi)核之間交互的一個(gè)接口容贝,通過這個(gè)接口自脯,用戶可以在系統(tǒng)運(yùn)行的同時(shí)動態(tài)更新內(nèi)核配置,而這些內(nèi)核參數(shù)是通過 Linux Proc 文件系統(tǒng)存在的斤富。因此膏潮,可以通過調(diào)整 Proc 文件系統(tǒng)達(dá)到優(yōu)化 Linux 性能的目的。