1. 程式人生 > >Linux下軟連結與硬連結

Linux下軟連結與硬連結

硬連結就是同一個檔案使用了多個別名(他們有共同的inode編號)。
硬連結可由命令link或in建立,如

link existing-file new-link
ln existing-file new-link

由於硬連結有著相同的inode編號,因此,刪除一個硬連結檔案並不影響其他有相同inode號的檔案

硬連結不能對目錄進行建立,只可對檔案進行建立
硬連結只有在同一檔案系統中的檔案之間才能建立

ls -l後中的1,2代表檔案的硬連結數目

➜ ls -l
total 120
-rw-rw-r--  1 cherry  staff   6517  9  8  2015 BPMDetect.
h -rw-rw-r-- 2 cherry staff 7507 9 8 2015 FIFOSampleBuffer.h

ls -i 顯示檔案對應的inode編號,可以看到Makefile.am和Makefile.am.link的檔案inode編號相同。

➜ ls -i
3739963 BPMDetect.h            3739962 FIFOSamplePipe.h       3739961 Makefile.am.link       3739960 SoundTouch.h
3739957 FIFOSampleBuffer.h     3739961 Makefile.am
3739959 STTypes.h 3739958 soundtouch_config.h.in

軟連結(soft link)(也叫符號連結(symbolic link))與硬連結不同,檔案使用者資料塊中存放的內容是另一檔案路徑名的指向。軟連結就是一個普通檔案,只是資料塊內容有點特殊。
使用者對符號檔案進行讀與寫操作的時候,系統會自動把該操作轉換為對原檔案的操作,但是刪除符號連結檔案時,系統僅僅刪除符號連結,而不刪除原始檔本身。刪除軟連結並不影響被指向的檔案,但若被指向的原檔案被刪除,則相關軟連結就變成了死連結。

符號連結的一個很大的優勢是它可以指向不存在的檔案。此優勢使得可以為某個間斷性被刪除和建立的檔案建立連結。符號連結可保持對已刪除檔案的指向,即使已經建立了一個新檔案,而符號連結總是指向新建立的檔案,而不干涉舊檔案的刪除。例如:符號連結可以指向一個需要在原始碼控制系統下進行登記和檢驗的檔案,或者指向一個每執行一次make由c編譯器重新建立的.o檔案,或者指向一個週期性存檔的日誌檔案。

軟連結可對檔案或目錄建立。

ln -s old.file soft.link
ln -s old.dir soft.link.dir

加-s選項代表建立的是軟連結。

ls -l 軟連結的屬性:

➜  include ln -s Makefile.am m
➜  include ls
m Makefile.am       
➜  include ls -l
total 128
lrwxr-xr-x  1 cherry  staff     11  4 12 13:46 m -> Makefile.am
-rw-rw-r--  1 cherry  staff   1202  9  8  2015 Makefile.am

cp與ln
cp建立了檔案的副本,ln命令沒有建立檔案的副本,修改其中一個檔案的內容在其他連結檔案中均可看到。