1. 程式人生 > >linux 下的軟連接和硬鏈接

linux 下的軟連接和硬鏈接

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
    ```
    可以看出軟連接失效,但是硬鏈接不受影響
    1. linux 有個專門的指令 readlink,這個指令是得到軟連接的地址,比如上例中就可以得到軟鏈接指向的源文件的地址
    ubuntu@ubuntu-virtual-machine:~/work/shell/file$ readlink soft_test 
    test
    

    linux 下的軟連接和硬鏈接