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