學(xué)習(xí)Unix文件系統(tǒng)基礎(chǔ)
學(xué)習(xí)Unix,我們要從基礎(chǔ)開始。這里,我們就來學(xué)習(xí)下Unix文件系統(tǒng)基礎(chǔ)。Unix內(nèi)核有兩個(gè)基本的子系統(tǒng):Unix文件子系統(tǒng)和進(jìn)程控制子系統(tǒng)。Unix文件子系統(tǒng)負(fù)責(zé)文件的相關(guān)操作和管理進(jìn)程控制子系統(tǒng)則負(fù)責(zé)與進(jìn)程相關(guān)的操作與管理。
內(nèi)核文件子系統(tǒng)
它主要負(fù)責(zé)訪問和管理系統(tǒng)及用戶文件。Unix系統(tǒng)只是把文件看作是一組數(shù)據(jù)字節(jié),對(duì)它們的解釋是通過系統(tǒng)提供的某種結(jié)構(gòu)進(jìn)行的。Unix內(nèi)核文件子系統(tǒng)使用了三個(gè)數(shù)據(jù)結(jié)構(gòu)來描述每一個(gè)文件以及訪問文件的途徑,它們分別是與具體進(jìn)程相關(guān)的文件描述符表項(xiàng),與內(nèi)核相關(guān)的文件表項(xiàng),與每個(gè)文件相關(guān)的索引節(jié)點(diǎn)。
文件描述符表:在內(nèi)核中,對(duì)應(yīng)于每個(gè)進(jìn)程,都有一個(gè)文件描述符表,用來標(biāo)識(shí)改進(jìn)程要打開的所有文件。該表中的每一項(xiàng)對(duì)應(yīng)一個(gè)進(jìn)程打開的文件,每一項(xiàng)中有一個(gè)稱為文件描述符(file description)的整型數(shù)用來標(biāo)識(shí)文件。
文件表:文件表中的每一項(xiàng)對(duì)應(yīng)于內(nèi)核中打開的文件,主要描述用戶對(duì)文件的訪問權(quán)限及讀寫起始地址。索引節(jié)點(diǎn)(Index Node,又稱inode)文件的具體信息是通過索引節(jié)點(diǎn)來描述的。根據(jù)所在位置的不同,inode分為磁盤inode和內(nèi)存inode。
進(jìn)程要訪問文件,必須通過上述三種數(shù)據(jù)結(jié)構(gòu)來進(jìn)行,過程具體如下:
進(jìn)程先訪問與它對(duì)應(yīng)的文件描述符表,通過它訪問文件表,進(jìn)而訪問inode表中與文件相關(guān)的inode表項(xiàng),***通過inode去訪問文件,如下圖所示。
文件類型
Unix文件類型有許多種,當(dāng)用戶使用ls –l filename命令時(shí),所列內(nèi)容的***項(xiàng)的***位就標(biāo)識(shí)了文件系統(tǒng)的類型。
正規(guī)文件(regular file):又稱為普通文件,在使用ls –l時(shí),所列內(nèi)容的***項(xiàng)的***位為“-”。系統(tǒng)中源碼、文本和shell程序等都是正規(guī)文件。
目錄文件:在Unix系統(tǒng)中,目錄是一種特殊的文件,它的內(nèi)容是所包含的文件的信息:文件的位置、大小、文件的創(chuàng)建時(shí)間等。使用ls –l時(shí),***項(xiàng)***列的標(biāo)識(shí)為“d”。目錄文件只能由操作系統(tǒng)或?qū)iT的程序來讀取和修改,普通用戶無法直接訪問目錄文件,只能讀取目錄文件的內(nèi)容。
套接字:socket是Unix系統(tǒng)中用于計(jì)算機(jī)之間相互通信的應(yīng)用程序的接口它將完成網(wǎng)絡(luò)上的I/O操作。在Unix系統(tǒng)中,socket并不是一個(gè)真正的文件,但是它被抽象成一個(gè)文件,使用ls –l命令時(shí),***項(xiàng)***位的標(biāo)識(shí)為“s”。
設(shè)備文件(device file):Unix系統(tǒng)為了實(shí)現(xiàn)與外設(shè)相關(guān)的操作,提供設(shè)備文件專門負(fù)責(zé)內(nèi)存與外設(shè)間的I/O操作。Unix系統(tǒng)中有兩種設(shè)備文件:字符設(shè)備文件(character device file)和塊設(shè)備文件(block device file)。
字符設(shè)備文件用于與外設(shè)進(jìn)行無緩沖的I/O操作,使用ls –l時(shí),其***項(xiàng)***位標(biāo)識(shí)為“e”;塊設(shè)備文件用于與外設(shè)進(jìn)行有緩沖的I/O操作,使用ls –l時(shí),其***項(xiàng)的***位標(biāo)識(shí)為“b”。一般來說,系統(tǒng)中的磁盤驅(qū)動(dòng)器(包括硬盤和CDROM)為塊設(shè)備文件,磁帶驅(qū)動(dòng)器和終端驅(qū)動(dòng)器為字符設(shè)備文件。鍵盤和顯示器為系統(tǒng)的兩個(gè)標(biāo)準(zhǔn)輸入/輸出的字符設(shè)備文件。
有名管道(FIFO文件):Unix系統(tǒng)提供了使用管道實(shí)現(xiàn)進(jìn)程間通信的方法。它是一個(gè)臨時(shí)文件,嚴(yán)格遵守先進(jìn)先出的原則,因此又稱為FIFO文件。在使用ls –l時(shí),***項(xiàng)***位的標(biāo)識(shí)為“p”。
鏈接(link):系統(tǒng)中的鏈接是一個(gè)已經(jīng)存在的文件的另一個(gè)名字,它不復(fù)制文件的內(nèi)容。有兩種鏈接方式,一種是硬鏈接(hard link),另一種是符號(hào)鏈接(symbolic link),又稱軟鏈接。硬鏈接和原有文件是存儲(chǔ)在同一物理地址的兩個(gè)不同的名字,因此硬鏈接是相互的;符號(hào)鏈接的內(nèi)容只是一個(gè)所鏈接文件的文件名,在使用ls –l時(shí),符號(hào)鏈接的***項(xiàng)的***位為“l”。
在這里,我們關(guān)于Unix文件的知識(shí),我們就學(xué)習(xí)這些簡單的知識(shí)。
【編輯推薦】