微信公衆號: 愛問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的節點號碼。它們的節點號碼相同。