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)存頁”(對(duì)于大部分體系結(jié)構(gòu)來說都是 4KB)痢虹。Linux 包括了管理可用內(nèi)存的方式,以及物理和虛擬映射所使用的硬件機(jī)制主儡。
不過內(nèi)存管理要管理的可不止 4KB 緩沖區(qū)奖唯。Linux 提供了對(duì) 4KB 緩沖區(qū)的抽象,例如 slab 分配器糜值。這種內(nèi)存管理模式使用 4KB 緩沖區(qū)為基數(shù)丰捷,然后從中分配結(jié)構(gòu),并跟蹤內(nèi)存頁使用情況寂汇,比如哪些內(nèi)存頁是滿的病往,哪些頁面沒有完全使用,哪些頁面為空骄瓣。這樣就允許該模式根據(jù)系統(tǒng)需要來動(dòng)態(tài)調(diào)整內(nèi)存使用停巷。
為了支持多個(gè)用戶使用內(nèi)存,有時(shí)會(huì)出現(xiàn)可用內(nèi)存被消耗光的情況榕栏。由于這個(gè)原因叠穆,頁面可以移出內(nèi)存并放入磁盤中。這個(gè)過程稱為交換臼膏,因?yàn)轫撁鏁?huì)被從內(nèi)存交換到硬盤上硼被。內(nèi)存管理的源代碼可以在 ./linux/mm 中找到。
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)程對(duì)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í)的進(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ī)制有信號(hào)掀亩、管道舔哪、共享內(nèi)存、信號(hào)量和套接字等槽棍。
內(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ī)制)。
3. 文件系統(tǒng)
和 DOS 等操作系統(tǒng)不同豌拙,Linux 操作系統(tǒng)中單獨(dú)的文件系統(tǒng)并不是由驅(qū)動(dòng)器號(hào)或驅(qū)動(dòng)器名稱(如 A: ?或 C: ?等)來標(biāo)識(shí)的陕悬。相反,和 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ū)動(dòng)程序滴须。邏輯文件系統(tǒng)指Linux所支持的文件系統(tǒng)舌狗,如ext2,fat等,設(shè)備驅(qū)動(dòng)程序指為每一種硬件控制器所編寫的設(shè)備驅(qū)動(dòng)程序模塊扔水。
虛擬文件系統(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 上面,是對(duì)諸如 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)化了對(duì)物理設(shè)備的訪問丑勤。緩沖區(qū)緩存之下是設(shè)備驅(qū)動(dòng)程序华嘹,它實(shí)現(xiàn)了特定物理設(shè)備的接口。
因此法竞,用戶和進(jìn)程不需要知道文件所在的文件系統(tǒng)類型除呵,而只需要象使用 Ext2 ?文件系統(tǒng)中的文件一樣使用它們。
4. 設(shè)備驅(qū)動(dòng)程序
設(shè)備驅(qū)動(dòng)程序是 Linux ?內(nèi)核的主要部分爪喘。和操作系統(tǒng)的其它部分類似颜曾,設(shè)備驅(qū)動(dòng)程序運(yùn)行在高特權(quán)級(jí)的處理器環(huán)境中,從而可以直接對(duì)硬件進(jìn)行操作秉剑,但正因?yàn)槿绱朔汉溃魏我粋€(gè)設(shè)備驅(qū)動(dòng)程序的錯(cuò)誤都可能導(dǎo)致操作系統(tǒng)的崩潰。設(shè)備驅(qū)動(dòng)程序?qū)嶋H控制操作系統(tǒng)和硬件設(shè)備之間的交互侦鹏。
設(shè)備驅(qū)動(dòng)程序提供一組操作系統(tǒng)可理解的抽象接口完成和操作系統(tǒng)之間的交互诡曙,而與硬件相關(guān)的具體操作細(xì)節(jié)由設(shè)備驅(qū)動(dòng)程序完成。一般而言略水,設(shè)備驅(qū)動(dòng)程序和設(shè)備的控制芯片有關(guān)价卤,例如,如果計(jì)算機(jī)硬盤是 SCSI ?硬盤渊涝,則需要使用 SCSI ?驅(qū)動(dòng)程序慎璧,而不是 IDE 驅(qū)動(dòng)程序床嫌。
5.網(wǎng)絡(luò)接口(NET)
提供了對(duì)各種網(wǎng)絡(luò)標(biāo)準(zhǔn)的存取和各種網(wǎng)絡(luò)硬件的支持。網(wǎng)絡(luò)接口可分為網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)驅(qū)動(dòng)程序胸私。網(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ū)動(dòng)程序組成捉貌。網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序負(fù)責(zé)與硬件設(shè)備通訊,每一種可能的硬件設(shè)備都有相應(yīng)的設(shè)備驅(qū)動(dòng)程序暖侨。
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:是對(duì)Bourne SHell的發(fā)展套腹,在大部分內(nèi)容上與Bourne Shell兼容绪抛。
4.C Shell:是SUN公司Shell的BSD版本。
3 . linux 文件系統(tǒng)
文件系統(tǒng)是文件存放在磁盤等存儲(chǔ)設(shè)備上的組織方法电禀。Linux系統(tǒng)能支持多種目前流行的文件系統(tǒng)幢码,如EXT2、 EXT3尖飞、 FAT症副、 FAT32、 VFAT和ISO9660政基。
3.1 文件類型
Linux下面的文件類型主要有:
1) 普通文件:C語言元代碼贞铣、SHELL腳本、二進(jìn)制的可執(zhí)行文件等沮明。分為純文本和二進(jìn)制辕坝。
2) 目錄文件:目錄,存儲(chǔ)文件的唯一地方荐健。
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.2Linux目錄
文件結(jié)構(gòu)是文件存放在磁盤等存貯設(shè)備上的組織方法扛稽。主要體現(xiàn)在對(duì)文件和目錄的組織上吁峻。
目錄提供了管理文件的一個(gè)方便而有效的途徑。
Linux使用標(biāo)準(zhǔn)的目錄結(jié)構(gòu)在张,在安裝的時(shí)候用含,安裝程序就已經(jīng)為用戶創(chuàng)建了文件系統(tǒng)和完整而固定的目錄組成形式,并指定了每個(gè)目錄的作用和其中的文件類型帮匾。
完整的目錄樹可劃分為小的部分啄骇,這些小部分又可以單獨(dú)存放在自己的磁盤或分區(qū)上。這樣瘟斜,相對(duì)穩(wěn)定的部分和經(jīng)常變化的部分可單獨(dú)存放在不同的分區(qū)中缸夹,從而方便備份或系統(tǒng)管理。目錄樹的主要部分有 root螺句、/usr虽惭、/var、/home ?等(圖2) 蛇尚。這樣的布局可方便在 Linux 計(jì)算機(jī)之間共享文件系統(tǒng)的某些部分芽唇。
圖2
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ù)存儲(chǔ)抹估。
二缠黍、Linux下硬盤分區(qū)的標(biāo)識(shí)
硬盤分區(qū)的標(biāo)識(shí)一般使用/dev/hd[a-z]X或者/dev/sd[a-z]X來標(biāo)識(shí),其中[a-z]代表硬盤號(hào)药蜻,X代表硬盤內(nèi)的分區(qū)號(hào)瓷式。
整塊硬盤分區(qū)的塊號(hào)標(biāo)識(shí):Linux下用hda、hdb语泽、sda贸典、sdb 等來標(biāo)識(shí)不同的硬盤;
其中:
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)識(shí)不同的分區(qū)庸队。其中,字母a 代表第一塊硬盤闯割,b代表第二塊硬盤彻消,依次類推。而數(shù)字1 代表一塊硬盤的第一個(gè)分區(qū)宙拉、2 代表第二個(gè)分區(qū)宾尚,依次類推。1 到4 對(duì)應(yīng)的是主分區(qū)(Primary Partition)或擴(kuò)展分區(qū)(Extension Partition)。從5開始煌贴,對(duì)應(yīng)的都是硬盤的邏輯分區(qū)(Logical Partition)御板。一塊硬盤即使只有一個(gè)主分區(qū),邏輯分區(qū)也是從5開始編號(hào)的牛郑,這點(diǎn)應(yīng)特別注意怠肋。
總結(jié):一個(gè)硬盤分區(qū)首先要大確認(rèn)在哪個(gè)硬盤,然后再確認(rèn)它所在硬盤內(nèi)的哪個(gè)分區(qū)淹朋。
對(duì)于/dev/hda 類似的表示方法笙各,也并不寞生吧;我們?cè)贚inux通過fdisk -l 就可以查到硬盤是/dev/hda還是/dev/hdb瑞你;
Shell
[root@localhost~]# fdisk -l
Disk/dev/hda:80.0GB,80026361856bytes
255heads,63sectors/track,9729cylinders
Units=cylindersof16065*512=8225280bytes
DeviceBootStartEndBlocksIdSystem
/dev/hda1*19707791493+7HPFS/NTFS
/dev/hda2971972970356667+5Extended
/dev/hda5971291515623181bW95FAT32
/dev/hda6291641319767488+83linux
/dev/hda7413255901171938683linux
/dev/hda8559168069767488+83linux
/dev/hda9680796572290062683linux
/dev/hda1096589729578308+82linuxswap/Solaris
請(qǐng)注意第一行酪惭, 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 啟動(dòng)的配置文件和腳本
/home 用戶主目錄的基點(diǎn)慨灭,比如用戶user的主目錄就是/home/user,可以用~user表示
/lib 標(biāo)準(zhǔn)程序設(shè)計(jì)庫球及,又叫動(dòng)態(tài)鏈接共享庫氧骤,作用類似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ī)而留下“無家可歸”的文件(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 超級(jí)用戶的一些管理程序
/usr/doc linux文檔
/usr/include linux下開發(fā)和編譯應(yīng)用程序所需要的頭文件
/usr/lib 常用的動(dòng)態(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會(huì)將這些分屬不同分區(qū)的占贫、單獨(dú)的文件系統(tǒng)按一定的方式形成一個(gè)系統(tǒng)的總的目錄層次結(jié)構(gòu)。一個(gè)操作系統(tǒng)的運(yùn)行離不開對(duì)文件的操作先口,因此必然要擁有并維護(hù)自己的文件系統(tǒng)型奥。
1.文件系統(tǒng)類型:
ext2: 早期linux中常用的文件系統(tǒng)
ext3: ext2的升級(jí)版,帶日志功能
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)是不會(huì)認(rèn)識(shí) 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)素标! 所以說称诗,目前我們?cè)诟袷交瘯r(shí)已經(jīng)不再說成針對(duì) 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)通常會(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ū)來說俺孙,在被指定為相應(yīng)的文件系統(tǒng)后辣卒,整個(gè)分區(qū)被分為 1024,2048 和 4096 字節(jié)大小的塊睛榄。根據(jù)塊使用的不同荣茫,可分為:
超級(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í)荔睹,會(huì)占用多個(gè) block。為了提高目錄訪問效率言蛇,Linux 還提供了表達(dá)路徑與 inode 對(duì)應(yīng)關(guān)系的 dentry 結(jié)構(gòu)僻他。它描述了路徑信息并連接到節(jié)點(diǎn) inode,它包括各種目錄信息腊尚,還指向了 inode 和超級(jí)塊吨拗。
就像一本書有封面、目錄和正文一樣。在文件系統(tǒng)中劝篷,超級(jí)塊就相當(dāng)于封面哨鸭,從封面可以得知這本書的基本信息; inode 塊相當(dāng)于目錄娇妓,從目錄可以得知各章節(jié)內(nèi)容的位置兔跌;而數(shù)據(jù)塊則相當(dāng)于書的正文,記錄著具體內(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包含文件的屬性(如讀寫屬性蓬戚、owner等夸楣,以及指向數(shù)據(jù)塊的指針),數(shù)據(jù)區(qū)域塊則是文件內(nèi)容子漩。當(dāng)查看某個(gè)文件時(shí)豫喧,會(huì)先從inode table中查出文件屬性及數(shù)據(jù)存放點(diǎn),再從數(shù)據(jù)塊中讀取數(shù)據(jù)幢泼。
ext2文件系統(tǒng)示意圖
我們將 inode 與 block 區(qū)塊用圖解來說明一下紧显,如下圖所示,文件系統(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ù)此來排列磁盤的閱讀順序招驴,可以一口氣將四個(gè) block 內(nèi)容讀出來篙程! 那么數(shù)據(jù)的讀取就如同下圖中的箭頭所指定的模樣了。
圖 inode/block 數(shù)據(jù)存取示意圖
這種數(shù)據(jù)存取的方法我們稱為索引式文件系統(tǒng)(indexed allocation)别厘。那有沒有其他的慣用文件系統(tǒng)可以比較一下笆觥? 有的触趴,那就是我們慣用的閃盤(閃存)氮发,閃盤使用的文件系統(tǒng)一般為 FAT 格式。FAT 這種格式的文件系統(tǒng)并沒有 inode 存在雕蔽,所以 FAT 沒有辦法將這個(gè)文件的所有 block 在一開始就讀取出來折柠。每個(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)沒有辦法一口氣就知道四個(gè) block 的號(hào)碼前塔,他得要一個(gè)一個(gè)的將 block 讀出后,才會(huì)知道下一個(gè) block 在何處承冰。 如果同一個(gè)文件數(shù)據(jù)寫入的 block 分散的太過厲害時(shí)华弓,則我們的磁盤讀取頭將無法在磁盤轉(zhuǎn)一圈就讀到所有的數(shù)據(jù), 因此磁盤就會(huì)多轉(zhuǎn)好幾圈才能完整的讀取到這個(gè)文件的內(nèi)容困乒!
常常會(huì)聽到所謂的“碎片整理”吧寂屏?需要碎片整理的原因就是文件寫入的 block 太過于離散了,此時(shí)文件讀取的效能將會(huì)變的很差所致娜搂。?這個(gè)時(shí)候可以透過碎片整理將同一個(gè)文件所屬的 blocks 匯整在一起迁霎,這樣數(shù)據(jù)的讀取會(huì)比較容易啊百宇!?想當(dāng)然爾考廉,F(xiàn)AT 的文件系統(tǒng)需要經(jīng)常的碎片整理一下,那么 Ext2 是否需要磁盤重整呢携御?
由于 Ext2 是索引式文件系統(tǒng)昌粤,基本上不太需要常常進(jìn)行碎片整理的。但是如果文件系統(tǒng)使用太久啄刹, 常常刪除/編輯/新增文件時(shí)涮坐,那么還是可能會(huì)造成文件數(shù)據(jù)太過于離散的問題,此時(shí)或許會(huì)需要進(jìn)行重整一下的誓军。 不過袱讹,老實(shí)說,鳥哥倒是沒有在 Linux 操作系統(tǒng)上面進(jìn)行過 Ext2/Ext3 文件系統(tǒng)的碎片整理說谭企!似乎不太需要啦廓译!^_^
可以用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下的快捷方式甚带。
可以刪除原有的文件而保存連接文件她肯,沒有防止誤刪除功能。
這一段的的內(nèi)容過于抽象鹰贵,又是節(jié)點(diǎn)又是數(shù)組的晴氨,我已經(jīng)盡量通俗再通俗了,又不好加例子作演示碉输。大家如果還是云里霧里的話籽前,我也沒有什么辦法了,只有先記住敷钾,日后在實(shí)際應(yīng)用中慢慢體會(huì)枝哄、理解了。這也是我學(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都打開同一文件,但是對(duì)應(yīng)不同的file結(jié)構(gòu)體舶掖,因此可以有不同的File Status Flag和讀寫位置球昨。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通過系統(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)上打開的常規(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ū)動(dòng)程序?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所指向的不是針對(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í)塊讀上來的信息龙助,例如文件系統(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)來說,在磁盤存儲(chǔ)布局上也有inode和超級(jí)塊的概念庐船,所以很容易和VFS中的概念建立對(duì)應(yīng)關(guān)系银酬。而另外一些文件系統(tǒng)格式來自非UNIX系統(tǒng)(例如Windows的FAT32、NTFS)筐钟,可能沒有inode或超級(jí)塊這樣的概念揩瞪,但為了能mount到Linux系統(tǒng),也只好在驅(qū)動(dòng)程序中硬湊一下篓冲,在Linux下看FAT32和NTFS分區(qū)會(huì)發(fā)現(xiàn)權(quán)限位是錯(cuò)的李破,所有文件都是rwxrwxrwx宠哄,因?yàn)樗鼈儽緛砭蜎]有inode和權(quán)限位的概念,這是硬湊出來的嗤攻。
3.6 ?掛載文件系統(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)的頂層目錄掛到另一個(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 代碼頁
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),所以要你手動(dò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è)備”->”安裝虛擬電腦工具包”,你會(huì)發(fā)現(xiàn)在Ubuntu桌面上多出一個(gè)光盤圖標(biāo)茸炒,這張光盤默認(rèn)被自動(dòng)加載到了文件夾/media/cdom0愕乎,而且/cdrom自動(dòng)指向這個(gè)文件夾。默認(rèn)設(shè)置下文件管理器會(huì)自動(dòng)打開這張光盤壁公,可以看到里面有個(gè)”VBoxLinuxAdditions.run”文件感论。打開一個(gè)命令行終端,依次輸入”cd /cdrom”和”sudo sh ./VBoxLinuxAdditions.run”紊册,不含雙引號(hào)比肄,開始安裝工具包。安裝完畢囊陡,會(huì)用英文提示要重啟Ubuntu芳绩,建議立刻重啟。重啟后关斜,比較明顯的變化是鼠標(biāo)是共享模式示括,并且剪貼板也和Windows共享了。如果有這些變化痢畜,說明虛擬電腦工具包已經(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)文件.
3.7 ?自動(dòng)掛載windows分區(qū)
每次開機(jī)訪問windows分區(qū)都要運(yùn)行mount命令顯然太煩瑣惨驶,為什么訪問其他的linux分區(qū)不用使用mount命令呢?
其實(shí)敛助,每次開機(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開機(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 以可讀寫模式掛載
suid 開啟用戶ID和群組ID設(shè)置位
dev 可解讀文件系統(tǒng)上的字符或區(qū)塊設(shè)備
exec 可執(zhí)行二進(jìn)制文件
auto 自動(dòng)掛載
nouser 使一般用戶無法掛載
async 以非同步方式執(zhí)行文件系統(tǒng)的輸入輸出操作
大家可以看到在這個(gè)列表里,光驅(qū)和軟驅(qū)是不自動(dòng)掛載的辑甜,參數(shù)設(shè)置為noauto衰絮。(如果你非要設(shè)成自動(dòng)掛載,你要確保每次開機(jī)時(shí)你的光驅(qū)和軟驅(qū)里都要有盤磷醋,呵呵猫牡。)
3.8 .軟連接、硬鏈接
可以用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)容的楼吃。
3.9.文件目錄管理命令
磁盤和文件空間 :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í)動(dòng)態(tài)更新內(nèi)核配置,而這些內(nèi)核參數(shù)是通過Linux Proc文件系統(tǒng)存在的况既。因此这溅,可以通過調(diào)整Proc文件系統(tǒng)達(dá)到優(yōu)化Linux性能的目的。