linux鏈接
linux鏈接
linux鏈接簡介
在linux系統中,鏈接可以分為兩種,一種為硬鏈接(Hard Link),另一種為軟鏈接或符號鏈接(Symbolic Link or Soft Link).
在默認不帶參數的情況下,執行ln命令創建的鏈接就是硬鏈接。
如果使用ln -s 創建鏈接則為軟鏈接,前面文件類型為l(字母L)的就是軟鏈接。
例子:
硬鏈接 :ln 源文件 目標文件;
軟鏈接:ln -s 源文件 目標文件(目標文件不能事先存在)
硬鏈接簡介
指索引節點(Inode)來進行鏈接,在linux(ext2/ext3/ext4)文件系統中,保存在磁盤分區中的文件不管是什麽類型都會給它分配一個編號,這個編號被稱為索引節點號編號(index inode)簡稱inode,即在系統中文件的編號。在linux文件系統中,多個文件名指向同一個索引節點(inode)是正常且允許的,這種情況的文件就稱為硬鏈接。提示:硬鏈接文件就相當於文件的另一個入口,硬鏈接的作用之一是允許一個文件擁有多個有效路徑名(多個入口),這樣用戶就可以建立硬鏈接到重要的文件,以防止“誤刪”源數據(很多硬件存儲,如netapp存儲中的快照功能就應用了這個原理,增加一個快照就多了一個硬鏈接。)
為什麽一個文件建立了硬鏈接就會防止數據誤刪呢?
因為文件系統(ext2)的原理是,只要文件的索引節點(inode index)還有一個以上的硬鏈接;如果只刪除其中一個硬鏈接(即僅僅刪除了該文件的鏈接指向)並不影響索引節點本身和其他鏈接(即數據文件實體並未被刪除),只有當文件的最後一個鏈接被刪除後,此時如果有新數據要存儲到硬盤上是或者系統通過類似fsck做磁盤檢查的時候,被刪除類似的數據塊及目錄的鏈接才會被釋放,空間被新數據占用並覆蓋。此時,數據就再也無法找回了,也就是說,在linux系統中,刪除靜態文件(沒有進程調用)(目錄也是文件)的條件是與之相關的索引硬鏈接文件均被刪除;
硬鏈接知識小結:
1、具有相同inode節點號的多個文件互為硬鏈接文件。
2、刪除硬鏈接文件或者刪除源文件任意之一,文件實體並未被刪除。
3、只有刪除了源文件及所有對應的硬鏈接文件,文件實體才會被刪除。
4、當所有的硬鏈接文件及源文件被刪除後,再存放新的數據會占用這個文件的空間,或者磁盤fsck檢查的時候,刪除的數據也會被系統回收(養成刪除及多套環境測試的好習慣)
5、硬鏈接文件就是文件的另一個入口(相當於超市的前、後門一樣)。
6、可以通過給文件設置硬鏈接文件,來防止重要文件被誤刪。
7、通過執行命令“ln源文件 硬鏈接文件”,即可完成創建硬鏈接。
8、硬鏈接文件時普通文件,因此可以用rm命令刪除。
9、對於靜態文件(沒有進程正在調用的文件)來講,當對應硬鏈接數為0(i_link),文件就被刪除,i_link的查看方法(ls -l)結果的第三列就是
軟鏈接簡介
軟鏈接(soft link)也稱為符號鏈接(symbolic link)。linux裏的軟鏈接文件就類似於Windows系統中的快捷方式。
linux裏的軟鏈接文件實際上是一個特殊的文件,文件類型是l.軟鏈接文件實際上可以理解為一個文本文件,這個文件中包含有軟鏈接指向另一個源文件的位置信息內容,因此,通過訪問這個“快捷方式”就可以迅速定位到軟鏈接所指向的源文件實體。
軟鏈接的創建:執行命令“ln -s 源文件 軟鏈接文件”,即可完成創建軟鏈接;
誤區:創建軟鏈接源文件時需要存在的,要創建的軟鏈接文件時不能存在的,是要用ln命令創建的;
軟鏈接知識小結:
1、刪除軟鏈接文件對源文件及硬鏈接文件無任何影響。
2、刪除硬鏈接文件對源文件及軟鏈接文件無任何影響。
3、刪除源文件,對硬鏈接文件沒有影響,但是會導致軟鏈接文件失效,白字紅底閃爍。
4、同時刪除源文件oldboyfile,硬鏈接文件oldboyfile_hard_link,整個文件會真正的被刪除。
5、很多硬件設備中的快照功能,就是利用了硬鏈接的原理。
6、源文件和硬鏈接文件具有相同的索引節點號,可以認為是同一個文件或一個文件的多個入口。
7、源文件和軟鏈接文件索引節點號不同,是不同的文件,軟鏈接相當於源文件的快捷方式,含有源文件的位置指向。
有關目錄的鏈接小結:
1、對於目錄,不可以創建硬鏈接,但可以創建軟鏈接。
2、對於目錄的軟鏈接是生產場景運維中常用的技巧(例子:第二關第4題apache考試題)
3、目錄的硬鏈接不能跨越文件系統(從硬鏈接原理可以理解)
4、每個目錄下面都有一個硬鏈接“.”號,和對應上級目錄的硬鏈接“..”。
5、在父目錄裏創建一個子目錄,父目錄的鏈接數增加1(每個子目錄裏都有..來指向父目錄)但是在父目錄裏創建文件,父目錄的鏈接數不會增加。
問題一
當用戶執行rm操作刪除文件後,再執行ls或者其他文件管理命令,無法找到這個文件了,但是調用這個刪除的文件的進程卻在繼續正常執行,依然能夠從文件正確的讀取及寫入內容,這是為什麽?
解答:這是因為rm操作只是將文件的i_nlink減少了,如果沒其他的鏈接i_nlink就為0了,但由於該文件依然被進程引用,因此,此時文件對應的i_count並不為0,所以即使執行rm操作,但是系統並沒有真正的刪除這個文件,當只有i_nlink及i_count都為0的時候,這個文件才會被真正的刪除,也就是說,還需要解除該進程對該文件的調用才行。
問題二
以上講的i_nlink及i_count是文件刪除的真實條件,但是當文件沒有被調用時,執行了rm操作刪除文件後是否還可以找回被刪的文件呢?
解答:rm操作只是將文件的i_nlink減少了,或者說設置為0了,實際就是講文件名到inode的鏈接刪除了,此時,並沒有刪除文件的實體即(block數據塊),此時,如果及時停止機器工作,數據是可以找回的,如果此時繼續寫入數據,那麽當新數據就可能會被分配到被刪除的數據的block數據塊,此時,文件就會被真正的回收了,那時候神仙也沒有辦法了。
linux鏈接