什麼是符號連結?了解符號連結的結構
我使用的是 Ubuntu 15.10,而且我是 Linux 的新手。在 Wikipedia 中閱讀了什麼是一般的符號連結,並在 Ubuntu Unix-bash 終端中執行了符號連結創建命令後,我應該更好地理解我在創建(和“銷毀”)時多次使用的符號連結的結構Ubuntu 學習環境。
每次安裝 PHPmyadmin (PMA) 服務時,我都會執行一個簡短的語法。如果不執行它,該服務就無法正常工作。根據我收集的資訊,以下語法創建了一個符號連結,將 Apache 連接到包含 conf 方向的特定 PMA 文件。
這是我每次執行的語法:
cd /etc/apache2/conf-enabled/ sudo ln -s /etc/phpmyadmin/apache.conf phpmyadmin.conf service apache2 restart
我想更好地了解這裡實際做了什麼,例如:
- 為什麼甚至需要 cd 導航?難道我們不能從根(電腦)文件夾中指定我們想要處理的文件嗎?就是這樣?
- 為什麼 -s 在 ln 之後?
- 我導航到 ln 命令中的兩個目錄,但在其中任何一個中都找不到 phpmyadmin.conf - 那麼,系統如何知道它在哪裡(假設沒有系統範圍的搜尋)。
ln
如果未指定目錄,該命令會在目前目錄中創建符號連結。因此,phpmyadmin.conf
被放入/etc/apache2/conf-enabled/
。你也可以這樣做ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-enabled/phpmyadmin.conf
這是幾乎所有 Unix 命令的標準行為。 2. 該
-s
選項指定您創建的是軟連結而不是硬連結。在這裡閱讀更多。 3. 我不太明白這個問題(“系統怎麼知道它在哪裡?”)。phpmyadmin.conf
在目前目錄中創建(在本例中/etc/apache2/conf-enabled/
)。
符號連結
對文件名的自動取消引用
符號連結實際上是由核心特殊處理的文本文件,其內容是另一個文件/目錄的路徑。
您可以使用 讀取符號連結文件的內容
readlink
,如果您標準打開符號連結文件,系統將打開符號連結內容所引用的文件/目錄。指針/C++ 引用類比
如果您熟悉 C/C++,那麼在大多數情況下,符號連結的行為有點像 C++ 引用或自動取消引用的指針(不是全部:例如,
rm
或者mv
直接在符號連結上工作,而不是在目標上工作)。不同之處在於,真正的 C++ 引用綁定到記憶體地址,而符號連結綁定到文件系統地址。懸空符號連結
符號連結的內容不必是有效的文件路徑引用——>然後你有一個懸空符號連結(如懸空指針或懸空引用)。
相對符號連結
如果符號連結中的文件路徑不是絕對路徑(以 開頭
/
),則相對文件路徑相對於符號連結的位置進行解析(在非符號連結上下文中,相對路徑相對於$PWD
.-s 標誌和硬連結
該
-s
標誌用於“創建符號連結” 。ln
還可以創建硬連結。硬連結在另一個層面上執行,它更接近於文件系統的實現(因此,您不能在不同的文件系統之間創建硬連結)。Unix 文件系統分別儲存文件名(/目錄名)和文件內容(目錄內容),並且名稱只是指向其內容的自動取消引用的引用計數指針。硬連結為相同的內容創建另一個名稱,同時增加引用計數。
$ echo 'the contents' > f1 $ ls -l f1 * 1 * #the 2nd column is the reference count $ ln f1 f2 #create another name for the contents of f1 $ ls -l f1 * 2 * #the contents of f1 has two named references to it $ rm f1 #the contents of f1 lives on (in f2) # # because rm only removes the reference to the data block #and this isn't the only reference #(rm ivokes a system call literally named `unlink`)
目錄硬連結
您不能創建目錄硬連結,而是為您隱式創建的目錄硬連結
.
。..
因此,目錄的硬連結計數反映了它有多少子目錄(每個子目錄都帶有..
到父目錄的硬連結)。符號連結和硬連結——大圖概述:
echo 'file data' > fileName ln fileName fileName2 #hardlink ln -s "$PWD/fileName" absoluteSymlinkTofileName ln -s fileName relativeSymlinkTofileName
在同一個物理文件系統上,為(將在文件系統之間失敗)
ln
創建另一個名稱。您可以刪除其中一個,或者,只要至少有一個名字仍然存在,就可以繼續存在。file data``ln``fileName``fileName2``file data
absoluteSymlikTofileName
是對名稱的自動取消引用fileName
。只要該路徑解析為某些內容,符號連結就有效。如果您刪除目標,則符號連結會懸空。這是一個絕對符號連結,因此您可以將其移動到其他位置而不會更改其有效性。
relativeSymlinkToFileName
是指fileName
在與 的目錄相同的目錄中呼叫的名稱relativeSymlinkToFileName
。如果您將它移動到另一個目錄,該目錄也有一個名為 的文件(或目錄)fileName
,那麼它將指向該目錄。