1. 鏈接概念:
在Linux 系統中,鏈接可以分為兩種:ㄧ種為硬鏈接(Hard link),另一種為軟鏈接或符號鏈接(symbolic Link or soft link)。
我們前面講過ln這個命令就是創建鏈接文件的,在默認不帶參數的情況下,執行ln命令創建的鏈接是硬鏈接
如果使用ln -s 創建鏈接則為軟鏈接,前面文件類型為l(字母L)的是軟鏈接
實踐直觀命令演示理解:
硬鏈接: ln 源文件 目標文件 ---->透過索引節點(inode)來進行鏈接
軟鏈接: ln -s 源文件 目標文件 (目標文件不能事先存在)
1.1 硬鏈接:
1)透過索引節點(inode)來進行鏈接
2)硬鏈接文件就將當於文件的另外一個入口
3)允許ㄧ個文件擁有多個有效的路徑名(多個入口)
4)可以避免檔案被誤刪而不見
演示:
[root@oldboy oldboy]# pwd /oldboy [root@oldboy oldboy]# echo 1 > a [root@oldboy oldboy]# ls -l a -rw-r--r--. 1 root root 2 Jul 17 22:40 a [root@oldboy oldboy]# cat a 1 [root@oldboy oldboy]# ln a b [root@oldboy oldboy]# ls -hil a b ----->注意 兩個文件的inode號相同 390210 -rw-r--r--. 2 root root 2 Jul 17 22:40 a 390210 -rw-r--r--. 2 root root 2 Jul 17 22:40 b [root@oldboy oldboy]# rm -rf a [root@oldboy oldboy]# ls -lhi a b ls: cannot access a: No such file or directory 390210 -rw-r--r--. 1 root root 2 Jul 17 22:40 b [root@oldboy oldboy]# cat b 1
因為文件系統(ext2)的原理是,只要文件的索引節點號(inode index)還有一個以上的硬鏈接,只刪除其中一個
硬鏈接(即僅僅刪除了該文件的鏈接指向)並不影響索引節點本身和其他的鏈接(即數據文件實體並未被刪除),只
有當文件的最後一個鏈接被刪除後,此時如果有新數據要存儲在硬盤上時或者系統通過類似fsck做硬盤檢查時。
被刪除文件的數據以及目錄的鏈接才會被釋放,空間被新數據占用並覆蓋。此時,數據就再也無法找回了。也就是說,
在Linux系統中,刪除靜態文件(沒有進程調用) (目錄也是文件)的條件是與之相關的所有硬鏈接文件均被刪除。(暫時這樣理解即可,後文會講和進程的占用也有關)
硬鏈接的創建:
直接執行命令"ln 源文件 硬鏈接文件" ,即可完成創建硬鏈接,具體實例後文演示。
硬鏈接知識小結:
1) 具有相同inode節點號的多個文件互為硬鏈接文件
2) 刪除硬鏈接文件或者刪除源文件任意之ㄧ,文件實體並沒有被刪除
3) 只有刪除了源文件以及所有對應的硬鏈接文件,文件實體才會被刪除
4) 當所有的硬鏈接文件及源文件被刪除後,再存放新的數據會占用這個文件的空間,或者時磁盤fsck檢查的時候,刪除的數據也會被系統回收
5) 硬鏈接文件就是文件的另一個入口(相當於超市的前門跟後門ㄧ樣)
6) 可以透過給文件設置硬鏈接文件,來防止重要文件被誤刪
7) 透過執行命令 "ln 源文件 硬鏈接文件",即可完成創建應鏈接
8) 硬鏈接文件是普通文件,因此可以用rm 命令刪除
9) 對於靜態文件 (沒有進程正在調用的文件)來講,當對應硬鏈接數為0 (i_link),文件就被刪除。i_link的查看方法就是(ls -l 結果的第三列就是)
1.2 軟鏈接
軟鏈接(Soft Link)也稱為符號鏈接(Symbolic Link)。linux 裡的軟鏈接文件就類似於windows系統中的快捷方式。linux裡的軟鏈接文件實際上是一個特殊的文件,
文件類型是l。軟鏈接文件實際上可以理解為ㄧ個文本文件,這個文本文件中包含有軟鏈接指向另ㄧ源文件的位置信息內容,因此,通過訪問這個"快捷文件"就可以迅速定位到
軟鏈接指向的源文件實體。
演示:
[root@oldboy oldboy]# touch file [root@oldboy oldboy]# ln -s file soft_file [root@oldboy oldboy]# ls -lhi file soft_file ---->兩者的inode號不同 390210 -rw-r--r--. 1 root root 0 Jul 17 23:33 file 390227 lrwxrwxrwx. 1 root root 4 Jul 17 23:34 soft_file -> file
軟鏈接的創建:
執行命令"ln -s 源文件 軟鏈接文件",即可完成創建軟鏈接,具體實例後文演示
誤區: 創建軟鏈接源文件是需要存在的,要創建的軟鏈接文件是不能存在的,是要用ln命令創建的。
軟鏈接知識小結:
1) 軟鏈接類似windows的快捷方式(可以透過readlink查看其指向)
2) 軟鏈接類似ㄧ個文本文件,裡面存放的是源文件的路徑,指向源文件實體。
3) 刪除源文件,軟鏈接文件依然存在,但是無法訪問指向的源文件路徑內容了。
4) 失效的時候ㄧ般是白字紅底閃爍提示。oldboy_soft_link_file --> oldboy_file
5) 執行命令"ln -s 源文件 軟鏈接文件",即可完成創建軟鏈接(目標不能存在)
6) 軟鏈接和源文件是不同類型的文件,也是不同的文件。inode號也不同。
7) 軟鏈接的文件類型為(l),可以用rm 命令。
綜合演示:
[root@oldboy oldboy]# mkdir /test/oldboy -p [root@oldboy oldboy]# cd /test/oldboy/ [root@oldboy oldboy]# touch oldboyfile [root@oldboy oldboy]# ln oldboyfile oldboy_hard_link [root@oldboy oldboy]# ln -s oldboyfile oldboyfile_soft_link [root@oldboy oldboy]# ls -lhi ---->此處要注意inode號的不同與相同 total 0 402520 -rw-r--r--. 2 root root 0 Jul 18 22:25 oldboyfile 402521 lrwxrwxrwx. 1 root root 10 Jul 18 22:26 oldboyfile_soft_link -> oldboyfile 402520 -rw-r--r--. 2 root root 0 Jul 18 22:25 oldboy_hard_link
1.3. 有關文件的鏈接小結:
透過以上的測試,我們可以得到以下幾個結論:
1)刪除軟鏈接 oldboyfile_soft_link ,對oldboyfile, oldboy_hard_link無影響。
全局討論:刪除軟鏈接文件對源文件及硬鏈接文件沒有任何影響。
2)刪除硬鏈接 oldboy_hard_link, 對oldboyfile, oldboyfile_soft_link都沒有影響。
全局討論: 刪除硬鏈接文件對源文件及軟鏈接文件沒有任何影響。
3)刪除原文件 oldboyfile ,對oldboy_hard_link沒有影響,但是會導致 oldboyfile_soft_link失效
全局討論: 刪除源文件,對硬鏈接文件沒有影響,但是會導致軟鏈接失效,白字紅底閃爍。
4)同時刪除源文件oldboyfile及硬鏈接oldboy_hard_link,才會導致文件真的被刪除。
5)很多硬件設備中的快照功能,就是利用了硬鏈接的原理。
6)源文件和硬鏈接文件具有相同的inode號,可以視為同一個文件或ㄧ個文件的多個入口
7)源文件和軟鏈接文件inode號不同,是不同的文件,軟鏈接文件相當於源文件的快捷方式,含有源文件的位置指向。
1.4 有關目錄的鏈接小結:
1)對於目錄,不可以創建硬鏈接,但可以創件軟鏈接
2)對於目錄的軟鏈接是生產場景運維中常用的技巧(例子:第二關課前apache企業題)
3)目錄的硬鏈接不能跨越文件系統(從硬鏈接原理可以理解)
4)每個目錄下面都有一個硬鏈接"."號,和對應上級目錄的硬鏈接".."
5)在父目錄裡創件ㄧ個子目錄,父目錄的鏈接數增加1(子目錄裡都有..指向父目錄)
但是在父目錄裡創建文件,父目錄的鏈接數不會增加
實例演示:
[root@oldboy oldboy]# mkdir oldboydir [root@oldboy oldboy]# ln oldboydir oldboydir_hard_link ln: `oldboydir‘: hard link not allowed for directory ---->不能創建硬鏈接 [root@oldboy oldboy]# ln -s oldboydir oldboydir_soft_link [root@oldboy oldboy]# ls -lhi total 4.0K 402522 drwxr-xr-x. 2 root root 4.0K Jul 18 23:05 oldboydir 402520 lrwxrwxrwx. 1 root root 9 Jul 18 23:06 oldboydir_soft_link -> oldboydir [root@oldboy oldboy]# ls -a oldboydir oldboydir/. -ldi ---->注意inode號是相同的 402522 drwxr-xr-x. 2 root root 4096 Jul 18 23:05 oldboydir 402522 drwxr-xr-x. 2 root root 4096 Jul 18 23:05 oldboydir/. [root@oldboy oldboy]# ls -a oldboydir/.. ../oldboy/ -ldi ---->注意inode號是相同的 402519 drwxr-xr-x. 3 root root 4096 Jul 18 23:06 ../oldboy/ (本身ㄧ個,下面的點ㄧ個,下面裡的目錄裡面的..也是一個) 402519 drwxr-xr-x. 3 root root 4096 Jul 18 23:06 oldboydir/..
1.5 企業面試題:
企業面試題10:描述linux下軟鏈接和硬鏈接的區別
1) 默認不帶參數情況下,ln命令創建的是硬鏈接,帶-s 參數的ln命令創建的是軟鏈接
2) 軟鏈接文件與源文件的inode節點號相同,而軟鏈接文件的inode節點號與源文件不同
3) ln命令不能對目錄創建硬鏈接,但可以創建軟鏈接,對目錄的軟鏈接會經常被用到
4) 刪除軟鏈接文件,對源文件及硬鏈接文件無任何影響
5) 刪除文件的硬鏈接,對源文件及軟鏈接文件無任何影響
6) 刪除鏈接文件的源文件,對硬鏈接文件無影響,但會導致軟鏈接文件失效
7) 同時刪除源文件及其硬鏈接文件,整個文件才會被徹底刪除
8) 很多硬件設備中的快照功能,使用的就類似硬鏈接的原理
9) 軟鏈接文件可以跨文件系統,硬鏈接文件不可以跨文件系統
上述企業面試題的必勝思路1:
1.介紹軟硬鏈接的概念
2.如何創建軟硬鏈接
3.對於文件的軟硬鏈接區別
4.對於目錄的軟硬鏈接區別
上述企業面試題的必勝思路2:畫圖
企業案例:
Web服务器磁盘满故障深入解析
C.P http://oldboy.blog.51cto.com/2561410/612351
實際操作請看企業案例(1)
本文出自 “我的Linux之夢” 博客,请务必保留此出处http://12098022.blog.51cto.com/12088022/1950058
原文地址:http://12098022.blog.51cto.com/12088022/1950058