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 19:16
下一篇 2017-11-13 19:38

相關推薦

  • Man手冊功能介紹

    Man:是Linux下的幫助指令,通過man指令可以查看Linux中的指令幫助、配置文件幫助和編程幫助等信息。 語法:man(選項)(參數) 選項: -a:在所有的man幫助手冊中搜索 -f:等價于whatis指令,顯示給定關鍵字的簡短描述信息 -P:指定內容時使用分頁程序 -M:指定man手冊搜索的路徑。 本地手冊:/usr/share/man &nbsp…

    Linux干貨 2016-10-17
  • vi與vim的使用

    一、引言     在Linux中,vi(Visual Interface)是標準的編輯器,功能強大到不遜于任何最新的編輯器。無論在Linux中還是在Unix中,vi的使用方法都是完全相同的。vim(Vi Improved)在vi的基礎上增加了很多新特性。 二、模式     vim…

    Linux干貨 2016-08-11
  • 馬哥教育網絡第21期-第五周課程練習

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; [root@6 ~]# grep '^[[:space:]]\+' /boot/grub/grub.conf 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白…

    Linux干貨 2016-08-15
  • N21-天天-第九周課程練習

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash awk -F: '$NF~"/sbin/nologin" {shell++} $NF!~&qu…

    Linux干貨 2016-09-01
  • N25_第九周作業

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; 2、寫一個腳本     (1) 獲取當前主機的主機名,保存于hostname變量中;     (2) 判斷此變量的值是否為localhost,如果是…

    Linux干貨 2017-02-02
  • 8月5日第七節課作業

    一、當天練習 1、找出ifconfig命令結果中本機的所有IPv4地址 2、查出分區空間使用率的最大百分比值 3、查出用戶UID最大值的用戶名、UID及shell類型 4、查出/tmp的權限,以數字方式顯示 5、統計當前連接本機的每個遠程主機IP的連接數,并按從大 到小排序 1、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使 用兩種方式) …

    Linux干貨 2016-08-08
欧美性久久久久