1 目錄與文件的本質(zhì)
Linux系統(tǒng)的文件數(shù)據(jù)除了文件實(shí)際內(nèi)容外,還含有文件權(quán)限(rwx)與文件屬性(所有者、群組、時(shí)間參數(shù)等)等非常多的屬性。文件系統(tǒng)通常會(huì)將這兩部分的數(shù)據(jù)分別存放在不同的塊。實(shí)際數(shù)據(jù)放到data block塊中,若文件太大時(shí),會(huì)占用多個(gè)block。權(quán)限與屬性放置到inode中,一個(gè)文件占用一個(gè)inode,同時(shí)記錄此文件的數(shù)據(jù)所在的 block號(hào)碼。另外,還有一個(gè)超級(jí)塊(superblock)會(huì)記錄整個(gè)文件系統(tǒng)中的整體信息,包括inode與block的總量、使用量、剩余量等。
由于每個(gè)inode與block號(hào)碼都有編號(hào),而每個(gè)文件都會(huì)占用一個(gè) inode,inode內(nèi)則有文件數(shù)據(jù)放置的block號(hào)碼。因此,我們可以知道,如果能夠找到文件的inode的話(huà),那么自然就會(huì)知道這個(gè)文件所放置數(shù) 據(jù)的block號(hào)碼,當(dāng)然也就能夠讀出該文件的實(shí)際數(shù)據(jù)了。這是個(gè)比較有效率的做法,因?yàn)槿绱艘粊?lái)我們的磁盤(pán)就能夠在短時(shí)間內(nèi)讀取出全部的數(shù)據(jù),讀寫(xiě)性能 比較好。
當(dāng)我們?cè)贚inux下的ext2文件系統(tǒng)新建一個(gè)目錄時(shí),ext2會(huì)分配一個(gè) inode與至少一塊block給該目錄。其中,inode記錄該目錄的相關(guān)權(quán)限與屬性,并可記錄分配到的那塊block號(hào)碼。而block則是記錄在這 個(gè)目錄下的文件名與該文件名占用的inode號(hào)碼數(shù)據(jù)。這就是為什么在Linux下叫目錄而不像在window下叫文件夾,因?yàn)樗_實(shí)就是一個(gè)索引。而且 這也解釋了為什么明明所有文件都是在根目錄下,為什么卻還可以放在不同的磁盤(pán)?因?yàn)槟夸浥c其下的子目錄和文件,就不是包含與被包含的關(guān)系,而只是一個(gè)索引。
2 Linux下文件的隱藏屬性
顯然,這里要說(shuō)的并不是rwx那9個(gè)權(quán)限,而是要聊chattr和lsattr這兩個(gè)命令。這兩個(gè)命令在只能在Ext2/Ext3的文件系統(tǒng)上面生效,其他文件系統(tǒng)可能就無(wú)法支持了。
2.1 chattr 設(shè)置文件的隱藏屬性
#chattr [+-=] [ASacdistu] 文件或目錄
參數(shù):
+ :增加某一個(gè)特殊參數(shù),其他原本存在參數(shù)則不動(dòng)
- :刪除某一個(gè)特殊參數(shù),其他原本存在參數(shù)則不動(dòng)
= :僅有后面的參數(shù)
A :設(shè)置了A這個(gè)屬性時(shí),此文件(或目錄)的訪問(wèn)時(shí)間atime將不會(huì)被修改??杀苊釯/O較慢的機(jī)器過(guò)度訪問(wèn)磁盤(pán)。
S :一般文件是異步格式寫(xiě)入磁盤(pán)的,如果加上S這個(gè)屬性時(shí),對(duì)文件進(jìn)行任何修改,將會(huì)“同步”寫(xiě)入磁盤(pán)中。
a :設(shè)置a之后,這個(gè)文件將只能增加數(shù)據(jù),而不能刪除也不能修改數(shù)據(jù),只有root才能設(shè)置這個(gè)屬性。
c :這個(gè)屬性設(shè)置之后,講會(huì)自動(dòng)將此文件壓縮,在讀取的時(shí)候會(huì)自動(dòng)解壓縮,但是在存儲(chǔ)的時(shí)候,將會(huì)先進(jìn)行壓縮后再存儲(chǔ)。
d :當(dāng)dump程序被執(zhí)行的時(shí)候,設(shè)置d屬性將可使該文件(或目錄)不會(huì)被dump備份。
i :它可以讓一個(gè)文件不能被刪除、改名,設(shè)置連接也無(wú)法寫(xiě)入或添加數(shù)據(jù)。只有root才能設(shè)置這個(gè)屬性。
s :當(dāng)文件設(shè)置了s屬性時(shí),如果這個(gè)文件被刪除,它將會(huì)被完全從這個(gè)硬盤(pán)空間中刪除。
u :與s相反,當(dāng)使用u來(lái)配置文件時(shí),如果該文件被刪除了,則數(shù)據(jù)內(nèi)容其實(shí)還存在磁盤(pán)中。
2.2 lsattr 顯示文件隱藏屬性
#lsattr [-adR] 文件或目錄
參數(shù):
-a :將隱藏屬性也顯示出來(lái)
-d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內(nèi)的文件名
-R :連同子目錄的數(shù)據(jù)也一并列出
3 內(nèi)存交換空間(swap)
安裝Linux時(shí)需要兩個(gè)分區(qū),一個(gè)是根目錄,另外一個(gè)就是swap(內(nèi)存交換空間)。swap的功能就是在應(yīng)付物理內(nèi)存不足的情況下所造成的內(nèi)存擴(kuò)展記錄的功能。一般來(lái)說(shuō),如果硬件的配備足夠的話(huà),那么swap應(yīng)該不會(huì)被我們的系統(tǒng)所使用到。
CPU所讀取的數(shù)據(jù)都來(lái)自?xún)?nèi)存,當(dāng)內(nèi)存不足的時(shí)候,為了讓后續(xù)的程序可以順利運(yùn)行,因此在內(nèi)存中暫不使用的程序與數(shù)據(jù)就會(huì)被挪到swap中了。此時(shí)內(nèi)存就會(huì)空出來(lái)給需要執(zhí)行的程序加載。swap是用硬盤(pán)來(lái)暫時(shí)放置內(nèi)存中的信息。
目前主機(jī)的內(nèi)存都很大,因此在個(gè)人使用上,不設(shè)置swap也沒(méi)有太大的問(wèn)題。不過(guò)服務(wù)器可就不同了,猶豫不會(huì)知道何時(shí)會(huì)有大量來(lái)自網(wǎng)絡(luò)的請(qǐng)求,因此最好能夠預(yù)留一些swap來(lái)緩沖一下系統(tǒng)的內(nèi)存用量。
新建swap分區(qū)的方法:
1,分區(qū):先使用fdisk在磁盤(pán)中分出一個(gè)分區(qū)給系統(tǒng)作為swap。由于Linux的fdisk默認(rèn)會(huì)將分區(qū)的ID設(shè)置為L(zhǎng)inux的文件系統(tǒng),所以可能還得要設(shè)置一下system ID。
2,格式化:利用新建swap格式的mkswap 設(shè)備文件名就能夠格式化該分區(qū)成為swap格式。
3,使用:最后將該swap設(shè)備啟動(dòng),方法為swapon 設(shè)備文件名。
4,查看:最終通過(guò)free這個(gè)命令來(lái)查看一下內(nèi)存的使用情況。
4 內(nèi)核結(jié)構(gòu)的區(qū)分
單內(nèi)核與微內(nèi)核是具有代表性的內(nèi)核結(jié)構(gòu)。
單內(nèi)核——所有內(nèi)核服務(wù)均在內(nèi)核空間中存在并運(yùn)行。直接調(diào)出內(nèi)核服務(wù)。
4.1 基于單內(nèi)核的操作系統(tǒng):
用戶(hù)空間包含:應(yīng)用、庫(kù)
內(nèi)核包含:文件系統(tǒng)、進(jìn)程間通信、I/O和設(shè)備管理、基本進(jìn)程管理等。
微內(nèi)核——內(nèi)核服務(wù)中一部分位于用戶(hù)空間。利用消息傳遞方式調(diào)用內(nèi)核服務(wù)。
4.2 基于微內(nèi)核的操作系統(tǒng):
用戶(hù)空間包含:應(yīng)用、庫(kù)、文件系統(tǒng)、進(jìn)程服務(wù)器、調(diào)頁(yè)程序、驅(qū)動(dòng)程序等。
內(nèi)核包含:微內(nèi)核
內(nèi)核結(jié)構(gòu)的區(qū)分標(biāo)準(zhǔn)是:所有內(nèi)核服務(wù)是否集成在內(nèi)核空間運(yùn)行。
2.6版Linux內(nèi)核雖然具有支持模塊的模塊化內(nèi)核,但模塊也是運(yùn)行在內(nèi)核空間的,因此仍為單內(nèi)核。
參考書(shū)籍:
《鳥(niǎo)哥的Linux私房菜》
《ARM Linux內(nèi)核源碼剖析》