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