這篇“怎么理解Linux的硬鏈接與軟鏈接”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“怎么理解Linux的硬鏈接與軟鏈接”文章吧。
成都創(chuàng)新互聯(lián)從2013年開(kāi)始,先為和平等服務(wù)建站,和平等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為和平企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
硬鏈接只是分區(qū)表中的一個(gè)條目,它指向磁盤(pán)上的某個(gè)區(qū)域,表示該區(qū)域已經(jīng)被分配給文件。換句話說(shuō),硬鏈接指向已經(jīng)被另一個(gè)條目索引的數(shù)據(jù)。讓我們看看它是如何工作的。
打開(kāi)終端,創(chuàng)建一個(gè)實(shí)驗(yàn)?zāi)夸洸⑦M(jìn)入:
mkdir test_dircd test_dir
使用 touch 創(chuàng)建一個(gè)文件:
touch test.txt
為了獲得更多的體驗(yàn)(?),在文本編輯器中打開(kāi) test.txt
并添加一些單詞。
現(xiàn)在通過(guò)執(zhí)行以下命令來(lái)建立硬鏈接:
ln test.txt hardlink_test.txt
運(yùn)行 ls
,你會(huì)看到你的目錄現(xiàn)在包含兩個(gè)文件,或者看起來(lái)如此。正如你之前讀到的那樣,你真正看到的是完全相同的文件的兩個(gè)名稱: hardlink_test.txt
包含相同的內(nèi)容,沒(méi)有填充磁盤(pán)中的任何更多空間(可以嘗試使用大文件來(lái)測(cè)試),并與 test.txt
使用相同的 inode:
$ ls -li *test*16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 hardlink_test.txt16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 test.txt
ls
的 -i
選項(xiàng)顯示一個(gè)文件的 “inode 數(shù)值”?!癷node” 是分區(qū)表中的信息塊,它包含磁盤(pán)上文件或目錄的位置、上次修改的時(shí)間以及其它數(shù)據(jù)。如果兩個(gè)文件使用相同的 inode,那么無(wú)論它們?cè)谀夸洏?shù)中的位置如何,它們?cè)趯?shí)際上都是相同的文件。
軟鏈接,也稱為符號(hào)鏈接,它與硬鏈接是不同的:軟鏈接實(shí)際上是一個(gè)獨(dú)立的文件,它有自己的 inode 和它自己在磁盤(pán)上的小塊地方。但它只包含一小段數(shù)據(jù),將操作系統(tǒng)指向另一個(gè)文件或目錄。
你可以使用 ln
的 -s
選項(xiàng)來(lái)創(chuàng)建一個(gè)軟鏈接:
ln -s test.txt softlink_test.txt
這將在當(dāng)前目錄中創(chuàng)建軟鏈接 softlink_test.txt
,它指向 test.txt
。
再次執(zhí)行 ls -li
,你可以看到兩種鏈接的不同之處:
$ ls -litotal 816515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 hardlink_test.txt16515855 lrwxrwxrwx 1 paul paul 8 oct 12 09:50 softlink_test.txt -> test.txt16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 test.txt
hardlink_test.txt
和 test.txt
包含一些文本并且字面上占據(jù)相同的空間。它們使用相同的 inode 數(shù)值。與此同時(shí),softlink_test.txt
占用少得多,并且具有不同的 inode 數(shù)值,將其標(biāo)記為完全不同的文件。使用 ls
的 -l
選項(xiàng)還會(huì)顯示軟鏈接指向的文件或目錄。
它們適用于帶有自己環(huán)境的應(yīng)用程序。你的 Linux 發(fā)行版通常不會(huì)附帶你需要應(yīng)用程序的***版本。以優(yōu)秀的 Blender 3D 設(shè)計(jì)軟件為例,Blender 允許你創(chuàng)建 3D 靜態(tài)圖像以及動(dòng)畫(huà)電影,人人都想在自己的機(jī)器上擁有它。問(wèn)題是,當(dāng)前版本的 Blender 至少比任何發(fā)行版中的自帶的高一個(gè)版本。
幸運(yùn)的是,Blender 提供可以開(kāi)箱即用的下載。除了程序本身之外,這些軟件包還包含了 Blender 需要運(yùn)行的復(fù)雜的庫(kù)和依賴框架。所有這些數(shù)據(jù)和塊都在它們自己的目錄層次中。
每次你想運(yùn)行 Blender,你都可以 cd
到你下載它的文件夾并運(yùn)行:
./blender
但這很不方便。如果你可以從文件系統(tǒng)的任何地方,比如桌面命令啟動(dòng)器中運(yùn)行 blender
命令會(huì)更好。
這樣做的方法是將 blender
可執(zhí)行文件鏈接到 bin/
目錄。在許多系統(tǒng)上,你可以通過(guò)將其鏈接到文件系統(tǒng)中的任何位置來(lái)使 blender
命令可用,就像這樣。
ln -s /path/to/blender_directory/blender /home//bin
你需要鏈接的另一個(gè)情況是軟件需要過(guò)時(shí)的庫(kù)。如果你用 ls -l
列出你的 /usr/lib
目錄,你會(huì)看到許多軟鏈接文件一閃而過(guò)。仔細(xì)看看,你會(huì)看到軟鏈接通常與它們鏈接到的原始文件具有相似的名稱。你可能會(huì)看到 libblah
鏈接到 libblah.so.2
,你甚至可能會(huì)注意到 libblah.so.2
相應(yīng)鏈接到原始文件 libblah.so.2.1.0
。
這是因?yàn)閼?yīng)用程序通常需要安裝比已安裝版本更老的庫(kù)。問(wèn)題是,即使新版本仍然與舊版本(通常是)兼容,如果程序找不到它正在尋找的版本,程序?qū)?huì)出現(xiàn)問(wèn)題。為了解決這個(gè)問(wèn)題,發(fā)行版通常會(huì)創(chuàng)建鏈接,以便挑剔的應(yīng)用程序相信它找到了舊版本,實(shí)際上它只找到了一個(gè)鏈接并最終使用了更新的庫(kù)版本。
有些是和你自己從源代碼編譯的程序相關(guān)。你自己編譯的程序通常最終安裝在 /usr/local
下,程序本身最終在 /usr/local/bin
中,它在 /usr/local/bin
目錄中查找它需要的庫(kù)。但假設(shè)你的新程序需要 libblah
,但 libblah
在 /usr/lib
中,這就是所有其它程序都會(huì)尋找到它的地方。你可以通過(guò)執(zhí)行以下操作將其鏈接到 /usr/local/lib
:
ln -s /usr/lib/libblah /usr/local/lib
或者如果你愿意,可以 cd
到 /usr/local/lib
:
cd /usr/local/lib
然后使用鏈接:
ln -s ../lib/libblah
以上就是關(guān)于“怎么理解Linux的硬鏈接與軟鏈接”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。