Linux文件系統
對于計算機來說,所謂的數據就是0和1的序列。這樣的一個序列可以存儲在內存中,但內存 中的數據會隨著關機而消失。為了將數據長久保存,我們把數據存儲在光盤或者硬盤中。根據我們的需要,我們通常會將數據分開保存到文件這樣一個個的小單位中 (所謂的小,是相對于所有的數據而言)。但如果數據只能組織為文件的話,而不能分類的話,文件還是會雜亂無章。每次我們搜索某一個文件,就要一個文件又一 個文件地檢查,太過麻煩。文件系統(file system)是就是文件在邏輯上組織形式,它以一種更加清晰的方式來存放各個文件。
1. 路徑與文件簡介
文件被組織到文件系統(file system)中,通常會成為一個樹狀(tree)結構。Linux有一個根目錄\, 也就是樹狀結構的最頂端。這個樹的分叉的最末端都代表一個文件,而這個樹的分叉處則是一個目錄(directory, 相當于我們在windows界面中看到的文件夾)。在圖1中看到的是整個的一個文件樹。如果我們從該樹中截取一部分,比如說從目錄vamei開始往下,實際上也構成一個文件系統。
要找到一個文件,除了要知道該文件的文件名,還需要知道從樹根到該文件的所有目錄名。從根目錄開始的所有途徑的目錄名和文件名構成一個路徑(path)。比如說,我們在Linux中尋找一個文件file.txt,不僅要知道文件名(file.txt),還要知道完整路徑,也就是絕對路徑(/home /vamei/doc/file.txt)。從根目錄錄\, 也就是樹狀結構的最頂端出發,經過目錄home, vamei, doc,最終才看到文件file.txt。整個文件系統層層分級(hierarchy),vamei是home的子目錄,而home是vamei的父目 錄。
在Linux中,我們用ls命令來顯示目錄下的所有文件,比如 $ls /home/vamei/doc
圖1 文件樹
(如該圖中所示的文件系統,即綠色構成的樹。最頂端的根目錄(\),沿紅色箭頭標出的路徑,我們最終找到文件file.txt。)
2. 目錄
在Linux系統中,目錄也是一種文件。所以/home/vamei是指向目錄文件vamei的絕對路徑。
這個文件中至少包含有以下條目:
. 指向當前目錄
.. 指向父目錄
除此之外,目錄文件中還包含有屬于該目錄的文件的文件名,比如vamei中就還要有如下條目,指向屬于該目錄的文件:
doc
movie
photo
Linux解釋一個絕對路徑的方式如下:先找到根目錄文件,從該目錄文件中讀取home目錄文件的位置,然后從home文件中讀取vamei的位置……直到找到目錄doc中的file.txt的位置。
由于目錄文件中都有.和..的條目,我們可以在路徑中加入.或者..來表示當前目錄或者父目錄,比如/home/vamei/doc/..與/home/vamei等同。
此外,Linux會維護一個工作目錄(present working directory)的變量。你可以隨時查詢到到工作目錄(在命令行輸入$pwd)。這是為了省去每次都輸入很長的絕對路徑的麻煩。比如說我們將工作目錄更改為/home/vamei ($cd /home/vamei),那么此時我們再去找file.txt就可以省去/home/vamei/ ($ls doc/file.txt),這樣得到的路徑叫相對路徑(relative path),上面的doc/file.txt就是這樣一個相對路徑。
3. 文件操作
對于文件,我們可以讀取(read),寫入(write)和運行(execute)。讀取是從已經存在的文件中獲得數據。寫入是向新的文件或者舊的文件寫入數據。如果文件儲存的是可執行的二進制碼,那么它可以被載入內存,作為一個程序運行。在Linux的文件系統中,如果某個用戶想對某個文件執行某一種操作,那么該用戶必須擁有對該文件進行這一操作的權限。文件權限的信息保存在文件信息(metadata)中, 見下一節。
3. 文件信息 (metadata)
文件自身包含的只有數據。文件名實際上儲存在目錄文件。除了這些之外,還有操作系統維護額外的文件信息,比如文件類型,文件尺寸,文件權限,文件修改時間,文件讀取時間等。可以用ls命令查詢文件信息($ls -l file.txt),得到如下結果:
-rw-r--r-- 1 vamei user 8445 Sep 8 07:33 file1.txt
我們先介紹最開始的-,它表示文件類型,說明file1.txt是常規文件(如果是目錄文件,則應顯示d)。
隨后有九個字符,為rw-r--r--,它們用于表示文件權限。這九個字符分為三組,rw-, r--, r--,分別對應擁有者,擁有組和所有其他人。第一組表示,如果用戶是該文件的擁有者,那么他對該文件有讀取(r),寫入(w)該文件的權限,但不擁有執行(-,如果擁有執行權限,則為x)該文件的權限。第二組表示,如果用戶是該文件的擁有組的一員,那么該用戶只有從該文件讀入的權限。第三組表示,如果該用戶既不是擁有者,也不是擁有組的一員,那么他只有讀入的權限。
之后的vamei表示vamei是文件的擁有者(owner),文件的擁有者有權更改文件權限(比如改為rwxrwxrwx)。而后面的user表示該文件被組user擁有,也就是說,user是文件的擁有組。
隨后的8445表示文件大小,單位為byte。
Sep 8 07:33表示文件的上一次寫入的時間(modification time)。實際上在文件信息中還包含有文件的上一次讀取時間(access time),沒有顯示出來。
總結
計算機本質上是對數據進行處理的工具,而文件是數據儲存的邏輯載體,所以了解Linux文件系統很重要。對于文件系統的了解要結合Linux的其他方面(比如用戶管理)進行有機的學習。