前言
插播一下文件的軟硬鏈接,其實也與文件系統相關。理解了硬鏈接和軟鏈接也能夠更好的理解文件系統
硬鏈接,符號鏈接
- 硬鏈接:不同的目錄條目中指向相同的數據塊內容
- 符號鏈接:其目錄條目中,存放的是另一個路徑的文件名,文件大小爲存放路徑字符個數,權限都爲777
硬鏈接
ln src dest
- 只能對文件創建,不能應用與目錄 避免循環引用
- 目錄硬鏈接的數是2
- 不能跨文件系統,因爲inode不同
- 創建硬鏈接會增加文件被鏈接的次數
[ubpara link]$ls -il
總用量 8
660108 -rw-rw-r-- 1 ubpara ubpara 9 5月 14 19:41 a
660109 drwxrwxr-x 2 ubpara ubpara 4096 5月 14 19:42 test
[ubpara link]$ln a test/a
[ubpara link]$ls -il test/
總用量 4
660108 -rw-rw-r-- 2 ubpara ubpara 9 5月 14 19:41 a
[ubpara link]$ls -il
總用量 8
660108 -rw-rw-r-- 2 ubpara ubpara 9 5月 14 19:41 a
660109 drwxrwxr-x 2 ubpara ubpara 4096 5月 14 19:42 test
[ubpara link]$
在test中創建a的一個硬鏈接 其inode號不變,表示當前目錄的文件a和test目錄下的文件a都指向相同的數據塊。
660108 -rw-rw-r-- 2 ubpara ubpara 9 5月 14 19:41 a
2 代表硬鏈接數,從1變爲2,若刪除其中一個,硬鏈接數減1
軟鏈接,符號鏈接
ln -s -v src dest
- 可應用與目錄
- 可以跨文件系統
- 不會增加被鏈接文件的鏈接次數
- 其大小爲其執行的路徑所包含的字符個數
[ubpara link]$pwd
/home/ubpara/link
[ubpara link]$ln -sv /home/ubpara/link/a test/a
'test/a' -> '/home/ubpara/link/a'
[ubpara link]$ls -il test/
總用量 0
660116 lrwxrwxrwx 1 ubpara ubpara 19 5月 14 19:50 a -> /home/ubpara/link/a
[ubpara link]$ls -il .
總用量 8
660108 -rw-rw-r-- 1 ubpara ubpara 9 5月 14 19:41 a
660109 drwxrwxr-x 2 ubpara ubpara 4096 5月 14 19:50 test
[ubpara link]$
在test目錄下創建a的軟鏈接,其inode號不同,是因爲其新建的"目錄項"中的內容是 “/home/ubpara/link/a”,權限爲777
注:創建軟鏈接的時候,源文件需要爲絕對路徑,不然會以當前路徑(目標文件所在的路徑)來找其鏈接的文件,因爲其目錄項存放相對路徑
進階
[ubpara link]$ls
a test
[ubpara link]$ls -il test/
總用量 0
660116 lrwxrwxrwx 1 ubpara ubpara 19 5月 14 19:50 a -> /home/ubpara/link/a
[ubpara link]$cat test/a
hello
[ubpara link]$rm a
[ubpara link]$ls -il test/
總用量 0
660116 lrwxrwxrwx 1 ubpara ubpara 19 5月 14 19:50 a -> /home/ubpara/link/a
[ubpara link]$cat test/a
cat: test/a: 沒有那個文件或目錄
[ubpara link]$echo goodbye > a
[ubpara link]$ls -il test/
總用量 0
660116 lrwxrwxrwx 1 ubpara ubpara 19 5月 14 19:50 a -> /home/ubpara/link/a
[ubpara link]$cat test/a
goodbye
[ubpara link]$
若將a的原文件刪除,那麼a的鏈接就失效了,沒有那個文件或目錄。當在原路徑中在創建一個新的文件a,因爲在test目錄下的a的"目錄項"保存的路徑是"/home/ubpara/link/a" 不變,所以鏈接又能成功
總結
硬鏈接文件有兩個限制
- 只能對文件創建,不能應用與目錄 避免循環引用
- 目錄硬鏈接的數是2
- 不能跨文件系統,因爲inode不同
- 創建硬鏈接會增加文件被鏈接的次數
軟鏈接:
- 可應用與目錄
- 可以跨文件系統
- 不會增加被鏈接文件的鏈接次數
- 其大小爲其執行的路徑所包含的字符個數