Linux硬鏈接和軟鏈接

標簽:

   inode

   軟鏈接

   硬鏈接

一、ionde及inode編號

  在計算機中,信息一般以扇區(sectors)的形式存儲在硬盤上,而每個扇區包括512個字節的數據和一些其他信息(即一個扇區包括兩個主要部分:存儲數據地點的標識符和存儲數據的數據段)。操作系統讀取硬盤的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個塊(blocks)。這種由多個扇區組成的”塊”,是文件存取的最小單位?!眽K”的大小,最常見的是4KB,即連續八個 sectors組成一個 blocks。

  如此以來對于操作系統而言,必須采用一種方式來找到這個存儲文件數據的“塊”,為此操作系統便引入了一個非常重要的概念”inode”,中文名為“索引結點” 。既然引進inode的目的是為了找到“塊”,那么inode中必然包括像文件數據block位置這么重要的信息,當然也不僅僅包括這么一個信息等。

  inode包含文件的元信息,具體有以下內容:

  * 文件的字節數

  * 文件擁有者的User ID

  * 文件的Group ID

  * 文件的讀、寫、執行權限

  * 文件的時間戳,共有三個:ctimeinode上一次變動的時間,mtime指文件內容上一次變動的時間,atime指文件上一次打開的時間。

  * 鏈接數,即有多少文件名指向這個inode

  * 文件數據block的位置

   Linux 在讀取數據的時候,是先查詢 inode table 以得到數據是放在那個 Block 里面,然后再去該 Block 里面讀取真正的數據內容。這個inode編號在一定范圍內(在同一個分區內)是唯一的,類似于我們的身份證。所以對于Linux來說,ionde編號是唯一辨識一個文件的表示符號。

二、硬鏈接

  由于inode編號作為Linux內唯一辨識一個文件的表示符號,Linux系統允許,多個文件名指向同一個inode號碼。這意味著,可以用不同的文件名訪問同樣的內容;對文件內容進行修改,會影響到所有文件名;但是,刪除一個文件名,不影響另一個文件名的訪問。這種情況就被稱為"硬鏈接"hard link)。

  硬鏈接的特性:  

          1)只能對已存在的文件進行創建,創建硬鏈接會在inode里不添加計數。

          2)指向inode相同,與源文件的data block也相同。

          3)不能對目錄創建硬鏈接。

          4)不能跨文件系統進行硬鏈接的創建。

          5)創建硬鏈接會在硬鏈接父目錄添加映射條目:hard link映射源文件inode。

          6)刪除一個硬鏈接文件,會在父目錄清除該條映射,inode計數減一,所以不影響其他有相同 inode 號的文件。

 示例:

   1)只能對已存在的文件創建硬鏈接,源文件不存在則無法創建硬鏈接,創建硬鏈接會對ionde里不添加計數

[root@localhoast testdir]# ls
21.sh  dir1  www
[root@localhoast testdir]# ln aaa bbb
ln: accessing `aaa': No such file or directory
[root@localhoast testdir]#

   QQ圖片20161020144025.png

   2)不能對目錄創建硬鏈接

[root@localhoast /]# ls -ld testdir/
drwxr-xr-x. 3 root root 4096 Oct 19 19:47 testdir/
[root@localhoast /]# ln testdir aaa
ln: `testdir': hard link not allowed for directory

   3)不支持跨文件系統建立硬鏈接

[root@localhoast ~]# df
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg_localhoast-lv_root
                      51475068 2002336  46851292   5% /
tmpfs                   502068       0    502068   0% /dev/shm
/dev/sda1               487652   34526    427526   8% /boot
/dev/mapper/vg_localhoast-lv_home
                      69608928   53032  66013268   1% /home
[root@localhoast ~]# touch /home/source
[root@localhoast ~]# ln /home/source /boot/aaa
ln:

   4)創建硬鏈接會在硬鏈接父目錄添加映射條目:hard link映射源文件inode

QQ圖片20161020145057.png

   5)刪除一個硬鏈接文件,會在父目錄清除該條映射,連接數計數減一,ionde數目無變化所以不影響其他有相同 inode 號的文件。

    QQ圖片1.pngQQ圖片2.png

QQ圖片3.png

三、軟鏈接

  文件A和文件Binode號碼雖然不一樣,但是文件A的內容是文件B的路徑。讀取文件A時,系統會自動將訪問者導向文件B。因此,無論打開哪一個文件,最終讀取的都是文件B。這時,文件A就稱為文件B"軟鏈接"soft link)或者"符號鏈接(symbolic link)。

  這意味著,文件A依賴于文件B而存在,如果刪除了文件B,打開文件A就會報錯:"No such file or directory"。這是軟鏈接與硬鏈接最大的不同:文件A指向文件B的文件名,而不是文件Binode號碼,文件Binode"鏈接數"不會因此發生變化。

  通俗的來講,軟鏈接就是相當于window操作系統里面的快捷方式。當源文件被刪除之后,快捷方式(軟連接)也就沒有作用了。

  軟鏈接的特性:

         1)可以指向一個目錄。 

         2)可以跨文件系統(分區)。

         3)是一個指向源文件名稱的指針,是一個獨立的文件。

         4)指向的是另一個文件的路徑;其大小為指向的路徑字符串的長度;增加或減少目標文件inode 的引用計數。

  特性示例:

     

      1)可以指向一個目錄

[root@localhoast testdir]# ls
21.sh  dir1  www
[root@localhoast testdir]# ls -ld dir1
drwxr-xr-x. 4 root root 4096 Oct 18 21:05 dir1
[root@localhoast testdir]# ln -s dir1  aaa
[root@localhoast testdir]# ll
total 8
-rw-r--r--. 1 root root    0 Oct 19 03:09 21.sh
lrwxrwxrwx. 1 root root    4 Oct 19 20:42 aaa -> dir1
drwxr-xr-x. 4 root root 4096 Oct 18 21:05 dir1
-rw-r--r--. 1 root root  192 Oct 19 05:43 www

      2)可以跨文件系統(分區)

[root@localhoast ~]# df
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg_localhoast-lv_root
                      51475068 2002328  46851300   5% /
tmpfs                   502068       0    502068   0% /dev/shm
/dev/sda1               487652   34527    427525   8% /boot
/dev/mapper/vg_localhoast-lv_home
                      69608928   53032  66013268   1% /home
[root@localhoast ~]# cd /home/
[root@localhoast home]# ls
han  lost+found  source
[root@localhoast home]# ln -s han  /boot/abc
[root@localhoast home]# ll /boot/abc 
lrwxrwxrwx. 1 root root 3 Oct 19 20:44 /boot/abc -> han
[root@localhoast home]#

      3)是一個指向源文件名稱的指針,是一個獨立的文件

 QQ圖片4.png

      4)指向的是另一個文件的路徑;其大小為指向的路徑字符串的長度;

QQ圖片20161020153328.png

  會增加和減少inode的計數

 QQ圖片20161020154758.png

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

(0)
hanlln1hanlln1
上一篇 2016-10-20
下一篇 2016-10-20

相關推薦

  • 有關磁盤管理與文件系統

    硬盤物理結構      扇區  磁頭  磁道   柱面   磁道數      扇區*一個磁道上的扇區個數*磁頭數=柱面      柱面*磁道數=硬盤大小      一個扇區512字節   &…

    2017-08-19
  • 自制Linux系統

                          自制Linux系統 1、環境準備:         在centos6上添加一塊新硬盤,并分區格式化。 &n…

    系統運維 2016-09-21
  • LVS NAT + Keepalived HOWTO

    LVS NAT + Keepalived HOWTO   這篇文章主要講解了,基于LVS/NAT,安裝,運行與檢測keepalived 目錄     1、什么是keepalived?     2、規劃你的網絡 &nbsp…

    Linux干貨 2015-09-21
  • TIME_WAIT引起Cannot assign requested address報錯

    1.  問題描述      有時候用redis客戶端(php或者java客戶端)連接Redis服務器,報錯:“Cannot assign requested address?!?     原因是客戶端頻繁的連接服務器,由于每次連接都在很短時間內結束,導致很多的TIME_WAIT。所以新的連…

    Linux干貨 2016-03-09
  • FHS文件系統共能介紹

    FHS文件系統共能介紹   FHS,即File Hierarchy Standard,文件層級標準。多數Linux系統下的文件管理采用此種文件組織形式,它定義了系統中每個區域的用途、所需要的最小構成的文件和目錄,同時還給出了例外處理與矛盾處理。   這中組織是一種倒樹狀結構,所有的文件與目錄都是由根目錄”/”開始,然后…

    Linux干貨 2016-10-18
欧美性久久久久