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 13:09
下一篇 2016-10-20 15:38

相關推薦

  • 優質代碼的十誡

    1.- DRY: Don’t repeat yourself. DRY 是一個最簡單的法則,也是最容易被理解的。但它也可能是最難被應用的(因為要做到這樣,我們需要在泛型設計上做相當的努力,這并不是一件容易的事)。它意味著,當我們在兩個或多個地方的時候發現一些相似的代碼的時候,我們需要把他們的共性抽象出來形一個唯一的新方法,并且改變現有的地方的代碼讓…

    Linux干貨 2015-04-01
  • ?文件共享服務之FTP

    文件共享服務之FTP 文件共享服務之FTP 一、什么是文件共享服務 二、FTP 三、響應碼 四、FTP存儲和mysql存儲有什么不同? 五、用戶認證 六、FTP安裝與配置 一、什么是文件共享服務 簡單理解就是文件或存儲塊設備可以共享給大家使用。  1、實現共享服務有三種! (1)ftp:屬于應用層服務,可以跨平臺使用(linux<—&gt…

    Linux干貨 2016-04-18
  • TCP 的那些事兒(下)

    這篇文章是下篇,所以如果你對TCP不熟悉的話,還請你先看看上篇《TCP的那些事兒(上)》 上篇中,我們介紹了TCP的協議頭、狀態機、數據重傳中的東西。但是TCP要解決一個很大的事,那就是要在一個網絡根據不同的情況來動態調整自己的發包的速度,小則讓自己的連接更穩定,大則讓整個網絡更穩定。在你閱讀下篇之前,你需要做好準備,本篇文章有好些算法和策略,可能會引發你的…

    Linux干貨 2016-08-15
  • CentOS6.7 Xen安裝部署和基本測試小結

    目錄:    1. Xen的簡介    1.1  Xen的大體結構    1.2 Xen對VM的稱呼    1.3 Xen對CPU和內存的虛擬化過程    1.4 Xen對IO設備的虛擬化過程    1.5 Linux Kerne…

    Linux干貨 2016-04-19
  • 網絡管理,程序管理

    lsmod |grep bond0 ifconfig bond0 down 關閉bonding服務 rmmod bonding  刪除 bonding 服務 lsmod |grep eth1000 查看  lsmod指令,會列出所有已載入系統的模塊 rmmod  刪除內核中的一模塊  查找網卡驅動e1000 rmmod…

    Linux干貨 2016-09-11
  • ?rsyslog

    rsyslog 概述 rsyslog支持的facility與priority facility:設施、信道: priority:級別 rsyslog程序 配置文件 配置日志記錄級別和路徑 配置日志記錄在遠程rsyslog server rsyslog server端 rsyslog client端 測試遠程服務器是否記錄日志 rsyslog記錄在MySQL中…

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