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

2021-07-02 15:32:51 字數 3702 閱讀 2988

看了趙小兵老師的rhce和一些相關貼子,受了一些啟發,根據平常所知,說說linux系統中,檔案的許可權控制,在對於普通檔案和目錄檔案時,有何區別。

檔案許可權一般可認為是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.二進位制檔案是哪種?答案:普通檔案。

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號對應的資料域了?對,就是這樣。

「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普通檔案許可權和系統目錄許可權的實踐及結論

測試結論 linux普通檔案的讀 寫 執行許可權說明 2 可寫w 表示具有新增 修改檔案內容的許可權 1 如果沒有r配合,那麼vi編輯檔案會提示無法編輯 但可強制編輯,echo可以重定向或追加 3 可執行x 表示具有執行檔案的許可權 1 檔案本身要能夠執行 2 普通使用者同時還需要具備r的許可權才能...

Linux系統檔案和目錄

多使用者作業系統 指一台計算機在同一時間可以由多個使用者使用,多個使用者共同享用系統的全部硬體和軟體資源 位於 home user,稱之為使用者工作目錄或家目錄,表示方式 home user bin usr bin 可執行二進位制檔案的目錄,如常用的命令 ls tar mv cat 等 boot 放...