歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux中的硬鏈接和軟鏈接

一 Linux鏈接概念

Linux鏈接分兩種,一種被稱為硬鏈接(HardLink),另一種被稱為符號鏈接(Symbolic Link)。默認情況下,ln命令產生硬鏈接,加-s參數產生軟鏈接。

【硬鏈接】

硬鏈接指通過索引節點來進行鏈接。在Linux的文件系統中,保存在磁盤分區中的文件不管是什麼類型都給它分配一個編號,稱為索引節點號(Inode Index)。在Linux中,多個文件名指向同一索引節點是存在的。一般這種鏈接就是硬鏈接。硬鏈接的作用是允許一個文件擁有多個有效路徑名,這樣用戶就可以建立硬鏈接到重要文件,以防止“誤刪”的功能。其原因如上所述,因為對應該目錄的索引節點有一個以上的鏈接。只刪除一個鏈接並不影響索引節點本身和其它的鏈接,只有當最後一個鏈接被刪除後,文件的數據塊及目錄的鏈接才會被釋放。也就是說,文件真正刪除的條件是與之相關的所有硬鏈接文件均被刪除。

硬鏈接的2個限制:

不允許給目錄創建硬鏈接

只有在同一文件系統中的文件之間才能創建鏈接。即不同硬盤分區上的兩個文件之間不能夠建立硬鏈接。這是因為硬鏈接是通過結點指向原始文件的,而文件的i-結點在不同的文件系統中可能會不同。

【軟鏈接】

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

這就允許符號鏈接(經常簡寫為symlinks)指向位於其他分區、甚至是其他網絡硬盤上的某個文件。

二 現在看個示例:

首先,我們創建一個文件file1,並向文件file1輸入hello

[www.linuxidc.com @localhost test]$ touch file1
[www.linuxidc.com @localhost test]$ echo "hello" > file1
[www.linuxidc.com @localhost test]$ cat file1
hello

查看file1的詳細信息,可以看到只有一個鏈接

[www.linuxidc.com @localhost test]$ ll
total 4
-rw-rw-r-- 1 www.linuxidc.com  www.linuxidc.com  6 Jul 19 09:21 file1

創建硬鏈接後,再次查看鏈接數,發現變為2

[www.linuxidc.com @localhost test]$ ln file1 file2
[www.linuxidc.com @localhost test]$ ll
total 8
-rw-rw-r-- 2 www.linuxidc.com  www.linuxidc.com  6 Jul 19 09:21 file1
-rw-rw-r-- 2 www.linuxidc.com  www.linuxidc.com  6 Jul 19 09:21 file2

查看file2的內容,與file1相同

[www.linuxidc.com @localhost test]$ cat file2
hello

此時,我們刪除file2,再次查看file1的詳細信息,發現鏈接數減1

[www.linuxidc.com @localhost test]$ rm -rf file2
[www.linuxidc.com @localhost test]$ ll
total 4
-rw-rw-r-- 1 www.linuxidc.com  www.linuxidc.com  6 Jul 19 09:21 file1

查看file1的內容,仍然存在

[www.linuxidc.com @localhost test]$ cat file1
hello

刪掉file1,再次查看,文件已經被徹底刪除了

[www.linuxidc.com @localhost test]$ rm -rf file1
[www.linuxidc.com @localhost test]$ ll
total 0

我們再次創建一個文件file1,並向文件file1輸入hello

[www.linuxidc.com @localhost test]$ touch file1
[www.linuxidc.com @localhost test]$ echo "hello" > file1

創建軟鏈接(加上-s參數)

[www.linuxidc.com @localhost test]$ ln -s file1 file2

查看file1和file2的詳細信息,鏈接數都為1,但是可以看到file2指向file1

[www.linuxidc.com @localhost test]$ ll
total 4
-rw-rw-r-- 1 www.linuxidc.com  www.linuxidc.com  6 Jul 19 09:22 file1
lrwxrwxrwx 1 www.linuxidc.com  www.linuxidc.com  5 Jul 19 09:23 file2 -> file1

查看file1和file2的內容,都是相同的

[www.linuxidc.com @localhost test]$ cat file1
hello
[www.linuxidc.com @localhost test]$ cat file2
hello

刪掉file1,查看詳細信息,軟鏈接仍然存在,但是查看file2的內容,會提示,沒有此文件或者目錄

[www.linuxidc.com @localhost test]$ rm -f file1
[www.linuxidc.com @localhost test]$ ll
total 0
lrwxrwxrwx 1 www.linuxidc.com  www.linuxidc.com  5 Jul 19 09:23 file2 -> file1
[www.linuxidc.com @localhost test]$ cat file2
cat: file2: No such file or directory

刪除掉file2

[www.linuxidc.com @localhost test]$ rm -f file2
[www.linuxidc.com @localhost test]$ ll
total 0

測試完文件,我們再來看看硬鏈接和軟鏈接在目錄上的不同

創建目錄dir1,並在dir1上創建硬鏈接,會提示“不允許在命令上創建硬鏈接“

[www.linuxidc.com @localhost test]$ mkdir dir1
[www.linuxidc.com @localhost test]$ ln dir1 dir2
ln: `dir1': hard link not allowed for directory

我們在目錄dir1上創建軟鏈接,發現測試通過

[www.linuxidc.com @localhost test]$ ln -s dir1 dir2
[www.linuxidc.com @localhost test]$ ll
total 4
drwxrwxr-x 2 www.linuxidc.com  www.linuxidc.com  4096 Jul 19 09:24 dir1
lrwxrwxrwx 1 www.linuxidc.com  www.linuxidc.com    4 Jul 19 09:24 dir2 -> dir1

三 總結

1.一般普通文件鏈接數為1,目錄一般鏈接數為2。

2.硬鏈接和軟鏈接

硬鏈接(Hard Link): 不能跨越分區,相同的節點,不能作用於目錄

軟鏈接(Soft Link): 亦稱符號鏈接,指向不同的節點,文件的內容是指向的文件名,但是讀取時讀取指向文件的內容,可以跨越文件系統,可以作用於目錄。

3.可以使用unlink命令減少鏈接數。

4.當刪除原始文件後,硬鏈接不受影響,但是符號鏈接文件無效;刪除符號鏈接,對原文件、硬鏈接文件無影響;刪除硬鏈接,對原文件、符號鏈接也無影響;刪除原文件,對硬鏈接文件沒有影響,但導致符號鏈接文件失效;同時刪除原文件,硬鏈接,整個文件會真正的被刪除,因為他們的指向相同。

四 參考資料

http://www.linuxidc.com/Linux/2011-05/35888.htm

Copyright © Linux教程網 All Rights Reserved