linux 下的軟連接和硬鏈接
阿新 • • 發佈:2018-03-06
linux 軟連接 linux硬鏈接 linux下創建硬鏈接相當於對源文件的拷貝,生成的新文件和源文件的inode值時一致的,當源文件刪除後,硬鏈接不會失效
軟連接類似於源文件的快捷方式,兩者的inode不同,它裏面保存的時源文件的路徑信息,當源文件的刪除消失後,軟連接失效,此時如果在新建源文件,則軟鏈接繼續生效
測試一下
實驗環境:ubuntu 14.04 kernel:3.13.0-24-generic
1. 新建一個測試文件
touch test
使用stat或者ls -i選項去查看test的inode值 ``` ubuntu@ubuntu-virtual-machine:~/work/shell/file$ stat test 文件:"test" 大小:0 塊:0 IO 塊:4096 普通空文件 設備:801h/2049d Inode:4208823 硬鏈接:1 權限:(0664/-rw-rw-r--) Uid:( 1000/ ubuntu) Gid:( 1000/ ubuntu) 最近訪問:2018-03-06 15:51:01.689080893 +0800 最近更改:2018-03-06 15:51:01.689080893 +0800 最近改動:2018-03-06 15:51:01.689080893 +0800 創建時間:- ``` inode 值是 Inode:4208823 2. 創建硬鏈接 ``` ubuntu@ubuntu-virtual-machine:~/work/shell/file$ ln test hard_test ubuntu@ubuntu-virtual-machine:~/work/shell/file$ stat hard_test 文件:"hard_test" 大小:0 塊:0 IO 塊:4096 普通空文件 設備:801h/2049d Inode:4208823 硬鏈接:2 權限:(0664/-rw-rw-r--) Uid:( 1000/ ubuntu) Gid:( 1000/ ubuntu) 最近訪問:2018-03-06 15:51:01.689080893 +0800 最近更改:2018-03-06 15:51:01.689080893 +0800 最近改動:2018-03-06 15:53:54.857425605 +0800 創建時間:- ``` 可以看出inode 相同 3. 創建軟連接 ``` ubuntu@ubuntu-virtual-machine:~/work/shell/file$ ln -s test soft_test ubuntu@ubuntu-virtual-machine:~/work/shell/file$ stat soft_test
文件:"soft_test" -> "test"
大小:4 塊:0 IO 塊:4096 符號鏈接
設備:801h/2049d Inode:4208824 硬鏈接:1
權限:(0777/lrwxrwxrwx) Uid:( 1000/ ubuntu) Gid:( 1000/ ubuntu)
最近訪問:2018-03-06 15:56:35.129543502 +0800
最近更改:2018-03-06 15:55:04.201563628 +0800
最近改動:2018-03-06 15:55:04.201563628 +0800
創建時間:-
``` 可以看出,inode不同,軟連接和源文件是兩個不同的文件,只是它其中保存的是源文件的路徑 現在在源文件中寫入內容,觀察三個的文件的變化 ``` ubuntu@ubuntu-virtual-machine:~/work/shell/file$ echo "123" >test ubuntu@ubuntu-virtual-machine:~/work/shell/file$ ubuntu@ubuntu-virtual-machine:~/work/shell/file$ cat test 123 ubuntu@ubuntu-virtual-machine:~/work/shell/file$ cat soft_test 123 ubuntu@ubuntu-virtual-machine:~/work/shell/file$ cat hard_test 123 ubuntu@ubuntu-virtual-machine:~/work/shell/file$ echo "456" >>hard_test ubuntu@ubuntu-virtual-machine:~/work/shell/file$ cat hard_test 123 456 ubuntu@ubuntu-virtual-machine:~/work/shell/file$ cat test 123 456 ubuntu@ubuntu-virtual-machine:~/work/shell/file$ cat soft_testtest cat: soft_testtest: 沒有那個文件或目錄 ubuntu@ubuntu-virtual-machine:~/work/shell/file$ cat soft_test 123 456 ``` 4. 刪除源文件觀察 ``` ubuntu@ubuntu-virtual-machine:~/work/shell/file$ rm test ubuntu@ubuntu-virtual-machine:~/work/shell/file$ ll 總用量 12 drwxrwxr-x 2 ubuntu ubuntu 4096 3月 6 16:01 ./ drwxrwxr-x 3 ubuntu ubuntu 4096 3月 6 15:25 ../ -rw-rw-r-- 1 ubuntu ubuntu 12 3月 6 16:00 hard_test lrwxrwxrwx 1 ubuntu ubuntu 4 3月 6 15:55 soft_test -> test ubuntu@ubuntu-virtual-machine:~/work/shell/file$ cat soft_test cat: soft_test: 沒有那個文件或目錄 ubuntu@ubuntu-virtual-machine:~/work/shell/file$ cat hard_test 123 456 789 ``` 可以看出軟連接失效,但是硬鏈接不受影響
- linux 有個專門的指令 readlink,這個指令是得到軟連接的地址,比如上例中就可以得到軟鏈接指向的源文件的地址
ubuntu@ubuntu-virtual-machine:~/work/shell/file$ readlink soft_test
test
linux 下的軟連接和硬鏈接