理解 Linux 連接

  理解 Linux 連接

有人給我說不是很瞭解Linux連接,今天我就來普及一下什麼是Linux連接:node

連接是能夠將文件和目錄放在你但願它們放在的位置的另外一種方式。框架

 

除了 cp 和 mv 這兩個咱們在本系列的前一部分中詳細討論過的,連接是能夠將文件和目錄放在你但願它們放在的位置的另外一種方式。它的優勢是可讓你同時在多個位置顯示一個文件或目錄。編輯器

 

如前所述,在物理磁盤這個級別上,文件和目錄之類的東西並不真正存在。文件系統是爲了方便人類使用,將它們虛構出來。但在磁盤級別上,有一個名爲分區表partition table的東西,它位於每一個分區的開頭,而後數據分散在磁盤的其他部分。測試

 

雖然有不一樣類型的分區表,可是在分區開頭的那個表包含的數據將映射每一個目錄和文件的開始和結束位置。分區表的就像一個索引:當從磁盤加載文件時,操做系統會查找表中的條目,分區表會告訴文件在磁盤上的起始位置和結束位置。而後磁盤頭移動到起點,讀取數據,直到它到達終點,您看:這就是你的文件。動畫

 

硬連接spa

 

硬連接只是分區表中的一個條目,它指向磁盤上的某個區域,表示該區域已經被分配給文件。換句話說,硬連接指向已經被另外一個條目索引的數據。讓咱們看看它是如何工做的。操作系統

 

打開終端,建立一個實驗目錄並進入:.net

 

mkdir test_dir設計

cd test_dir索引

使用 touch 建立一個文件:

 

touch test.txt

爲了得到更多的體驗(?),在文本編輯器中打開 test.txt 並添加一些單詞。

 

如今經過執行如下命令來創建硬連接:

 

ln test.txt hardlink_test.txt

運行 ls,你會看到你的目錄如今包含兩個文件,或者看起來如此。正如你以前讀到的那樣,你真正看到的是徹底相同的文件的兩個名稱: hardlink_test.txt 包含相同的內容,沒有填充磁盤中的任何更多空間(能夠嘗試使用大文件來測試),並與 test.txt 使用相同的 inode:

 

$ ls -li *test*

16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 hardlink_test.txt

16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 test.txt

ls 的 -i 選項顯示一個文件的 「inode 數值」。「inode」 是分區表中的信息塊,它包含磁盤上文件或目錄的位置、上次修改的時間以及其它數據。若是兩個文件使用相同的 inode,那麼不管它們在目錄樹中的位置如何,它們在實際上都是相同的文件。

 

軟連接

 

軟連接,也稱爲符號連接symlink,它與硬連接是不一樣的:軟連接其實是一個獨立的文件,它有本身的 inode 和它本身在磁盤上的小塊地方。但它只包含一小段數據,將操做系統指向另外一個文件或目錄。

 

你可使用 ln 的 -s 選項來建立一個軟連接:

 

ln -s test.txt softlink_test.txt

這將在當前目錄中建立軟連接 softlink_test.txt,它指向 test.txt。

 

再次執行 ls -li,你能夠看到兩種連接的不一樣之處:

 

$ ls -li

total 8

16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 hardlink_test.txt

16515855 lrwxrwxrwx 1 paul paul 8 oct 12 09:50 softlink_test.txt -> test.txt

16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 test.txt

hardlink_test.txt 和 test.txt 包含一些文本而且字面上佔據相同的空間。它們使用相同的 inode 數值。與此同時,softlink_test.txt 佔用少得多,而且具備不一樣的 inode 數值,將其標記爲徹底不一樣的文件。使用 ls 的 -l 選項還會顯示軟連接指向的文件或目錄。

 

爲何要用連接?

 

它們適用於帶有本身環境的應用程序。你的 Linux 發行版一般不會附帶你須要應用程序的最新版本。以優秀的 Blender 3D 設計軟件爲例,Blender 容許你建立 3D 靜態圖像以及動畫電影,人人都想在本身的機器上擁有它。問題是,當前版本的 Blender 至少比任何發行版中的自帶的高一個版本。

 

幸運的是,Blender 提供能夠開箱即用的下載。除了程序自己以外,這些軟件包還包含了 Blender 須要運行的複雜的庫和依賴框架。全部這些數據和塊都在它們本身的目錄層次中。

 

每次你想運行 Blender,你均可以 cd 到你下載它的文件夾並運行:

 

./blender

但這很不方便。若是你能夠從文件系統的任何地方,好比桌面命令啓動器中運行 blender 命令會更好。

 

這樣作的方法是將 blender 可執行文件連接到 bin/ 目錄。在許多系統上,你能夠經過將其連接到文件系統中的任何位置來使 blender 命令可用,就像這樣。

 

ln -s /path/to/blender_directory/blender /home/<username>/bin

你須要連接的另外一個狀況是軟件須要過期的庫。若是你用 ls -l 列出你的 /usr/lib 目錄,你會看到許多軟連接文件一閃而過。仔細看看,你會看到軟連接一般與它們連接到的原始文件具備類似的名稱。你可能會看到 libblah 連接到 libblah.so.2,你甚至可能會注意到 libblah.so.2 相應連接到原始文件 libblah.so.2.1.0。

 

這是由於應用程序一般須要安裝比已安裝版本更老的庫。問題是,即便新版本仍然與舊版本(一般是)兼容,若是程序找不到它正在尋找的版本,程序將會出現問題。爲了解決這個問題,發行版一般會建立連接,以便挑剔的應用程序相信它找到了舊版本,實際上它只找到了一個連接並最終使用了更新的庫版本。

 

有些是和你本身從源代碼編譯的程序相關。你本身編譯的程序一般最終安裝在 /usr/local 下,程序自己最終在 /usr/local/bin 中,它在 /usr/local/bin 目錄中查找它須要的庫。但假設你的新程序須要 libblah,但 libblah 在 /usr/lib 中,這就是全部其它程序都會尋找到它的地方。你能夠經過執行如下操做將其連接到 /usr/local/lib:

 

ln -s /usr/lib/libblah /usr/local/lib

或者若是你願意,能夠 cd 到 /usr/local/lib:

 

cd /usr/local/lib

而後使用連接:

 

ln -s ../lib/libblah

還有幾十個案例證實軟連接是有用的,當你使用 Linux 更熟練時,你確定會發現它們,但這些是最多見的。下一次,咱們將看一些你須要注意的連接怪異。

 

經過 Linux 基金會和 edX 的免費 「Linux 簡介」課程瞭解有關 Linux 的更多信息。

好了,這就是Linux連接了。更多內容歡迎訪問www.dianyu.net.

相關文章
相關標籤/搜索