1. 程式人生 > >Linux的硬鏈接和軟鏈接

Linux的硬鏈接和軟鏈接

Linux運維

硬鏈接和軟鏈接

Linux鏈接分兩種:

? 一種被稱為硬鏈接(Hard Link),

? 另一種被稱為符號鏈接(Symbolic Link)。

默認情況下,ln命令創建硬鏈接, ln -s 創建軟連接


【硬連接】

硬連接指通過索引節點來進行連接。

在Linux的文件系統中,保存在磁盤分區中的文件不管是什麽類型都給它分配一個編號,稱為索引節點號(Inode Index)。

多個文件名指向同一索引節點是存在的,一般這種連接就是硬連接。

硬連接的作用是允許一個文件擁有多個有效路徑名,這樣用戶就可以建立硬連接到重要文件,以防止“誤刪”的功能。因為只刪除一個連接並不影響索引節點本身和其它的連接,只有當最後一個連接都被刪除後,文件的數據塊及目錄的連接才會被釋放。也就是說,文件真正刪除的條件是與之相關的所有硬連接文件均被刪除。

創建硬鏈接

ln命令

語法格式:

? ln 源文件 目標文件(目標文件可以不存在,在創建鏈接時候會默認創建同名的文件)

示例:

[root@anuo ~]# mkdir anuo
[root@anuo ~]# ln anuo/ /tmp/
ln: "/tmp/": 不允許將硬鏈接指向目錄

[root@anuo ~]# touch anuo.txt
[root@anuo ~]# ln anuo.txt /tmp/    --創建鏈接到/tmp/目錄下
[root@anuo ~]# ll
-rw-r--r--  2 root root     0 5月  13 17:54 anuo.txt
[root@anuo ~]# ll /tmp/
-rw-r--r--  1 root root     12 5月  13 17:57 anuo.txt

[root@anuo ~]# cat /tmp/anuo.txt    
[root@anuo ~]# echo "123456" >> /tmp/anuo.txt   --往鏈接文件裏追加內容
[root@anuo ~]# cat anuo.txt     --查看源文件也增加了一樣的內容
123456

[root@anuo ~]# echo "abcd" >> anuo.txt  --給源文件追加內容
[root@anuo ~]# cat /tmp/anuo.txt    --鏈接文件也一樣增加相同的內容
123456
abcd

[root@anuo ~]# \rm anuo.txt -f  --刪除源文件
[root@anuo ~]# cat /tmp/anuo.txt    --鏈接文件不變
123456
abcd

小結:

優點:硬鏈接相當於給文件做了備份,而且還是實時的互相備份,源文件變化鏈接文件也變化,源文件被刪除,也不影響鏈接文件的正常使用

缺點:硬鏈接 無法針對目錄,跨分區無法實現


【軟連接】

另外一種連接稱之為符號連接(Symbolic Link),也叫軟連接。軟鏈接文件有類似於Windows的快捷方式。它實際上是一個特殊的文件。在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息。

創建軟連接

語法: ln -s 源文件 目標文件

示例:

目錄測試:

[root@anuo ~]# mkdir anuo
[root@anuo ~]# ln -s anuo/ abc
[root@anuo ~]# ll
總用量 4
lrwxrwxrwx 1 root root    5 5月  13 19:39 abc -> anuo/
drwxr-xr-x 2 root root 4096 5月  13 19:36 anuo
[root@anuo ~]# touch anuo/{a..c}.txt    --在源目錄創建文件
[root@anuo ~]# cd abc/      --鏈接目錄下也會有
[root@anuo abc]# ls
a.txt  b.txt  c.txt

[root@anuo ~]# touch abc/{1..5}.txt     --在鏈接目錄裏創建文件
[root@anuo ~]# ll abc/
總用量 0
-rw-r--r-- 1 root root 0 5月  13 19:42 1.txt
-rw-r--r-- 1 root root 0 5月  13 19:42 2.txt
……
[root@anuo ~]# ll anuo/     --查看到源目錄裏也有了
總用量 0
-rw-r--r-- 1 root root 0 5月  13 19:42 1.txt
-rw-r--r-- 1 root root 0 5月  13 19:42 2.txt
……
[root@anuo ~]# \rm anuo/ -rf    --刪除源目錄
[root@anuo ~]# cd abc       
-bash: cd: abc: 沒有那個文件或目錄
[root@anuo ~]# ll       --可以看到鏈接目錄還在,但失效了
總用量 0
lrwxrwxrwx 1 root root 5 5月  13 19:39 abc -> anuo/

文件測試:

[root@anuo ~]# touch anuo.txt
[root@anuo ~]# ln -s anuo.txt  abc.txt
[root@anuo ~]# ll
總用量 4
lrwxrwxrwx 1 root root    5 5月  13 19:51 abc -> anuo/
lrwxrwxrwx 1 root root    8 5月  13 19:55 abc.txt -> anuo.txt
drwxr-xr-x 2 root root 4096 5月  13 19:51 anuo
-rw-r--r-- 1 root root    0 5月  13 19:55 anuo.txt
[root@anuo ~]# echo "123456" >>anuo.txt 
[root@anuo ~]# cat abc.txt 
123456
[root@anuo ~]# echo "abcd123" >>abc.txt 
[root@anuo ~]# cat anuo.txt 
123456
abcd123

[root@anuo ~]# \rm abc.txt      --刪除鏈接文件
[root@anuo ~]# ll
總用量 8
lrwxrwxrwx 1 root root    5 5月  13 19:51 abc -> anuo/
drwxr-xr-x 2 root root 4096 5月  13 19:51 anuo
-rw-r--r-- 1 root root   15 5月  13 19:56 anuo.txt
[root@anuo ~]# cat anuo.txt     --源文件還存在沒有影響
123456
abcd123

[root@anuo ~]# ln -s anuo.txt abc.txt   --再創建鏈接
[root@anuo ~]# cat abc.txt 
123456
abcd123
[root@anuo ~]# \rm anuo.txt     --刪除源文件
[root@anuo ~]# ll
總用量 4
lrwxrwxrwx 1 root root    5 5月  13 19:51 abc -> anuo/
lrwxrwxrwx 1 root root    8 5月  13 20:01 abc.txt -> anuo.txt
drwxr-xr-x 2 root root 4096 5月  13 19:51 anuo
[root@anuo ~]# cat abc.txt      --鏈接文件也失效了
cat: abc.txt: 沒有那個文件或目錄

源文件被刪除,鏈接文件失效

能針對目錄創建

能跨分區創建

軟鏈接:相當於windows中的快捷方式

Linux的硬鏈接和軟鏈接