Linux中的軟連接和硬連接

3.jpg

微信公衆號: 愛問CTO
專業編程問答社區
www.askcto.com

問題出現

問題1:Linux中軟連接和硬連接的區別?
問題2:Linux系統內部是經過文件名訪問文件的嗎?node

基礎鋪墊

平時在Linux系統中,咱們都是經過文件名打開文件。可是Linux系統內部並不使用文件名,而是經過inode即節點索引來識別文件。咱們經過文件名打開文件,只是表像。實際系統會按照以下去作。編程

1.系統是先找到這個文件名對應的inode號碼,
2.經過inode號碼獲取inode信息,
3.而後根據inode信息獲取文件數據所在的block,讀取數據。windows

不少時候,咱們要透過現象找尋問題的本質。微信

什麼是軟連接

軟連接也叫符號連接(symbolic link),符號連接是指經過建立一個特殊類型的文件來起做用,該文件包含了指向引用文件或目錄的文本指針。列舉個windows裏面的例子就明白了,與windows系統下的快捷方式很是類似。spa

將內容寫進符號連接裏,那這些內容也會一樣寫入引用文件。而當刪除一個符號連接的時候,刪除的只是符號連接而沒有刪除文件自己。而若是先刪除了文件,該連接依舊存在,卻不會指向任何文件。可是你打開該連接,就會報錯「NO such file or directory」3d

軟連接的兩個文件的inode號碼是不同的指針

如何建立軟連接

1.首先在目錄下建立fileB文件,寫上i am askctocode

[root@ky35z ask]# vi fileB

2.使用命令ln -s item link(item能夠是文件也能夠是目錄)blog

[root@ky35z ask]# ln -s fileB fileB-sym

3.查看兩個文件的inode號碼索引

[root@ky35z ask]# ls -i fileB fileB-sym
1446188 fileB  1446185 fileB-sym

4.查看兩個文件內容

[root@ky35z ask]# cat fileB
i am askcto
[root@ky35z ask]# cat fileB-sym
i am askcto

文件fileB和軟連接fileB-sym的inode節點號碼不一致。符號連接fileB-sym是包含了指向目標文件的文本指針。

[root@ky35z ask]# ls -l
lrwxrwxrwx 1 root root       5 Jan  7 21:14 fileB-sym -> fileB

什麼是硬連接

硬連接,能夠想象文件是由兩部分組成的,一部分是文件內容,另一部分是文件名稱。建立硬連接時,其實是建立了額外的名稱,這些名稱都指向了同一數據部分。系統會分配一系列的盤塊給所謂的索引節點(inode),該節點隨後與文件名稱創建關聯。所以,每一個硬連接都指向包含文件內容的具體索引節點。

也就是說多個文件指向的是同一個inode號碼,用不一樣的文件名訪問,系統內部找到的都是相同的一個inode節點,因此訪問的是一樣的內容。對文件內容修改,會影響到全部文件名,可是刪除一個文件名,不會影響另一個文件的訪問。

如何建立硬連接

1.首先在目錄下建立fileA文件,寫上i am coder

[root@ky35z ask]# vi fileA

2.使用命令ln file link

[root@ky35z ask]# ln fileA fileA-hard

3.查看兩個文件的inode號碼

[root@ky35z ask]# ls -i fileA fileA-hard
1446187 fileA  1446187 fileA-hard

4.查看兩個文件內容

[root@ky35z ask]# cat fileA
i am coder
[root@ky35z ask]# cat fileA-hard
i am coder

軟連接和硬連接的區別

1.硬連接不能引用自身文件系統以外的文件。也就是說,連接不能引用與該連接不在同一磁盤分區的文件。

2.硬連接不能引用目錄。軟連接便可以是文件也能夠是目錄。

3.上面的例子中,軟連接fileB-sym是指向文件fileB的文件名,它們的節點號碼不一樣。而硬連接fileA-hard指向的是fileA的節點號碼。它們的節點號碼相同。

相關文章
相關標籤/搜索