硬鏈接為什麼不能跨越文件
『壹』 linux中硬鏈接為什麼不能跨分區
如果使用 hard link 鏈接到目錄時, 鏈接的數據需要連同被鏈接目錄底下的所有數據都創建鏈接,舉例來說,如果你要將 /etc 使用實體鏈接創建一個 /etc_hd 的目錄時,那麼在 /etc_hd 底下的所有檔名同時都與 /etc 底下的檔名要創建 hard link 的,...
『貳』 Linux中硬鏈接文件和軟鏈接文件有什麼區別
硬連接不能跨分區,而軟連接可以!
硬連接總是指向一個I節點,而軟連接是創建一個新的I節點。這就是它為什麼可以跨分區的原因!
軟連接可以對一個不存在的文件鏈接,而硬連接不能,因為他要指向源文件的I節點,所以源文件必須存在!硬連接不能對目錄鏈接,I節點的原因是其中之一,第二個原因是目錄的特殊性!
具體做法看樓上--妙雨飛仙--的!
但樓上有一錯誤,硬連接不是復制文件,而是復制文件頭的數據到新文件,數據區共享!這樣就可以省去數據空間。而復制硬連接的時候,會按照普通文件的操作方式進行!
『叄』 硬鏈接和軟鏈接的區別
1、定義不同
軟鏈接又叫符號鏈接,這個文件包含了另一個文件的路徑名。可以是任意文件或目錄,可以鏈接不同文件系統的文件。
硬鏈接就是一個文件的一個或多個文件名。把文件名和計算機文件系統使用的節點號鏈接起來。因此我們可以用多個文件名與同一個文件進行鏈接,這些文件名可以在同一目錄或不同目錄。
2、限制不同
硬鏈接只能對已存在的文件進行創建,不能交叉文件系統進行硬鏈接的創建;
軟鏈接可對不存在的文件或目錄創建軟鏈接;可交叉文件系統;
3、創建方式不同
硬鏈接不能對目錄進行創建,只可對文件創建;
軟鏈接可對文件或目錄創建;
4、影響不同
刪除一個硬鏈接文件並不影響其他有相同 inode 號的文件。
刪除軟鏈接並不影響被指向的文件,但若被指向的原文件被刪除,則相關軟連接被稱為死鏈接(即 dangling link,若被指向路徑文件被重新創建,死鏈接可恢復為正常的軟鏈接)。
『肆』 linux軟連接和硬鏈接的區別
首先我們需要了解linux下硬鏈接以及軟連接的基本概念.
硬鏈接:新建的文件是已經存在的文件的一個別名,當原文件刪除時,新建的文件仍然可以使用.
軟鏈接:也稱為符號鏈接,新建的文件以「路徑」的形式來表示另一個文件,和Windows的快捷方式十分相似,新建的軟鏈接可以指向不存在的文件.
下面詳細介紹一下硬鏈接和軟連接之間的區別.
1.硬鏈接和原來的文件沒有什麼區別,而且共享一個 inode 號(文件在文件系統上的唯一標識);而軟鏈接不共享 inode,也可以說是個特殊的 inode,所以和原來的 inode 有區別。
2.若原文件刪除了,則該軟連接則不可以訪問,而硬連接則是可以的。
3.由於符號鏈接的特性,導致其可以跨越磁碟分區,但硬鏈接不具備這個特性.
另外在轉載一下網上的介紹.
硬鏈接(hard link) ln
UNIX文件系統提供了一種將不同文件鏈接至同一個文件的機制,我們稱這種機制為鏈接。它可以使得單個程序對同一文件使用不同的名字。這樣的好處是文件系統只存在一個文件的副本。系統簡單地通過在目錄中建立一個新的登記項來實現這種連接。該登記項具有一個新的文件名和要連接文件的inode號(inode與原文件相同)。不論一個文件有多少硬鏈接,在磁碟上只有一個描述它的inode,只要該文件的鏈接數不為0,該文件就保持存在。硬鏈接不能對目錄建立硬鏈接!
硬連接是直接建立在節點表上的(inode),建立硬連接指向一個文件的時候,會更新節點表上面的計數值。舉個例子,一個文件被連接了兩次(硬連接),這個文件的計數值是3,而無論通過3個文件名中的任何一個訪問,效果都是完全一樣的,但是如果刪除其中任意一個,都只是把計數值減1,不會刪除實際的內容的,(任何存在的文件本身就算是一個硬連接)只有計數值變成0也就是沒有任何硬連接指向的時候才會真實的刪除內容。
軟鏈接(symbolic link) ln-s
我們把符號鏈接稱為軟鏈接,它是指向另一個文件的特殊文件,這種文件的數據部分僅包含它所要鏈接文件的路徑名。軟鏈接是為了克服硬鏈接的不足而引入的,軟鏈接不直接使用inode號作為文件指針,而是使用文件路徑名作為指針(軟鏈接:文件名 + 數據部分-->目標文件的路徑名)。軟體有自己的inode,並在磁碟上有一小片空間存放路徑名。因此,軟鏈接能夠跨文件系統,也可以和目錄鏈接!其二,軟鏈接可以對一個不存在的文件名進行鏈接,但直到這個名字對應的文件被創建後,才能打開其鏈接。
『伍』 符號鏈接和硬鏈接的區別
符號鏈接和硬鏈接的區別
(1)創建一個硬鏈接
可以使用命令ln或者函數link()為文件創建一個鏈接。
#include <unistd.h>
int link( const char *path1, const char *path2 );
硬鏈接本身就是一個目錄項,(比如文件名+索引節點號),可以將文件名與文件的位置關聯起來;符號
鏈接也稱軟鏈接,是指存儲了一個字元串的文件。這個字元串可以在路徑名解析的過程中,用於修改路徑名。
目錄項對應於單個鏈接,但是一個索引節點可能有幾個鏈接的目標(對應幾個目錄項),因此索引節點中包含一個對鏈接到索引節點的鏈接數的計數。當用open()創建一個新的文件時,操作系統就會創建一個新的目錄項,並分配一個空閑的索引節點來表示該文件。不能夠對目錄創建符號鏈接,不能夠跨越文件系統創建硬鏈接。
硬鏈接只是建立一個目錄項(包括inode號和文件名),這個目錄項的inode號和被鏈接文件的inode號相同,我們建立1.src文件的硬鏈接過後,發現1.hard的inode號與1.src的inode號是相同的,
(2) 創建一個符號鏈接
使用ln命令帶選項-s 或者函數symlink(),都可以創建符號鏈接。
#include <unistd.h>
int symlink ( const char *path1, const char *path2);
符號鏈接是一個包含了另一個文件或目錄名字的文件。引用符號鏈接的名字會使操作系統去定位對應於那個鏈接的索引節點,知道最終遇到一個硬間接和一個真正的文件為止。如果過了一段時間,系統沒有找到文件,則放棄並返回ELOOP錯誤。
符號鏈接,將建立一個文件,所以要佔用一個inode節點,在這個inode節點中,存放了指向被鏈接文件的路徑字元串,當建立1.src文件的符號鏈接後,1.sym的inode號和1.src是不一樣的,1.sym的索引節點中存放了1.src的路徑,通過這個路徑就可以找到存放文件的索引節點。
當將符號鏈接指向的文件刪除時,符號鏈接將無法使用,因為符號鏈接是通過路徑名去找到被鏈接文件的,而硬鏈接通過增加被鏈接文件索引節點計數來達到鏈接目的,所以即使被鏈接文件刪除了,硬鏈接仍然可以正常的使用,1.sym是1.src的符號鏈接,1.hard是1.src的硬鏈接,當1.src被刪除過後,訪問1.sym出現錯誤,因為此時系統想通過路徑去訪問1.src,而1.src已經被刪除了。但是由於硬鏈接是直接通過增加inode的引用計數,所以源文件被刪除過後,仍然可以正確的訪問。
『陸』 什麼是符號鏈接,什麼是硬鏈接符號鏈接與硬鏈接的區別是什麼
鏈接分硬鏈接和符號鏈接。
符號鏈接可以建立對於文件和目錄的鏈接。符號鏈接可以跨文件系統,即可以跨磁碟分區。符號鏈接的文件類型位是l,鏈接文件具有新的i節點。
硬鏈接不可以跨文件系統。它只能建立對文件的鏈接,硬鏈接的文件類型位是-,且硬鏈接文件的i節點同被鏈接文件的i節點相同。更多內容請查看《Linux就該這么學》內容。
『柒』 Linux下的軟鏈接和硬鏈接,文件拷貝的區別
(1)軟鏈接可以跨越文件系統 ,硬鏈接不可以 。實踐的方法就是用共享文件把windows下的 aa.txt文本文檔鏈接到linux下/root目錄下 bb,cc . ln -s aa.txt /root/bb 鏈接成功 。ln aa.txt /root/bb 失敗 。 (2)關於 I節點的問題 。硬鏈接不管有多少個,都指向的是同一個I節點,會把 結點連接數增加 ,只要結點的鏈接數不是 0,文件就一直存在,不管你刪除的是源文件還是鏈接的文件 。只要有一個存在 ,文件就存在 (其實也不分什麼源文件和鏈接文件的 ,因為他們指向都是同一個I節點的)。 當你修改源文件或者鏈接文件任何一個的時候 ,其他的文件都會做同步的修改。軟鏈接不直接使用i節點號作為文件指針,而是使用文件路徑名作為指針。所以刪除鏈接文件對源文件無影響,但是刪除源文件,鏈接文件就會找不到要指向的文件 。軟鏈接有自己的inode,並在磁碟上有一小片空間存放路徑名,但軟鏈接文件沒有屬於自己的文件塊. 軟鏈接比較像windows下的快捷方式。 (3)軟鏈接可以對一個不存在的文件名進行鏈接。 (4)軟鏈接可以對目錄進行鏈接。 備註:I節點 :它是UNIX內部用於描述文件特性的數據結構.我們通常稱I節點為文件索引結點(信息結點).i節點 含有關於文件的大部分的重要信息,包括文件數據塊在磁碟上的地址.每一個I節點有它自己的標志號,我們稱為文件順序號.I節點包含的信息 1.文件類型 2.文件屬主關系 3.文件的訪問許可權 4.文件的時間截.