檔案許可權一般可認為是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裡面是使用了一種檔案關聯的技術,通過副檔名來關聯相應的...