Linux中軟鏈接和硬鏈接的區別

Linux中軟鏈接和硬鏈接的區別

鏈接文件:

  Linux中包括兩種鏈接:硬鏈接(Hard Link)和軟鏈接(Soft Link),軟鏈接又稱為符號鏈接(Symbolic link)。

Inode

文件除了純數據本身之外,還必須包含有對這些純數據的管理信息

  • 文件名;

  • 訪問權限;

  • 文件的屬主以;

  • 該文件的數據所對應的磁盤數據塊;

  • 文件的時間戳; 

    • access time

    • modify time

    • chang time

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

這些管理信息稱之為元數據(mata data),保存在文件的inode節點之中。我們可以通過stat命令查看一個文件的inode信息:

命令格式: 
stat [OPTION]… FILE…

[root@wang ~]17:21# stat /root/wang
文件:"wang"
大小:2474         塊:8          IO 塊:4096   普通文件
設備:fd00h/64768d Inode:139145901   硬鏈接:3
權限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
環境:system_u:object_r:passwd_file_t:s0
最近訪問:2016-10-20 16:17:13.046000565 +0800
最近更改:2016-10-18 04:31:46.303621312 +0800
最近改動:2016-10-20 16:03:57.389348957 +0800

用stat查看文件的inode信息時,我們看到輸出的信息中有一行Inode:139145901,這個是/root/wang文件的inode號。每個inode都有一個全文件系統唯一的inode號,操作系統內核正是通過inode號而非文件名來識別不同的文件。文件名僅僅是為了方便用戶使用而已,內核是通過文件名找到inode,然后通過inode訪問實際文件數據的。既然系統是通過inode號找到的文件內容,那么是否可以存在多個文件的inode號是相同的情況呢?答案是有的就是開頭提到的硬鏈接。


硬鏈接文件其實就是與原文件在不同或者同一目錄(必須同分區)下的另外一個外號,與原文件指向同一個Inode,對應同樣的磁盤數據塊,具有相同的訪問權限、屬性等等。也就是說硬鏈接其實就是同一個人的別名或者是外號,不管叫什么其實都是指的同樣的人。

  • 命令格式: ln filename [ linkname ]

硬鏈接的優點;

  • 節省系統空間,一段磁盤數據塊不論有多少個硬鏈接都只占用一次空間;

  • 硬鏈接文件之間互相沒有關聯,當一個文件刪除時其他文件依然可以正常使用;

硬鏈接的缺點;

  • 不能跨分區創建硬鏈接。因為inode號只有在一個分區內才能保證是唯一的,跨越分期統則inode號就可能重復。

  • 不能對目錄創建硬鏈接。


軟鏈接又叫符號鏈接(symbolic link),與硬鏈接不同的是軟鏈接本身也是文件有自己獨立的Inode號,軟鏈接的文件內容是其所鏈接的另外一個文件或者目錄的路徑。當訪問軟鏈接時,會按照路徑找到軟鏈接所指向的實際目標文件。舉個例子 軟鏈接和Windows系統下的快捷方式十分類似。

命令格式:ln -s filename [linkname]

使用”ls -l ”令查看文件長格式時 第一位顯示為“l”的文件為軟鏈接文件。軟鏈接的文件內容就是引用文件的名稱。

        [root@wang ~]19:57# ll  /tmp/testdir/
       總用量 0
       drwxr-xr-x. 2 root root  6 10月 20 19:31 wang
       drwxr-xr-x. 2 root root  6 10月 20 15:30 zz
       lrwxrwxrwx. 1 root root 15 10月 20 15:31 zz.1nk -> /tmp/testdir/zz

軟鏈接的優點

  • 可以對目錄創建軟鏈接

  • 可以跨分區使用 
    軟鏈接的缺點

  • 鏈接文件的位置或者目標文件的位置發生改變時,軟鏈接可能會失效。


演示

創建一個指向 /tmp/testdir/test 的鏈接接文件 slink

[root@wang ~]20:18# mkdir /tmp/testdir
[root@wang ~]20:19# touch /tmp/testdir/test
[root@wang ~]20:19# ln -s /tmp/testdir/test /tmp/testdir/slink

使用ls -li /tmp/testdir/ 查看會發現新創建的軟鏈接文件slink的inode:4323463而原文件test的inode:4323457

1476968741372600.png

使用ln /tmp/testdir/test /tmp/testdir/hlink創建一個/tmp/testdir/test 的硬鏈接文件 hlink 
使用ls -li /tmp/testdir/查看會發現新創建的硬鏈接文件hlink和原文件test的inode相同都是4323457,屬主、屬組權限相同同時鏈接數變成了2 

Linux中軟鏈接和硬鏈接的區別

使用rm /tmp/testdir/test刪除原文件test后,再次使用ls -li /tmp/testdir/查看會發現軟連接slink已經失效,硬鏈接文件鏈接數減少了一個。

1476968741541677.png


                                             2016-10-20 20:54:36

原創文章,作者:M21-13-王振中,如若轉載,請注明出處:http://www.www58058.com/53258

(0)
M21-13-王振中M21-13-王振中
上一篇 2016-10-20 20:58
下一篇 2016-10-20 21:01

相關推薦

  • 作業——拷貝命令及其鏈接庫

    1),提示用戶輸入一個可執行命令的名稱 2),獲取此命令所依賴額所有庫文件列表 3),復制命令至某目標目錄(/mnt/sysroot,即把此目錄當做根)下的對的路徑中 bash,/bin/bash ===> /mnt/sysroot/bin/bash useradd, /usr/sbin/useradd ===> /mnt/sysroot/usr…

    Linux干貨 2017-02-04
  • 開班第一天

    我的一篇小日記

    Linux干貨 2018-03-26
  • 用戶和組的管理

    在Linux系統上,用戶管理是基于用戶名和密碼的方式進行資源的分配的,Linux上的用戶分為以下的類別: 管理員 : root  ,UID為0 (這個用戶有極大的權限,可以直接無視很多的限制,包括讀寫執行的權限。所以這個用戶的使用要小心,因為他的權限太大。) 普通用戶的UID:1-65535 普通用戶又可分為: 系統用戶(已經存…

    2017-04-08
  • 如何在linux系統上獲取命令的幫助信息,man文檔的章節劃分

    內置命令獲取幫助文檔的方式:   判斷一個命令是否是Linux內置的,可以用type命令,只有Linux的內置命令才能使用 help 命令獲得幫助。 type cd 輸出:cd is a shell builtin 說明這個命令是系統自帶的內置命令,那么就可以使用 help命令來獲取幫助。 help 命令名 外部命令獲取幫助文檔的方式: 第一種辦法是使用 &…

    Linux干貨 2016-10-31
  • keepalived高可用lvs集群

    實驗拓撲   keepalived高可用配置 HA01和HA02的keepalived安裝及配置(安裝及配置均相同) ~]# yum -y install keepalived HA01和HA02做時間同步,crontab中添加時間同步腳本 ~]# date; ssh 192.168.150.140 'date'   …

    Linux干貨 2016-12-06
  • 文件權限特殊管理之ACL

    ACL:access control list 權限訪問列表 應用范圍:所屬主和所屬組和其他用戶之外的他叔用戶 ACL是Linux系統權限額外支持的一項功能,需要文件系統的支持,例如:ReiserFS , EXT2 , EXT3 , EXT4 , JFS , XFS等都支持ACL功能 centos7 中:安裝系統分區和裝完系統之后自己手動添加的分區自動支持a…

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