linux的檔案和目錄的區別和聯絡

2021-08-01 19:08:56 字數 3729 閱讀 6226

檔案許可權一般可認為是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的檔案和目錄

home user bin usr bin 可執行二進位制檔案的目錄,如常用的命令 ls tar mv cat 等 boot 放置 linux 系統啟動時用到的一些檔案,如 linux 的核心檔案 boot vmlinuz,系統引導管理器 boot grub etc 系統配置檔案存放的目錄,不建議在...

Linux的檔案和目錄

linux系統與windows一樣,都是由乙個個小檔案構成。linux與windows最大區別在於linux一切皆檔案。在linux的跟掛載點 下,有乙個很神奇的資料夾,叫 dev。在這個資料夾下儲存著所有硬體裝置的檔案,如果剛入門的話,不要隨意修改這個資料夾下任何檔案,隨意修改都可能會使主機崩潰。...

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

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