inode、軟硬鏈接區分、ln命令

inode、軟硬鏈接區分、ln命令

一、inode

inode記錄的是文件的屬性及文件實際放在那塊數據塊中的。inode包含以下數據: 
1. 該文件的可被訪問的權限(read/write/excute) 
2. 該文件的屬主、屬組(owner、group) 
3. 該文件的大小 
4. 該文件創建或者狀態改變的時間(Ctime) 
5. 最近一次讀取時間(atime)
6. 最近一次修改時間(mtime) 
7. 定義文件特性的標志(flag),如SetUID等 
8. 該文件內容真實的指向(pointer) 
實際在我們進行分區操作的時候就講inode的大小固定,固定為128bytes,并且每個文件都會僅僅占用一個inode,因此一個文件能存放多少文件和inode有關。

注意:一個分區不能存放文件,不僅僅是該分區容量滿啦,還有可能是該分區的inode個數滿啦。使用df -i 可以查看具體inode的個數
[root@local usr]# df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/sda2      2580480 65924 2514556    3% /
tmpfs           125517     1  125516    1% /dev/shm
/dev/sda1        51200    38   51162    1% /boot

二、inode對文件內容進行指向

每個inode里面存放了,一個文件的真實內容所在的數據庫位置,系統讀取一個文件內容時,先會讀取inode里面的權限和用戶是否吻合,然后在開始讀取所指向的數據塊的內容。情況如下圖 inode、軟硬鏈接區分、ln命令 每一個下一級目錄的inode表放在上一級的目錄的數據塊中。

因此,我們可以看到Linux每次尋找一個文件或者目錄需要經過很多inode表和數據塊。這樣很費時間,所以系統會幫我把我們訪問過的路徑緩存在內存中,這樣就可以節約時間了。

三、inode結構

借用鳥哥畫的inode結構示意圖為例,這是以ext家族為對象畫的。ext文件系統家族是Linux最常用,歷史比較久遠的文件系統。

inode、軟硬鏈接區分、ln命令

我們知道一個數據塊的大小只能為1k、2k、4k??墒俏覀兇娣诺奈募热葸h遠大于一個數據塊的容量。因此,我們就需要多個數據塊,但是存放在多個數據塊后,系統如何能夠調用相應的數據塊。因此出現了前面的inode,它出現的目的就是幫系統快速的識別和分類相應的數據塊。

同時,我們也知道inode表放在數據塊中,一個數據塊不僅要存放inode表還要存放其他數據,因此光一個數據塊的inode肯定不夠,所以誕生了間接inode,雙間接,三間接。

以ext家族1kb數據塊為例,一個inode能12個直接指向數據塊:12×1k=12k,也是就記錄12條信息。 
間接指向:256×1k=256k,也就是256條記錄。 
雙間接256×256×1k=65536K=64M ,也就是65536條記錄。 
三間接指向為:256×65536K=16777216K=8G,也就是16777216條記錄。 總額就是將三者相加就是16G。

四、軟硬鏈接的區別

1.硬鏈接:

就是在目錄下新建一條文件名鏈接到某inode號碼的關聯記錄。inode、軟硬鏈接區分、ln命令 可以看出1或者2都是找到real然后去讀實際內容,因此任意刪掉一條路徑沒有任何影響,這也就是硬鏈接。

注意:1.硬鏈接不能跨文件系

2.不能鏈接到目錄。

2、軟鏈接:

軟鏈接其實就是windows操作系統里面的快捷方式,原文件不存在,這個快捷方式所指向的路徑就不在了。如下圖所示inode、軟硬鏈接區分、ln命令 可以看到1指向2再指向real再指向實際內容。1就是2的軟鏈接,2以后的路要是斷了,1也訪問不到實際內容

五、ln

ln這個命令就是用來實現軟、硬鏈接的命令。 
用法:1.創建一個硬鏈接

[root@local tmp]# ln test.txt test1.txt
[root@local tmp]# ll
total 4
drwxr-xr-x. 3 root   root   4096 Jul 29 12:34 test1
-rw-rw-r--. 2 gentoo gentoo    0 Jul 29 09:28 test1.txt
-rw-rw-r--. 2 gentoo gentoo    0 Jul 29 09:28 test.txt

可以看到硬鏈接所有屬性都是和原來的文件一樣。 
2.創建一個軟鏈接

[root@local tmp]# ln -s test.txt test2.txt
[root@local tmp]# ll
total 4
drwxr-xr-x. 3 root   root   4096 Jul 29 12:34 test1
-rw-rw-r--. 2 gentoo gentoo    0 Jul 29 09:28 test1.txt
lrwxrwxrwx. 1 root   root      8 Jul 30 05:44 test2.txt -> test.txt
-rw-rw-r--. 2 gentoo gentoo    0 Jul 29 09:28 test.txt

可以發現所有的信息都改變了。

原創文章,作者:fighter,如若轉載,請注明出處:http://www.www58058.com/26994

(1)
fighterfighter
上一篇 2016-08-02 10:52
下一篇 2016-08-02 10:52

相關推薦

  • HAProxy

    LB Cluster: 四層:lvs, nginx(stream),haproxy(mode tcp) 七層:http: nginx(http, ngx_http_upstream_module), haproxy(mode http), httpd, ats, perlbal, pound… HAProxy 程序環境: 主程序:/usr/sbi…

    Linux干貨 2017-07-03
  • 軟鏈接和硬鏈接的區別

    文件管理 前言 Linux的一則哲學:一切皆文件。既然入坑,那么管理linux就是管理一堆文件,操作文件這是展示個人十八般武藝的時候,功夫高下一招下。怎么成為高手,高手的招式都有哪些,拳腳掌刀槍棍棒,一招一式如何練就。 1文件存儲 文件存儲就好比每個練武人必備的技能——挨打,在你耍十八般武藝前,必須先扛住對方的一掌。我們不必擁有金剛罩鐵布衫,至少要學會如何躲…

    Linux干貨 2016-10-20
  • shell精講

    shell精講 shell變量        定義變量時,變量名不加美元符號($,PHP語言中變量需要) 注意,變量名和等號之間不能有空格,這可能和你熟悉的所有編程語言都不一樣。同時,變量名的命名須遵循如下規則: 首個字符必須為字母(a-z,A-Z)。 中間不能有空格,可以使用下劃線(_)。 不能使…

    Linux干貨 2016-08-21
  • 第三周作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 2、取出最后登錄到當前系統的用戶的相關信息。 3、取出當前系統上被用戶當作其默認shell的最多的那個shell。 4、將/etc/passwd中的第三個字段數值最大的后10個用戶的信息全部改為大寫后保存 至/tmp/maxusers.txt文件中。 5、取出當前主機…

    Linux干貨 2016-11-21
  • 簡單的shell腳本結合awk實現防止對web服務的dos攻擊

    一 實驗環境         鄙人使用的是centos 6.8操作系統   需要安裝iptables(常見的linux系統貌似都會自動安裝iptables)這條可以忽略   awk也需要安裝沒有的話就用yum裝下吧       &…

    2017-04-24
  • CentOS系統啟動流程——深入了解linux

    CentOS系統啟動流程 ·Linux系統的組成部分:內核+根文件系統      內核:進程管理、內存管理、網絡協議棧、文件系統、驅動程序、安全功能              IPC:Inter Pr…

    Linux干貨 2016-09-11
欧美性久久久久