1.命令
a.硬鏈接:
ln 源檔案 鏈接名
[root@localhost tmp]# ll -i
total 1
18319574 -rw-r--r-- 2 root root 1 Nov 28 18:07 e.txt
[root@localhost tmp]# ln e.txt f
[root@localhost tmp]# ll -i
total 2
18319574 -rw-r--r-- 2 root root 1 Nov 28 18:07 f
18319574 -rw-r--r-- 2 root root 1 Nov 28 18:07 e.txt
b.軟鏈接:
ln -s 源目錄或者源檔案 鏈接名
[root@localhost tmp]# ll -i
total 2
18319579 drw-r--r-- 2 root root 1 Nov 28 18:07 a
18319574 -rw-r--r-- 2 root root 1 Nov 28 18:07 e.txt
[root@localhost tmp]# ln -s e.txt g
[root@localhost tmp]# ll -i
total 3
18319579 drw-r--r-- 2 root root 1 Nov 28 18:07 a
18319574 -rw-r--r-- 2 root root 1 Nov 28 18:07 e.txt
18319578 lrw-r--r-- 2 root root 1 Nov 28 18:07 g -> e.txt
[root@localhost tmp]# ln -s a b
[root@localhost tmp]# ll -i
total 4
18319579 drw-r--r-- 2 root root 1 Nov 28 18:07 a
18319670 lrw-r--r-- 1 root root 1 Nov 28 18:07 b -> a
18319574 -rw-r--r-- 2 root root 1 Nov 28 18:07 e.txt
18319578 lrw-r--r-- 2 root root 1 Nov 28 18:07 g -> e.txt
2.原理:
硬鏈接(hard link):A是B的硬鏈接(A和B都是檔案名),則A的目錄項中的inode節點號與B的目錄項中的inode節點號相同,即一個inode節點對應兩個不同的檔案名,兩個檔案名指向同一個檔案,A和B對檔案系統來說是完全平等的,如果洗掉了其中一個,對另外一個沒有影響,每增加一個檔案名,inode節點上的鏈接數增加一,每洗掉一個對應的檔案名,inode節點上的鏈接數減一,直到為0,inode節點和對應的資料塊被回收,注:檔案和檔案名是不同的東西,rm A洗掉的只是A這個檔案名,而A對應的資料塊(檔案)只有在inode節點鏈接數減少為0的時候才會被系統回收,
軟鏈接(soft link):A是B的軟鏈接(A和B都是檔案名),A的目錄項中的inode節點號與B的目錄項中的inode節點號不相同,A和B指向的是兩個不同的inode,繼而指向兩塊不同的資料塊,但是A的資料塊中存放的只是B的路徑名(可以根據這個找到B的目錄項),A和B之間是“主從”關系,如果B被洗掉了,A仍然存在(因為兩個是不同的檔案),但指向的是一個無效的鏈接,
3.硬鏈接
a.不能對目錄創建硬鏈接,只能對檔案創建硬鏈接
原因有幾種,最重要的是:檔案系統不能存在鏈接環(目錄創建時的".."除外,這個系統可以識別出來),存在環的后果會導致例如檔案遍歷等操作的混亂(du,pwd等命令的運作原理就是基于檔案硬鏈接,順便一提,ls -l結果的第二列也是檔案的硬鏈接數,即inode節點的鏈接數)
b.不可以跨檔案系統,即不能對不同的檔案系統創建硬鏈接,兩個檔案名要在相同的檔案系統下,
c.不能對不存在的檔案創建硬鏈接,由原理即可知原因,
4.軟鏈接
a.既可以對檔案創建軟鏈接,又可以對目錄創建軟鏈接,遍歷操作會忽略目錄的軟鏈接,
b.可以跨檔案系統
c.可以對不存在的檔案創建軟鏈接,因為放的只是一個字串,至于這個字串是不是對于一個實際的檔案,就是另外一回事了
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/151033.html
標籤:Linux
