Linux之檔案編程中軟連結和永久連結的用法和區別
前言:在Linux中使用什麼來識別一個檔案呢?
我們先在終端上輸入命令: ls -i 看看會有什麼資訊出現。
think@ubuntu:~$ ls -i
顯示的資訊
1048577 bin 523 initrd.img 524289 mnt 1 sys
1179649 boot 13 initrd.img.old 655361 opt 793170
可以看到每個檔案前都有一個編號,在Linux中就是靠這個編號來識別一個檔案的。
那麼這些編號叫啥名字呢----》索引節點號
Tiger-John總結;
可以通過命令: ls -i來查看一個檔案的索引號。
那什麼叫索引節點,它有什麼作用呢。
一.索引節點
Linux 檔案系統使用索引節點來記錄檔案資訊,索引節點是一個資料結構,它包含檔案的長度、建立時間、修改時間、許可權、所屬關係、磁碟中的位置等資訊。每個檔案或目錄都對應一個索引節點,檔案系統把所有的索引節點形成一個數組,系統給每個索引節點分配了一個號碼,也就是該節點在數組中的索引號,稱為索引節點號。檔案系統正是靠這個索引節點號來識別一個檔案。
我們上面提到了有一種檔案是連結檔案,它是幹麼的呢,有什麼作用?
1.連結
1>什麼叫連結:
對一個已經存在的檔案再建立一個新的連結,而不複製檔案的內容得使用者無論使用哪一個檔案名稱
都可以訪問到同一檔案,提高了檔案的共用。
2>在Linux中有永久連結和軟連結(就是我們所說的符號連結)之分。
3>永久連結(hard link)就是讓一個檔案對應一個或多個檔案名稱,或者說把我們使用的檔案名稱和檔案系統使用的節點號連結起來,這些檔案名稱可以在同一目錄或不同目錄。一個檔案有幾個檔案名稱,我們就說該檔案的連結數為幾。
(永久連結就好比給檔案令起了一個別名而已)
缺點:
一是不允許給目錄建立永久連結。
二是只有在同一檔案系統中的檔案之間才能建立連結。
人們始終是在不斷的追求完美,因此為了克服永久連結的缺點,----->就出現了符號連結。
4>符號連結實際上是一種特殊的檔案,這種檔案包含了另一個檔案的任意一個路徑名。這個路徑名指向位於任意一個檔案系統的任意檔案,甚至可以指向一個不存在的檔案。系統會自動把對符號連結的大部分操作(如讀、寫等)變為對源檔案的操作,但某些操作(如刪除等)就會直接在符號連結上完成。
因為符號連結實際上的存放的是一個檔案的路徑名,因此它可以跨目錄,跨檔案系統。但是這一切的優點,都是要付出巨大代價的----->軟連結要建立立一個索引節點。
-----------------------------------------------------------------------------------------------------------
說了這麼多我們來體驗下如何用shell命令來對一個已經存在的檔案建立一個連結呢?
二如何給一個檔案建立一個連結
1.給一個檔案建立一個永久連結
首先在終端輸入命令: ln tiger.c myhlink.c
就實現了個已經存在的檔案tiger.c 建立一個永久連結 myhlink.c。它們之間有什麼關係呢?
(永久連結都是指向同一個檔案,所以它們的索引節點號應該是相同的)
我們用命令來驗證下 : ls -i 可以看看是否到底他們的索引號相同。
過程執行個體:
think@ubuntu:~/test$ ln tiger.c myhlink.c
think@ubuntu:~/test$ ls -i
931356 myhlink.c 931356 tiger.c
通過上面所顯示的資訊可以看到它們的索引號是相同的。
2.給一個檔案建立一個符號連結
首先:在終端輸入命令: ln -s tiger.c myslink.c
然後:輸入名令: ls -i
來看看它們之間的索引號是否相同?
(因為軟連結並沒有指向這個檔案,只是在這個檔案中存了原有檔案的地址,所以它們的索引號是不同的)
過程執行個體:
think@ubuntu:~/test$ ln -s tiger.c myslink.c
think@ubuntu:~/test$ ls -i
931346 myslink.c 931331 tiger.c
通過上面的結果可以看出它們兩者的索引編號不一樣。
Tiger-John總結:
1>用 shell 命令: ln filename1 filename2 可以實現給filename1 建立一個永久連結filename2。
2> 用 shell 命令:ln -s filename1 filename2 可以實現給filename1 建立一個軟連結filename2。
3> 用 shell 命令: ls -i 可以查看檔案的索引號