linux下普通檔案和目錄檔案區別

2021-09-30 11:45:33 字數 3729 閱讀 3088

檔案許可權一般可認為是0 123 456 789,一共十

位: 0:表示該檔案的檔案型別。windows裡面是使用了一種檔案關聯的技術,通過副檔名來關聯相應的應用程式,使得雙擊某個檔案,就能達到呼叫相應的應用程式來開啟它的目的,這樣簡單快捷。然而對於使用者來說,好處是方便,壞處是隱藏了乙個實質性的東西:檔案的真正的型別,與其副檔名實際上是毫無關聯的。 

上面兩個例子是為了說明乙個觀點,某個檔案真正的型別與其副檔名沒一毛錢關係。 

那麼在不知道副檔名的情況下,如何知道檔案的型別呢?在linux是這樣的。 

linux中檔案型別只有以下這幾種:

1.-,普通檔案。 

2.d,目錄檔案,d是directory的簡寫。 

3.l,軟連線檔案,亦稱符號鏈結檔案,s是soft或者symbolic的簡寫。 

4.b,塊檔案,是裝置檔案的一種(還有另一種),b是block的簡寫。 

5.c,字元檔案,也是裝置檔案的一種(這就是第二種),c是character的檔案。 

linux系統最原始的也只有這五種,所以第0位,只能是以上五者之一。 

那麼你會有疑問, 

1.***檔案是是哪種?答案:普通檔案。 

2.二進位制檔案是哪種?答案:普通檔案。 

3.文字檔案是哪種?答案:普通檔案。 

4.為什麼硬連線沒有型別表示?答案:硬連線和軟連線,名字上雖然只差乙個字,本質完全不同,硬連線也是檔案。其型別是普通檔案。 

為什麼上面要說這麼多呢?目的是為下文做知識鋪墊。 

那麼 123-456-789 都好說,了解這塊兒的人都知道,他們只是 使用者-屬組-其他 這三組之間的區別,我們拿其中任意一組作為例子來講解rwx皆可。 

r:read,w:write,x:execute。 

我們應該如何去記憶這

兩者之間的區別

呢??難道死記硬背?no。 

我們應該知其然還得知其所以然,下面我試圖從這查詢檔案以及內容的本質出發,來闡述rwx許可權在這兩者身上為何有不同的意義! 

理解下面的所說的,需要關於linux的檔案系統的知識做鋪墊。如果不知道inode這個概念,基本上就會很吃虧了。 

再次強調,檔案的內容和該檔案當時所用的檔名毫無關聯;該檔案的型別,也與該檔案當時的檔名,毫無關係。 

檢視乙個檔案的內容,實際上是這樣的乙個過程: 

舉例來說,你用了這個命令:cat /tmp/abc.txt 

1.你只傳遞了乙個絕對路徑,/tmp/abc.txt,系統首先要知道/tmp/abc.txt檔案的inode是多少才行,如何得知呢? 

2.記住乙個規律,某檔案的父目錄會(記錄)知道該檔案的inode號!(此刻我想你是不是悟出一點什麼了,不用急,接著往下看) 

3.那麼我得到「/tmp/abc.txt」這個檔名,我得先知道/tmp目錄的情況,要知道/tmp目錄的情況,我得先知道/目錄的情況,所以我就可以從/目錄開始(假設/目錄的inode號是0,並且這是寫死的),然後再去一張叫做inode-table的表中查詢inode號0所指向的資料域,然後從資料域裡面可以找到一些類似於下面的內容:(看起來像一張表,不是麼?其實可以想象到,目錄檔案就是一張表,儲存了它內部有哪些檔名,以及該檔名對應的inode號) 

檔名 inode號 

bin    18 

var    19 

tmp    20 

...    ... 

好了,我們從「/」,這個目錄檔案中找到了「/tmp」檔名對應的inode號,就是20。(假設啊) 

4.然後我們通過inode號20,去inode-table裡面找尋20對應的資料域,然後從資料域中,我們又會找到一張表:(為什麼又是表呢?因為「/」是乙個目錄,「/tmp」也是乙個目錄,那當然資料域裡面存的還是表啦) 

檔名  inode號 

好了,我們找到了/tmp/abc.txt的inode號了,就是8899。根據上面的規律,我們是不是又得去inode-table裡面找8899號對應的資料域了?對,就是這樣。 

5.我們找到inode號8899對應的資料域,於是我們會發現如下一些內容: 

「abcdefg」(假設檔案內容就是這樣) 

... 

又有疑問了,為毛這次不是表了? 

答案:/tmp/abc.txt檔案不是目錄檔案了,它是乙個普通檔案,他儲存的一般都是一些字串。 

體現在本質上

: 普通檔案

:儲存普通資料,一般就是字串。 

目錄檔案:

儲存了一張表,該錶就是該目錄檔案下,所有檔名和inode的對映關係。 

從父目錄中獲得本檔案的inode號---->找到inode-table表中找到這個inode號對應的資料域中的起點以及其他資訊---->去這個資料域中讀取該檔案的內容(普通檔案的內容一般是字串,目錄檔案的內容是一張表) 

如果你真心看懂上面我說的了,那麼接下來就變得簡單多了。 

關鍵就是訪問任何乙個檔案,要看是否能搞到inode號,搞不到就沒轍了。搞到inode就好說了,拿著inode號去inode表中查詢即可,最後找到資料域,那麼就可以找到檔案的內容了 

然後整個過程這不僅僅跟本檔案許可權有關,還跟它的父目錄(還有父目錄的父目錄...)許可權有關(是否能搞到本檔案的inode) 

體現在命令上:(話說這才是最實際的表象) 

*****= 

對於普通檔案來說,rwx的意義是

: r:可以獲得這個普通檔案的名字和內容。 

w:可以修改這個檔案的內容和檔名。可以刪除該檔案,但是使用者會得到是否刪除寫保護檔案的prompt。 

x:該檔案是否具有被執行的許可權。 

*****= 

對於目錄檔案來說,rwx的意義

是: r-x:可以進入cd該目錄,可以獲得該目錄下儲存情況,但是不能修改這個目錄內部儲存的檔案(目錄)的名字,也不能在該目錄下新建檔案和目錄 

-wx:可以進入cd該目錄,但是看不到該目錄下的儲存情況(ls不可用),可以往該目錄下新增、修改、刪除檔案。可以通過cat來讀取該目錄下的檔案or目錄的內容,由於得不到該目錄下儲存了那些檔案,在不知情的情況下只能通過猜,cat + 檔名獲得檔案內容,所以這樣依然不保密。 

--x:可以進入cd該目錄,看不到儲存情況,也不能往該目錄下新增、修改、刪除檔案。但是依然可以通過cat + xx(猜)來獲得該目錄下的檔案的內容。 

rw-:不能進入cd該目錄,用ls僅僅可以獲得檔名和目錄名,因為獲取不到這些檔案的inode號,當然也不能獲得該目錄下的檔案的內容。不能往該目錄下新增、修改、刪除檔案。 

*****= 

最後總結一

下吧: 

1.目錄檔案雖然是檔案(唉,誰叫linux的核心理念就是everything is file),但是儲存內容的只是一張表而已,關於檔名和inode號的對映關係。 

2.檔案的副檔名和檔案型別之間,沒一毛錢關係。 

3.檔案的檔名和檔案實際儲存內容之間,沒一毛錢關係。 

4.要知道如何查詢到乙個檔案內容的過程

。 5.為什麼同乙個檔案系統移動檔案要比跨檔案系統快? 

答:因為只需要修改某個目錄中路徑和inode對應關係即可,不需要重新寫一遍資料域。 

6.什麼是買來的500g的硬碟,格式化完後總是少了達不到500g? 

答:從本文可知,inode-table也是需要占用儲存空間的,所以缺少的一部分中inode-table占用了不少。

7.我不想吃虧,那麼我要如何了解linux檔案系統和inode的相關知識,能否推薦個文章?

答:

linux下普通檔案和目錄檔案區別詳解

檔案許可權一般可認為是0 123 456 789,一共十位 0 表示該檔案的檔案型別。windows裡面是使用了一種檔案關聯的技術,通過副檔名來關聯相應的應用程式,使得雙擊某個檔案,就能達到呼叫相應的應用程式來開啟它的目的,這樣簡單快捷。然而對於使用者來說,好處是方便,壞處是隱藏了乙個實質性的東西 ...

Linux系統中普通檔案和目錄檔案的區別

看了趙小兵老師的rhce和一些相關貼子,受了一些啟發,根據平常所知,說說linux系統中,檔案的許可權控制,在對於普通檔案和目錄檔案時,有何區別。檔案許可權一般可認為是0 123 456 789,一共十位 0 表示該檔案的檔案型別。windows裡面是使用了一種檔案關聯的技術,通過副檔名來關聯相應的...

linux的檔案型別普通檔案 目錄

root wdk ls l 總用量 110 dr xr xr x.2 root root 4096 7月 26 04 23 bin dr xr xr x.5 root root 1024 7月 26 01 26 boot drwxr xr x.10 root root 4096 7月 26 01 2...