inode總結

inode的介紹以及影響inode號的命令

什么是inode?

理解inode,要從文件儲存說起。文件儲存在硬盤上,硬盤的最小存儲單位叫扇區(Sector)。每個扇區儲存512字節(相當于0.5KB)。操作系統讀取硬盤的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個塊(block)。這種由多個扇區組成的塊是文件存取的最小單位,塊的大小,最常見的是4KB,即連續八個sector組成一個block,文件數據都儲存在塊中,那么很明顯,我們還必須找到一個地方儲存文件的元信息,比如文件的創建者、文件的創年日期、文件的大小等等。這種儲存元信息的區域叫做inode,中文譯名為”索引節點”。inode (index node) 表中包含文件系統的所有文件列表。

inode包含文件的信息(元數據)

? Inode編號

用來識別文件類型,以及用于stat C函數的模式信息

文件權限

文件的擁有者的UID

文件所屬組的GID

鏈接數(指向這個文件名路徑名稱個數)

文件的大小

文件的間戳(ctime指inode上一次變動的時間,mtime是指文件內容上一次變動的時間,atime指文件上一次打開的時間)

指向磁盤文件的數據塊指針

有關文件的其它數據

注意:要想查看文件的inode信息可以使用stat命令查看

inode表結構

inode表結構

直接塊指針:

前12個直接指針,直接指向存儲數據的區域。如Blocks大小為4*1024KB,前12個直接指針就可以保存48KB的文件

間接塊指針:

設每個指針占用4個字節,則以及指針指向的Blocks可以保存(4*1024)/4KB,可指向1024個Blocks,一級指針可存儲文件數據大小為1024*(4*1024)KB=4MB

雙重間接塊指針:

同樣Blocks大小為4*1024,則二級指針可保存Blocks指針數量為((4*1024)/4)*((4*1024)/4),則二級指針保存文件數據大小為(1024*1024)*(4*1024)=4GB

三重間接塊指針:

以次類推三級指針可以儲存文件數據大小為(1024*4*1024*1024)*(4*1024)=4TB

inode的大小:

每個inode都有一個編號,操作系統用inode號來識別不同文件。Unix/Linux系統不使用文件名,而使用inode號來識別文件,對于系統來說,文件名只是inode號碼便于識別的別稱或綽號。表面上,通過文件名打開文件;實際上,系統內部這個過程分成三步:首先,系統找到這個文件名對應的inode號;其次,通過inode號,獲取inode信息;最后,根據inode信息,找到文件數據所在的block,讀出數據。

注意:inode號并不是無限的,如果一個分區的節點數被使用完了,那么即使磁盤空間還有剩余也不能再存放任何數據??梢允褂胐f -i命令查看節點使用情況

df-i

? 注:1節點總數、2使用過節點數、3剩余節點數、4節點使用率

目錄文件:

Unix/Linux系統中,目錄(directory)也是一種文件。打開目錄,實際上就是打開目錄文件目錄文件的結果非常簡單,就是一系列目錄項(direct)的列表。每個目錄項,由兩部分組成:所包含文件的文件名,以及該文件名對應的inode號。

ls命令只列出目錄文件中的所有文件名:

ls

ls -i命令列出整個目錄文件,即文件名和inode號(箭頭標的即為inode號):

ls -i

如果要查看文件的詳細信息,就必須根據inode號,訪問inode節點,讀取信息。ls -i -l 目錄文件 列出整個目錄文件,即文件名和inode號(箭頭標注的列即為inode號)

ls-i-l

理解了上面的知識,就能理解目錄的權限,文件的讀權限(r)和寫權限(w),都是針對目錄文件本身。由于目錄文件內只有文件名和inode號,所以只有讀權,只能獲取文件名,無法獲取其他信息,因為其他信息都儲存在inode節點中,而讀取inode節點內的信息需要目錄文件的執行權限(x)。

Linux中cp、rm、mv 、ln對inode的影響:

cp命令

  • 分配一個未被使用的inode號,在inode表中添加一個新項目,(注意:如果是cp到謳歌已經存在的文件,則inode號采用被覆蓋之前的目標文件的inode號,如果對運行中的apache共享模塊so文件進行cp操作,就會出現Segmentation fault<段錯誤>)
  • 在目錄中新建一個目錄項,并指向步驟1中的inode
  • 把數據復制到block中

rm命令

  • 減少鏈接數量,如果鏈接數為0,釋放inode(inode號也已被重新使用);
  • 如果inode被釋放,則數據塊放到可用空間列表中;
  • 刪除目錄中的目錄項

mv命令

1.如果mv命令的目標文件和源文件所在額文件系統相同:

  • 使用新文件名建立目錄項;
  • 刪除帶有原來文件名的目錄項;

注意:該操作對inode表沒有影響(除時間戳),對數據的位置也沒有影響,不移動任何數據。(即使是mv到一個已經存在的目標文件,新目錄項指源文件inode,會先刪除目標文件的目錄項,所以如果對運行中的apache的共享模塊so文件進行這種操作的話不會有問題,新的so文件inode號變了)

2.如果目標和源文件所在的問價系統不相同,就是cp和rm;

ln命令

符號(軟)鏈接:

符號鏈接的內容是它引用文件的名稱,可以是任意文件或目錄,也可以鏈接不同問價系統的文件,甚至可以鏈接不存在的文件,這就產生一般稱為斷裂的問題,還可以不斷的循環鏈接源文,但是其大小為指向的路徑字符串的長度;不增加或減少目標文件inode 的引用計數。

使用ln -s source_file softlink_file (注意:源文件(source_file)的路徑是相對路徑(也可以是絕對路徑,通常使用的是相對路徑),一定是相對于軟鏈接文件的路徑,而非相對于當前工作目錄的路徑)創建符號鏈接,在對符號鏈接進行讀寫操作的時候,系統會自動把該操作轉換為對源文件的操作,但是刪除連接文件時,系統僅僅刪除符號鏈接文件,而不是刪除源文件本身。

硬鏈接:

不允許給目錄創建硬鏈接,創建硬鏈接會正價額外的記錄項以引用文(不能跨驅動或分區創建硬鏈接),硬鏈接件對應于同一文件系統上的一個物理文件,硬鏈接節點編號是相同的,創建硬鏈接鏈接數遞增,刪除文件時:rm命令遞減計數的鏈接,文件如果存在,至少有一個鏈接數,當鏈接數為0時,該文件被刪除。

使用ln existfile newfile 命令創建硬鏈接

硬鏈接于軟連接的區別:

1、本質不同:硬鏈接是指向同一個文件,軟鏈接指向的不是同一個文件

2、刪除時:硬鏈接不受影響,軟鏈接失效

3、創建鏈接時:創建硬鏈接鏈接數加1,創建軟鏈接連接數不變

4、是否可以跨分區:硬鏈接不可以跨分區,軟鏈接可以跨分區

5、目錄是否可以創建鏈接:硬鏈接不可以對目錄創建,軟鏈接可以對目錄創建

6、硬鏈接的inode號相同,軟鏈接inode號不同

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88362

(3)
ChaogGeChaogGe
上一篇 2017-11-13
下一篇 2017-11-13

相關推薦

  • 壓縮和解壓縮總結

                      壓縮和解壓縮的命令很多,今天總結如下: gzip  壓縮比1–9  默認是6  壓縮比越高  耗費CPU資源也多,文件比較小的話,不建議使用gzip壓縮,因為使用gzip越壓縮越大?!?/p>

    Linux干貨 2017-04-17
  • Linux風水學

    Linux風水學童 有的沒的說一說 說一個,到一個。想起哪個說哪個,說起哪個都不錯。 對于接觸過一點點Linux的風水學童的我來說,還在苦背天地玄黃,宇宙洪荒。雖然不懂是干什么的,但是心里總有個聲音告訴我,這些鬼畫符肯定有用??傆幸惶煳夷艹蔀橐粋€合格的Linux風水師,去某個員外家里施展堪輿之術被奉為上賓。 Linux流派大概   相對于目前的流派…

    2017-07-18
  • Mariadb之SELECT語法練習

    一 、導入hellodb.sql生成數據庫后實現以下操作     # mysql -uroot -h172.16.23.23 -pcento.123 < hellodb.sql     mysql>&nbsp…

    Linux干貨 2014-08-25
  • sed的詳細用法

    sed(Stream EDitor)是一款流編輯器,用來對文本進行過濾與替換操作。其原理是:通過文件或管道讀取文件內容,但是sed默認并不直接修改源文件,而是一次僅讀取文件的一行至模式空間(pattern space)根據sed指令進行編輯并輸出結果后清除模式空間,即所有的操作都是在模式空間中進行的。 語法格式 sed [option]…&nb…

    Linux干貨 2016-11-14
  • 讀寫執行權限對文件和目錄的影響

    權限的作用 對于linux運維工作來說,熟練掌握文件管理技能是非常重要的,所謂“一切皆文件”,控制住文件的權限,可以說也就控制住了linux系統。而且,運維的工作要和成千上萬的文件打交道,對于文件屬性的熟識程度對于工作的順利開展有著深遠的影響。綜上,了解文件,熟悉文件,掌握文件,是我們運維的一個重要的課程。 不同權限對文件和目錄的影響 首先,我們現對權限進行…

    Linux干貨 2017-07-30
  • N25-第八周

    1、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態; 在線的主機使用綠色顯示; 不在線的主使用紅色顯示; #!/bin/bash ipnet=172.16.250. trap ‘trap_action’ INT trap_action() { break return 1 } for ((i=1…

    Linux干貨 2017-05-27
欧美性久久久久