軟鏈接和硬鏈接及兩者之間的不同

Linux 上被分成兩個部分:用戶數據 (user data) 與元數據 (metadata)。用戶數據,即文件數據塊 (data block),數據塊是記錄文件真實內容的地方;而元數據則是文件的附加屬性,如文件大小、創建時間、所有者等信息。在 Linux 中,元數據中的 inode 號(inode 是文件元數據的一部分但其并不包含文件名,inode 號即索引節點號)才是文件的唯一標識而非文件名。文件名僅是為了方便人們的記憶和使用,系統或程序通過 inode 號尋找正確的文件數據塊。

為解決文件的共享使用,Linux 系統引入了兩種鏈接:硬鏈接 (hard link) 與軟鏈接(soft link)。鏈接為 Linux 系統解決了文件的共享使用,還帶來了隱藏文件路徑、增加權限安全及節省存儲等好處。若一個 inode 號對應多個文件名,則稱這些文件為硬鏈接。也就是說,硬鏈接就是同一個文件使用了多個別名,它們有共同的 inode。硬鏈接可由命令 ln 創建。

于硬鏈接是有著相同 inode 號僅文件名不同的文件,因此硬鏈接存在以下幾點特性:

文件有相同的 inode data block

/]#touch xyz

/]#ln xyz 123

/]#ll -i 123 xyz

15 -rw-r–r– 2 root root 0 Oct 19 17:55 123

15 -rw-r–r– 2 root root 0 Oct 19 17:55 xyz

只能對已存在的文件進行創建;

/]#ln b.log b1.log

ln: accessing `b.log': No such file or directory

不能跨文件系統(跨分區)進行硬鏈接的創建,

/]#df

Filesystem           1K-blocks    Used Available Use% Mounted on

/dev/mapper/vg0-root  20511356  309312  19153468   2% /

tmpfs                   506224       0    506224   0% /dev/shm

/dev/sda1               194241   36311    147690  20% /boot

/dev/mapper/vg0-usr   10190136 2000276   7665572  21% /usr

/dev/mapper/vg0-var   20511356  547732  18915048   3% /var

/]#ln b.log /usr/b2.log

ln: creating hard link `/usr/b2.log' => `b.log': Invalid cross-device link

不能對目錄進行創建,只可對文件創建;

/]#mkdir abc

/]#ln abc abc.ln

ln: `abc': hard link not allowed for directory

刪除一個硬鏈接文件并不影響其他有相同 inode 號的文件。

[root@pxe12 /]#ll -i 123 xyz

15 -rw-r–r– 2 root root 0 Oct 19 17:55 123

15 -rw-r–r– 2 root root 0 Oct 19 17:55 xyz

[root@pxe12 /]#rm -f 123

[root@pxe12 /]#ll -i xyz   

15 -rw-r–r– 1 root root 0 Oct 19 17:55 xyz

硬鏈接在刪除以后對數據不產生任何影響,即使把兩個文件名都刪除掉(硬鏈接),雖然我們看不到文件了,實際上文件數據還是存在在硬盤上,數據的恢復也就是重新建立一個別的文件名和文件數據建立連接。Inode編號是根據上一使用編號進行分配的,只是為了表示唯一性。多個磁盤分區具有相同的inode號。

軟鏈接與硬鏈接不同,若文件用戶數據塊中存放的內容是另一文件的路徑名的指向,則該文件就是軟連接。軟鏈接就是一個普通文件,只是數據塊內容有點特殊。軟鏈接有著自己的 inode 號以及用戶數據塊。因此軟鏈接的創建與使用沒有類似硬鏈接的諸多限制:

軟鏈接有自己的文件屬性及權限等;

~]#ll 567.txt 567.lnk

lrwxrwxrwx 1 root root 15 Oct 19 21:53 567.lnk -> ../root/567.txt

-rw-r–r– 1 root root  0 Oct 19 19:59 567.txt

可對不存在的文件或目錄創建軟鏈接;

[root@pxe12 ~]#ln -s ../root/sh.log /root/sh.lnk

[root@pxe12 ~]#ll sh.lnk

lrwxrwxrwx 1 root root 14 Oct 19 22:00 sh.lnk -> ../root/sh.log

軟鏈接可交叉文件系統;

[root@pxe12 ~]#ln -s ../../root/567.txt /usr/ha/567.ln

[root@pxe12 ~]#ll /usr/ha/

total 0

lrwxrwxrwx 1 root root 18 Oct 19 21:58 567.ln -> ../../root/567.txt

軟鏈接可對文件或目錄創建;

[root@pxe12 ~]#ll -d  Music

drwxr-xr-x 2 root root 4096 Oct 11 20:42 Music

[root@pxe12 ~]#ln -s ../root/Music/ /root/music.lnk

 [root@pxe12 ~]#ll music.lnk

lrwxrwxrwx 1 root root 14 Oct 19 22:02 music.lnk -> ../root/Music/

創建軟鏈接時,鏈接計數 i_nlink 不會增加;

[root@pxe12 ~]#ll -d Music

drwxr-xr-x 2 root root 4096 Oct 11 20:42 Music

刪除軟鏈接并不影響被指向的文件,但若被指向的原文件被刪除,則相關軟連接被稱為死鏈接(即 dangling link,若被指向路徑文件被重新創建,死鏈接可恢復為正常的軟鏈接)。

兩者之間的不同之處:

硬鏈接源文件和鏈接文件公用一個inode號,修改硬鏈接文件,源文件和其它的硬鏈接也會更改,因為它們的inode號相同,文件顯示的大小是跟原文件是一樣的。軟鏈接源文件和鏈接文件擁有不同的inode號,軟鏈接顯示的大小與原文件不同是兩個不同的文件。

文件屬性上軟鏈接表示出了是鏈接文件,而硬鏈接沒有寫出來。

當刪除源文件或是移動源文件時,硬鏈接還能正常使用,而軟鏈接就會找不到源文件了。

硬鏈接的對象必須是存在的文件,而軟鏈接的對象可以是不存在的文件或目錄。每次新建硬鏈接它們的硬鏈接屬性會發生改變,軟鏈接不會改變。因為它是獨立的文件。只是在讀取文件時指向源文件。

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

(0)
ai156ai156
上一篇 2016-12-05
下一篇 2016-12-05

相關推薦

  • 計算機組成及Linux初識

    拼一載春秋,搏一生無悔 1. 計算機簡介 2. Linux發行版簡介 3. Linux哲學思想簡介 4. Linux系統上獲取命令幫助 5. Linux「12」個基礎命令簡介 6. Linux發行版基礎目錄及功能簡介 1.計算機簡介 電子計算機(英語:computer),亦稱電腦,是一種利用「電子學…

    Linux干貨 2016-10-27
  • 馬哥教育網絡班第21期+第二周課程作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 命令 選項 解釋 cp -r 遞歸復制 copy -f 強行復制,若已存在則覆蓋 -i 交互式 -p 保留屬主屬組權限時間戳 -L(不加也可以,默認) (源文件為鏈接)復制指向連接的文件 -P (源文件為鏈接) 以鏈接的方式復制過來 -a 歸檔復制,常用備份 命令 選項 …

    Linux干貨 2016-07-17
  • 文件查詢、yum安裝等零散知識點總結

    歸納重要知識點:文件查詢、Linux配置文件、文件的壓縮與歸檔、yum安裝包文件   這篇博客介紹以前遺落的重要知識點進行歸納總結,分為四大塊:文件查詢命令、全局與個人配置文件、文件的壓縮與歸檔、yum命令安裝程序包的相關條件與操作。下面結合個人理解與學習內容一一進行總結。     一.文件查詢命令locate與find &nb…

    Linux干貨 2016-08-26
  • Linux系統啟動基本流程

    Linux開機流程 如下圖 00×01、BISO自檢     硬件檢查,檢查硬件完整性,之后從開機BIOS開機硬件列表選擇BOOT設備     2. 00×02、MBR引導     從bootloader446…

    2017-07-09
  • Boot目錄下內容丟失導致系統無法啟動

    Boot目錄下內容丟失導致系統無法啟動 筆者朋友近期在一次學習過程中不慎將虛擬機中boot目錄下內容丟失,導致系統無法啟動。當然此前他并不知道是這樣,只是應為莫名的彈出框報錯所有導致系統無法啟動。此后朋友將此故障告知筆者,筆者本身其實也是小白剛剛學習linux不就,但是對這些稀奇古怪的故障感覺很有興趣,所以筆者就掉進坑里搞了好久才搞出來點眉目來。為了讓更多學…

    Linux干貨 2016-10-24
  • Linux Basics–part3

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 ~]# who | cut -d” ” -f1 | sort -u centos ronny root 或 ~]# who | cut -d” ” -f1 | sort |uniq centos ronny root 2…

    Linux干貨 2017-08-07
欧美性久久久久