Linux文件系統(tǒng)

1. 存儲設備分區(qū)

一個磁盤可以劃分為很多個扇區(qū)套耕,每個扇區(qū)有512個字節(jié),扇區(qū)是磁盤的基本存儲單元惶凝。將每個扇區(qū)編號吼虎,這樣磁盤就變?yōu)榱艘幌盗芯幜颂柕膲K組合。一個磁盤主要包括引導塊苍鲜,超級塊思灰,i節(jié)點表,文件存儲區(qū)混滔,進程對換區(qū)等洒疚。


  1. 引導塊。引導塊占用第0號物理塊遍坟,不屬于文件系統(tǒng)管轄拳亿;如果系統(tǒng)中有多個文件系統(tǒng),只有跟文件系統(tǒng)才有引導程序放入引導塊中愿伴,其余文件系統(tǒng)都不使用引導塊肺魁。
  2. 超級塊。文件系統(tǒng)的第一個塊被稱為超級塊隔节,這個塊存放的是文件系統(tǒng)本身的結構信息鹅经;比如超級塊記錄了每個區(qū)域的大小寂呛,存放未使用磁盤的信息等。
  3. i節(jié)點表瘾晃。超級塊是下一個部分就是i節(jié)點表贷痪,每個文件對應一個i節(jié)點,每個文件都有一些屬性蹦误,如文件大小劫拢,所有者,創(chuàng)建時間等强胰。這些信息存放在對應的i節(jié)點的結構中舱沧,所有的文件都具有相同大小的i節(jié)點,這些i節(jié)點組成一個i節(jié)點表偶洋,文件系統(tǒng)創(chuàng)建后熟吏,i節(jié)點的數(shù)目是有限的。所以一個文件系統(tǒng)能夠創(chuàng)建的文件也是有限的玄窝。
  4. 文件存儲區(qū)牵寺。文件系統(tǒng)的第3個部分是文件存儲區(qū),文件的內(nèi)容保存在這里恩脂,磁盤所有的塊大小都是一樣帽氓,如果文件大小超過一個塊的大小,則文件會存放在多個次磁盤塊中东亦。
  5. 進程對換區(qū)杏节。磁盤上會開辟一塊區(qū)域, 為對換區(qū)典阵, 當內(nèi)存中的進程需要擴大占用的內(nèi)存空間奋渔, 而當前內(nèi)存空間不足時, 則把某些不常用的進程暫時替換到對換區(qū)中壮啊, 在適用的時候又把他們換進 內(nèi)存嫉鲸,解決內(nèi)存不足和進程之間對內(nèi)存的競爭問題。

2. 文件結構

大部分的Linux文件系統(tǒng)(如ext2歹啼、ext3)規(guī)定玄渗,一個文件由目錄項、inode和數(shù)據(jù)塊組成:目錄項記錄了文件的i節(jié)點號和文件名狸眼;i節(jié)點則包含了文件的基礎信息以及數(shù)據(jù)塊的指針藤树;數(shù)據(jù)塊則包含文件的具體內(nèi)容。

Linux系統(tǒng)中拓萌,目錄(directory)也是一種文件岁钓。打開目錄,實際上就是打開目錄文件。一個目錄文件的內(nèi)容為目錄下所有文件的目錄項的列表屡限,每個目錄項有i節(jié)點號和文件名組成品嚣。因此,通過目錄項即可知道文件的i節(jié)點钧大,進而對文件內(nèi)容進行訪問翰撑。

i節(jié)點中通常存放了一個文件的管理信息和一些基本的系統(tǒng)數(shù)據(jù)(如文件的長度、文件內(nèi)容存放在磁盤上的位置等)啊央。ls -i可以查看當前目錄下所有文件的i節(jié)點號眶诈;stat filename可以查看文件的系統(tǒng)信息,包括iNode瓜饥。其結構如下:

struct dinode
{
 ushort di_mode;  /*文件類型+用戶權限*/
 short di_nlink;  /*文件鏈接數(shù)*/
 ushort di_uid;  /*屬主用戶id*/
 ushort di_gid;  /*屬主用戶組id*/
 off_t di_size;  /*文件大小*/
 char di_addr[40]; /*文件數(shù)據(jù)區(qū)起點地址*/
 time_t di_atime; /*最后訪問時間*/
 time_t di_mtime; /*最后修改時間*/
 time_t di_ctime; /*創(chuàng)建時間*/
}; 

i節(jié)點數(shù)據(jù)結構里面沒有文件名册养,那文件系統(tǒng)是如何管理文件名,i節(jié)點和文件內(nèi)容之間的關系的呢压固?i節(jié)點號存儲在目錄入口的頭兩個字節(jié)中,是文件名字和其內(nèi)容之間的唯一聯(lián)系靠闭。因此目錄中的文件名被稱為鏈帐我,它把目錄層次結構中的名稱連接到它的i節(jié)點,同時也就鏈接到數(shù)據(jù)愧膀。同一個i節(jié)點號可以出現(xiàn)在多個目錄中拦键,rm命令并不是真正刪除i節(jié)點,它刪除的是目錄入口或鏈檩淋。只有當鏈接到文件的最后的鏈消失后芬为,系統(tǒng)才刪除i節(jié)點,也就是文件本身蟀悦。

在Linux中媚朦,我們通過解析路徑,根據(jù)沿途的目錄文件來找到某個文件日戈。目錄中的條目除了所包含的文件名询张,還有對應的inode編號。當我們輸入$cat /var/test.txt時浙炼,Linux將在根目錄文件中找到var這個目錄文件的inode編號份氧,然后根據(jù)inode合成var的數(shù)據(jù)。隨后弯屈,根據(jù)var中的記錄蜗帜,找到text.txt的inode編號,沿著inode中的指針资厉,收集數(shù)據(jù)塊厅缺,合成text.txt的數(shù)據(jù)。整個過程中,我們參考了三個inode:根目錄文件店归,var目錄文件阎抒,text.txt文件的inodes。

假設要創(chuàng)建一個新文件消痛。該新文件占3個磁盤存儲塊且叁。創(chuàng)建文件步驟如下:

  1. 內(nèi)核先找到一塊空閑的i節(jié)點,內(nèi)核找到空的i節(jié)點號為10秩伞,內(nèi)核把文件信息記錄到其中逞带,如文件大小,文件所有者纱新,創(chuàng)建時間等展氓。
  2. 存儲數(shù)據(jù),即文件的內(nèi)容存儲脸爱,由于該文件需要3個數(shù)據(jù)塊遇汞,內(nèi)核從空閑的數(shù)據(jù)塊中找到3個數(shù)據(jù)塊,200簿废,300空入,400。 將內(nèi)容復制到這些塊中族檬。
  3. 記錄分配情況歪赢,數(shù)據(jù)保存到3個數(shù)據(jù)塊中,必須記錄起來单料,以便下次查找埋凯。磁盤分配情況記錄在文件的i節(jié)點的磁盤序列列表中。
  4. 增加文件名和目錄扫尖。新文件的名字為hello.c白对,內(nèi)核將文件的入口添加到目錄文件中,文件名和i節(jié)點號之間的對應關系换怖,將文件名和文件屬性躏结,內(nèi)容聯(lián)系起來,找到文件名就找到文件的i節(jié)點號狰域,通過i節(jié)點號就能夠找到文件的屬性和內(nèi)容媳拴。

3. 硬鏈接與軟鏈接

一般情況下,文件名和inode號是"一一對應"關系兆览,每個inode號對應一個文件名屈溉。但是,Linux系統(tǒng)允許多個文件名指向同一個inode號抬探。這意味著子巾,可以用不同的文件名訪問同樣的內(nèi)容帆赢;對文件內(nèi)容進行修改,會影響到所有文件名线梗;但是椰于,刪除一個文件名,不影響另一個文件名的訪問仪搔。這種情況就被稱為"硬鏈接"(hard link)瘾婿。

ln命令可以創(chuàng)建硬鏈接,語法為:

ln source_file target_file

運行上面這條命令以后烤咧,源文件與目標文件的inode號相同偏陪,都指向同一個inode。inode信息中有一項叫做"鏈接數(shù)"煮嫌,記錄指向該inode的文件名總數(shù)笛谦,這時就會增加1。反過來昌阿,刪除一個文件名饥脑,就會使得inode節(jié)點中的"鏈接數(shù)"減1。當這個值減到0懦冰,表明沒有文件名指向這個inode好啰,系統(tǒng)就會回收這個inode號碼,以及其所對應block區(qū)域儿奶。

這里順便說一下目錄文件的"鏈接數(shù)"。創(chuàng)建目錄時鳄抒,默認會生成兩個目錄項:"."和".."闯捎。前者的inode號就是當前目錄的inode號,等同于當前目錄的"硬鏈接"许溅;后者的inode號就是當前目錄的父目錄的inode號瓤鼻,等同于父目錄的"硬鏈接"。所以贤重,任何一個目錄的"硬鏈接"總數(shù)茬祷,總是等于2加上它的子目錄總數(shù)(含隱藏目錄),這里的2是父目錄對其的“硬鏈接”和當前目錄下的".硬鏈接"。

除了硬鏈接以外并蝗,還有一種特殊情況祭犯。文件A和文件B的inode號雖然不一樣,但是文件A的內(nèi)容是文件B的路徑滚停。讀取文件A時沃粗,系統(tǒng)會自動將訪問者導向文件B。因此键畴,無論打開哪一個文件最盅,最終讀取的都是文件B。這時,文件A就稱為文件B的"軟鏈接"(soft link)或者"符號鏈接(symbolic link)涡贱。l類似于windows系統(tǒng)中的快捷方式咏删。

這意味著,文件A依賴于文件B而存在问词,如果刪除了文件B督函,打開文件A就會報錯:"No such file or directory"。這是軟鏈接與硬鏈接最大的不同:文件A指向文件B的文件名戏售,而不是文件B的inode號碼侨核,文件B的inode"鏈接數(shù)"不會因此發(fā)生變化。

ln -s命令可以創(chuàng)建軟鏈接灌灾,語法為:

ln -s source_file target_file

4. 文件權限

每個文件具有3種權限信息搓译,讀、寫和執(zhí)行锋喜;此外些己,還可以為不同的訪問者賦予不同的權限,有文件所有者嘿般、同組用戶和其他人三種權限組段标。ls -l可以在輸出其他信息的同時,也輸出權限信息炉奴。

例子:-rw-r--r--
-:文件類型(-:文件逼庞;d:目錄;l:軟鏈接文件)
文件只有三種權限:(r:讀瞻赶;w:寫赛糟;x:執(zhí)行)
rw-(u所有者);r--(g所屬組)砸逊;r--(o其他人)

chmod命令用于改變文件的權限璧南,權限可以用兩種方式表示:八進制數(shù)或符號。符號描述可以說明權限的相對改變师逸,但八進制數(shù)更加容易使用司倚。在八進制模式下通過給讀權限賦值4,給寫權限賦值2篓像,給執(zhí)行權限賦值1來改變權限动知。和ls中一樣,3個數(shù)字分別說明文件所有者员辩、組成員和其他成員的權限拍柒。

例子:
chmod 754 junk 
給文件所有者賦予讀、寫和執(zhí)行的權限(4+2+1)屈暗,組成員讀和執(zhí)行權限(4+1)拆讯,其他成員讀權限(4)

除了超級用戶脂男,就只有文件所有者本人才可以改變一個文件的權限,而不考慮權限本身是什么种呐。

5. 目錄層次

因為linux是一個多用戶系統(tǒng)宰翅,制定一個固定的目錄規(guī)劃有助于對系統(tǒng)文件和不同的用戶文件進行統(tǒng)一管理。但就是這一點讓很多從windows轉到linux的初學者感到頭疼爽室。\為根目錄汁讼,在根目錄有很多重要的目錄,其名稱和功能如下所示:

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阔墩,一起剝皮案震驚了整個濱河市嘿架,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啸箫,老刑警劉巖耸彪,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異忘苛,居然都是意外死亡蝉娜,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門扎唾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來召川,“玉大人,你說我怎么就攤上這事胸遇∮牛” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵纸镊,是天一觀的道長倍阐。 經(jīng)常有香客問我,道長薄腻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任届案,我火速辦了婚禮庵楷,結果婚禮上,老公的妹妹穿的比我還像新娘楣颠。我一直安慰自己尽纽,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布童漩。 她就那樣靜靜地躺著弄贿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矫膨。 梳的紋絲不亂的頭發(fā)上差凹,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天期奔,我揣著相機與錄音,去河邊找鬼危尿。 笑死呐萌,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的谊娇。 我是一名探鬼主播肺孤,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼济欢!你這毒婦竟也來了赠堵?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤法褥,失蹤者是張志新(化名)和其女友劉穎茫叭,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挖胃,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡杂靶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了酱鸭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吗垮。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖凹髓,靈堂內(nèi)的尸體忽然破棺而出烁登,到底是詐尸還是另有隱情,我是刑警寧澤蔚舀,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布饵沧,位于F島的核電站,受9級特大地震影響赌躺,放射性物質發(fā)生泄漏狼牺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一礼患、第九天 我趴在偏房一處隱蔽的房頂上張望是钥。 院中可真熱鬧,春花似錦缅叠、人聲如沸悄泥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弹囚。三九已至,卻和暖如春领曼,著一層夾襖步出監(jiān)牢的瞬間鸥鹉,已是汗流浹背蛮穿。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宋舷,地道東北人绪撵。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像祝蝠,于是被迫代替她去往敵國和親音诈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容