ln命令:軟鏈接與硬鏈接的區別與應用


ln命令:軟鏈接與硬鏈接的區別與應用

摘要

Linux系統中,鏈接是一個十分常見且實用的文件處理命令,它分為軟鏈接和硬鏈接兩種類型。軟鏈接類似於Windows中的快捷方式,硬鏈接又有着與原文件保持同步更新的特性,兩種鏈接方式各有特點,也各有其應用。接下來我們一起來深入認識一下這兩種鏈接方式。

ln命令詳解

英文原意:link

命令所在路徑:/bin/ln

執行權限:所有用戶

語法:

ln -s [原文件] [目標文件]

-s 創建軟鏈接
默認是硬鏈接(不指定-s)

功能描述:生成鏈接文件

范例:

> ln -s /etc/issue /tmp/issue.soft #創建文件/etc/issue的軟鏈接/tmp/issue.soft
> ln  /etc/issue /tmp/issue.hard #創建文件/etc/issue的硬鏈接/tmp/issue.hard

1. 軟鏈接

A. 特征:類似Windows快捷方式

(1) lrwxrwxrwx 其中l 表示軟鏈接。任何新建的軟鏈接文件權限都為rwxrwxrwx,此權限不決定原文件權限

(2) 文件大小-只是符號鏈接,非常小,一般只有十幾個字節,與原文件大小無關

(3) /tmp/issue.soft->/etc/issue 箭頭指向原文件

B. 應用場景:

Q:什么時候用軟鏈接文件?
A:需要快捷方式的時候就用軟鏈接文件,只是為了便於管理和使用。

2. 硬鏈接

A. 特征:

(1) 相當於 拷貝(cp -p) + 同步更新 的功能

實驗:

這里默認已經執行了范例中的命令創建了軟/硬鏈接

[root@centos7-master /]# cat /etc/issue #查看當前原文件內容
\S
Kernel \r on an \m

[root@centos7-master /]# cat /tmp/issue.hard #查看當前硬鏈接內容
\S
Kernel \r on an \m

[root@centos7-master /]# echo "this is a test" >> /etc/issue #向原文件末尾追加新內容
[root@centos7-master /]# cat /etc/issue #查看更新后原文件內容
\S
Kernel \r on an \m

this is a test
[root@centos7-master /]# cat /tmp/issue.hard #查看原文件更新后硬鏈接的內容
\S
Kernel \r on an \m

this is a test #可以看到,這里硬鏈接與原文件保持了同步更新
[root@centos7-master /]# rm /etc/issue #刪除原文件
rm: remove regular file ‘/etc/issue’? y
[root@centos7-master /]# cat /tmp/issue.soft #檢驗軟鏈接是否仍有效
cat: /tmp/issue.soft: No such file or directory
[root@centos7-master /]# cat /tmp/issue.hard #原文件就算刪除或丟失,硬鏈接依然可以訪問
\S
Kernel \r on an \m

this is a test

上述實驗我們可以看到,原文件有修改和更新,則硬鏈接也同步會進行更新;且原文件就算刪除或丟失,硬鏈接依然可以訪問,即如同拷貝(cp -p) + 同步更新功能。

(2) 可通過i節點識別。

一個文件一定有一個i節點,一個i節點不一定只對應一個文件。某文件的i節點和某文件的硬鏈接的i節點一般相同。當我們把原文件刪除,硬鏈接依然會映射到對應的i節點。

關於i節點的知識,請瀏覽這篇文章:——————

實驗:

軟鏈接很好判斷,如果軟鏈接對應的原文件被刪除后,我們通過ls查看軟鏈接的文件信息,會發現軟鏈接被標紅,並不停閃爍。

原文件被刪除后的軟鏈接被標紅並閃爍

如何判斷硬鏈接呢?我們分別創建軟/硬鏈接后查看i節點編號。

[root@centos7-master tmp]# cd /tmp
[root@centos7-master tmp]# ln issue.bak issue.bak.hard
[root@centos7-master tmp]# ln -s issue.bak issue.bak.soft
[root@centos7-master tmp]# ls -i issue.bak issue.bak.hard issue.bak.soft
8395173 issue.bak  8395173 issue.bak.hard  9116906 issue.bak.soft

可以看到,原文件的i節點編號是8395173,硬鏈接也是對應8395173編號的i節點的一個映射,而軟鏈接的i節點編號則不同。

這樣我們也可以十分容易理解為什么硬鏈接可以同步更新了,因為當我們對原文件進行修改操作時,在內核層面來看,這個操作實際上是針對對應的i節點進行操作,因為該i節點同時映射到了兩個文件,所以硬鏈接也自然能體現出同步更新。

(3) 硬鏈接不能跨分區,但軟鏈接可以

[root@centos7-master tmp]# ln /tmp/issue.bak /boot/issue.bak.hard
ln: failed to create hard link ‘/boot/issue.bak.hard’ => ‘/tmp/issue.bak’: Invalid cross-device link # 根分區/ 和 /boot分區不屬於同一個分區

[root@centos7-master tmp]# ln -s /tmp/issue.bak /boot/issue.bak.soft

這相當於在Windows下將C盤的一個文件硬鏈接到D盤,是不被系統允許的。

(4) 硬鏈接不能針對目錄使用,但軟鏈接可以

[root@centos7-master tmp]# ln /tmp /root/tmp.hard
ln: ‘/tmp’: hard link not allowed for directory

[root@centos7-master tmp]# ln -s /tmp /root/tmp.soft

這相當於在Windows下將D盤的一個目錄軟鏈接到桌面,系統是允許的。

B. 應用場景:

硬鏈接使用場景並不多,但可以將其作為一個實時備份來使用。

參考文獻

[1] 兄弟連.兄弟連Linux入門視頻教程[DB/OL].http://c.biancheng.net/view/1713.html,2018-12-21/2020-05-04


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM