Linux檔案管理

2022-02-16 20:05:08 字數 3129 閱讀 7952

對於計算機來說,所謂的資料就是0和1的序列。這樣的乙個序列可以儲存在記憶體中,但記憶體中的資料會隨著關機而消失。為了將資料長久儲存,我們把資料儲存在光碟或者硬碟中。根據我們的需要,我們通常會將資料分開儲存到檔案這樣乙個個的小單位中(所謂的小,是相對於所有的資料而言)。但如果資料只能組織為檔案的話,而不能分類的話,檔案還是會雜亂無章。每次我們搜尋某乙個檔案,就要乙個檔案又乙個檔案地檢查,太過麻煩。檔案系統(file system)是就是檔案在邏輯上組織形式,它以一種更加清晰的方式來存放各個檔案。

檔案被組織到檔案系統(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。

在linux系統中,目錄也是一種檔案。所以/home/vamei是指向目錄檔案vamei的絕對路徑。

這個檔案中至少包含有以下條目:

.       指向當前目錄

..      指向父目錄

除此之外,目錄檔案中還包含有屬於該目錄的檔案的檔名,比如vamei中就還要有如下條目,指向屬於該目錄的檔案:

docmovie

photo

linux解釋乙個絕對路徑的方式如下:先找到根目錄檔案,從該目錄檔案中讀取home目錄檔案的位置,然後從home檔案中讀取vamei的位置……直到找到目錄doc中的file.txt的位置。

由於目錄檔案中都有.和..的條目,我們可以在路徑中加入.或者..來表示當前目錄或者父目錄,比如/home/vamei/doc/..與/home/vamei等同。

此外,linux會在程序中,維護乙個工作目錄(present working directory)的變數。在shell中,你可以隨時查詢到到工作目錄(在命令列輸入$pwd)。這是為了省去每次都輸入很長的絕對路徑的麻煩。比如說我們將工作目錄更改為/home/vamei ($cd /home/vamei),那麼此時我們再去找file.txt就可以省去/home/vamei/ ($ls doc/file.txt),這樣得到的路徑叫相對路徑(relative path),上面的doc/file.txt就是這樣乙個相對路徑。

當檔案出現在乙個目錄檔案中時,我們就把檔案接入到檔案系統中,我們稱建立乙個到檔案的硬鏈結(hard link)。乙個檔案允許出現在多個目錄中,這樣,它就有多個硬鏈結。當硬鏈結的數目(link count)降為0時,檔案會被linux刪除。所以很多時候,unlink與remove在linux作業系統中是乙個意思。由於

軟鏈結(soft link)的廣泛使用(soft link不會影響link count,而且可以跨越檔案系統),現在較少手動建立硬連線。

對於檔案,我們可以讀取(read)

,寫入(write)

和執行(execute)

。讀取是從已經存在的檔案中獲得資料。寫入是向新的檔案或者舊的檔案寫入資料。如果檔案儲存的是可執行的二進位製碼,那麼它可以被載入記憶體,作為乙個程式執行。在linux的檔案系統中,如果某個使用者想對某個檔案執行某一種操作,那麼該使用者必須擁有對該檔案進行這一操作的許可權。檔案許可權的資訊儲存在檔案資訊(metadata)中, 見下一節。

檔案自身包含的只有資料。檔名實際上儲存在目錄檔案。除了這些之外,還有作業系統維護的檔案附加資訊,比如檔案型別,檔案尺寸,檔案許可權,檔案修改時間,檔案讀取時間等。可以用ls命令查詢檔案資訊($ls -l file.txt),得到如下結果:

-rw-r--r-- 1 vamei vamei 8445 sep  8 07:33 file1.txt

各個部分的含義如下:

如上討論硬鏈結時說到的,軟鏈結不會影響檔案的link count。如果還記得windows系統的快捷方式的話,linux的軟鏈結(soft link,也叫做symbolic link)就是linux的快捷方式。軟鏈結本質上是乙個檔案,它的檔案型別是symbolic link。在這個檔案中,包含有鏈結指向的檔案的絕對路徑。當你從這個檔案讀取資料時,linux會把你導向所指向的檔案,然後從那個檔案中讀取(就好像你雙擊快捷方式的效果一樣)。軟鏈結可以方便的在任何地方建立,並指向任何乙個絕對路徑。

軟鏈結本身也是乙個檔案,也可以執行檔案所可以進行的操作。當我們對軟鏈結操作時,要注意我們是對軟鏈結本身操作,還是對軟鏈結指向的目標操作。如果是後者,我們就說該操作跟隨鏈結指引(follow the link)

。當我們建立檔案的時候,比如使用touch,它會嘗試將新建檔案建立為許可權666,也就是rw-rw-rw-。但作業系統要參照許可權mask來看是否真正將檔案建立為666。許可權mask表示作業系統不允許設定的許可權位,比如說037(----wxrwx)的許可權mask意味著不允許設定設定group的wx位和other的rwx位。如果是這個許可權mask的話,最終的檔案許可權是rw-r----- (group的w位和other的rw位被mask)。

我們可以通過

$umask 022

的方式改變許可權mask。

計算機本質上是對資料進行處理的工具,而檔案是資料儲存的邏輯載體,所以了解linux檔案系統很重要。對於檔案系統的了解要結合linux的其他方面(比如使用者管理)進行有機的學習。

檔案許可權,擁有者,擁有組,超級使用者root

硬鏈結,軟鏈結,follow the link

歡迎閱讀「騎著企鵝採樹莓」系列文章

linux檔案管理

判斷是否為目錄 bool is dir const char path return false 判斷是否為常規檔案 bool is file const char path 判斷是否是特殊目錄 bool is special dir const char path 生成完整的檔案路徑 void g...

Linux檔案管理

對於計算機來說,所謂的資料就是0和1的序列。這樣的乙個序列可以儲存在記憶體中,但記憶體中的資料會隨著關機而消失。為了將資料長久儲存,我們把資料儲存在光碟或者硬碟中。根據我們的需要,我們通常會將資料分開儲存到檔案這樣乙個個的小單位中 所謂的小,是相對於所有的資料而言 但如果資料只能組織為檔案的話,而不...

Linux檔案管理

對於計算機來說,所謂的資料就是0和1的序列。這樣的乙個序列可以儲存在記憶體中,但記憶體中的資料會隨著關機而消失。為了將資料長久儲存,我們把資料儲存在光碟或者硬碟中。根據我們的需要,我們通常會將資料分開儲存到檔案這樣乙個個的小單位中 所謂的小,是相對於所有的資料而言 但如果資料只能組織為檔案的話,而不...