如何在 Linux 中創(chuàng)建符號(hào)鏈接
符號(hào)鏈接 Symbolic Links,也稱為 Symlinks 或 soft link,是一種特殊類型的文件,它就像 Windows 中的快捷方式一樣簡(jiǎn)單地指向另一個(gè)文件或目錄。創(chuàng)建符號(hào)鏈接就像創(chuàng)建一個(gè)實(shí)際文件的別名。
如果您嘗試訪問(wèn)符號(hào)鏈接,您實(shí)際上訪問(wèn)的是符號(hào)鏈接指向的目標(biāo)文件。對(duì)鏈接文件內(nèi)容所做的更改會(huì)更改實(shí)際目標(biāo)文件的內(nèi)容。
如果使用帶選項(xiàng) -l 的 ls 命令,符號(hào)鏈接如下所示:
在大多數(shù) Linux 發(fā)行版中,鏈接以與其余條目不同的顏色顯示,以便您可以將鏈接與常規(guī)文件和目錄區(qū)分開(kāi)來(lái)。
符號(hào)鏈接提供了一種組織和共享文件的便捷方式。它們提供對(duì)長(zhǎng)而混亂的目錄路徑的快速訪問(wèn)。它們?cè)?Linux 中大量用于鏈接庫(kù)。
現(xiàn)在您對(duì)符號(hào)鏈接有了一些了解,讓我們看看如何創(chuàng)建它們。
如何在 Linux 中創(chuàng)建符號(hào)鏈接
要從 link name 創(chuàng)建指向目標(biāo)文件的符號(hào)鏈接,您可以使用帶有 -s 選項(xiàng)的 ln 命令,如下所示:
-s 選項(xiàng)在這里很重要。判斷該鏈接為軟鏈接。如果你不使用它,它會(huì)創(chuàng)建一個(gè)硬鏈接。我將在另一篇文章中解釋軟鏈接和硬鏈接之間的區(qū)別。
如何跟蹤符號(hào)鏈接
要知道鏈接實(shí)際指向哪個(gè)真實(shí)文件,請(qǐng)使用 realpath 命令:
還有其他方法可以跟蹤到其源文件的軟鏈接,但 realpath 是最簡(jiǎn)單的。
如何刪除符號(hào)鏈接
Linux中沒(méi)有刪除符號(hào)鏈接的特殊命令。您可以使用與刪除文件和目錄相同的 rm 命令::
刪除鏈接不會(huì)刪除它鏈接到的源文件。
您也可以在一個(gè)命令中刪除多個(gè)符號(hào)鏈接:
還有一個(gè)unlink 命令。但與名字給人的印象不同,unlink 命令并不是專門(mén)用來(lái)刪除鏈接的。當(dāng)然,它可以刪除文件、文件夾和鏈接。但是,它有某些限制,即使是刪除鏈接,rm 命令也是更好的選擇。
如果要使用 find 命令列出符號(hào)鏈接,可以使用該-type l選項(xiàng)。
關(guān)于符號(hào)鏈接的注意事項(xiàng)
符號(hào)鏈接有時(shí)可能會(huì)造成混淆,因此您應(yīng)該注意一些事項(xiàng)。
對(duì)鏈接所做的更改反映在原始文件中
畢竟,這就是鏈接的全部目的。您可以通過(guò)訪問(wèn)鏈接來(lái)訪問(wèn)目標(biāo)文件。您可以通過(guò)鏈接對(duì)目標(biāo)文件進(jìn)行更改。讓我們看例子。
我在 newdir/test_dir 中有一個(gè)文件 ??prog.py??。它具有以下屬性:
現(xiàn)在,我將在當(dāng)前目錄中創(chuàng)建指向該文件的軟鏈接:
以下是新創(chuàng)建鏈接的屬性:
注意到行首的 l(是 L,不是一 1)了嗎?如果你熟悉 Linux 中的文件權(quán)限,你就會(huì)知道’l’表示鏈接,因此它告訴你這個(gè)文件實(shí)際上是一個(gè)鏈接。提個(gè)醒,- 表示文件,d 表示目錄。
現(xiàn)在,如果我使用此鏈接更改內(nèi)容或?qū)傩?,同樣?huì)反映在目標(biāo)文件中。例如,我在軟鏈接上使用 touch 命令,你會(huì)注意到它改變了目標(biāo)文件的時(shí)間戳。
它鏈接到文件還是目錄?你可能不知道!
您如何知道鏈接指向的是文件還是目錄?在您按照路徑訪問(wèn)目標(biāo)文件本身之前,您無(wú)法知道這一點(diǎn)。
您可以創(chuàng)建指向不存在的文件或目錄的鏈接
是的,這完全有可能。這就是為什么在 Linux 中創(chuàng)建軟鏈接時(shí)應(yīng)該小心的原因。您鏈接到的目標(biāo)文件不需要存在。創(chuàng)建指向不存在的文件/目錄的鏈接時(shí),您不會(huì)收到任何錯(cuò)誤或警告。
ls 命令仍然有效。僅當(dāng)您嘗試通過(guò)鏈接或單獨(dú)訪問(wèn)目標(biāo)文件時(shí)才會(huì)出現(xiàn)錯(cuò)誤。
符號(hào)鏈接是使用 777 權(quán)限創(chuàng)建的,但它沒(méi)有任何意義
您是否注意到符號(hào)鏈接上的文件權(quán)限?符號(hào)鏈接始終使用 777 權(quán)限 (rwxrwxrwx) 創(chuàng)建。對(duì)于常規(guī)文件,這意味著任何人都可以訪問(wèn)該文件。但鏈接并非如此。
如果鏈接上的文件權(quán)限按原樣處理,任何用戶都可以創(chuàng)建指向安全文件的符號(hào)鏈接并自由訪問(wèn)它。那將是一個(gè)主要的安全問(wèn)題。值得慶幸的是,這不會(huì)發(fā)生。因?yàn)槟繕?biāo)文件的權(quán)限很重要,而不是鏈接的權(quán)限。
您可以使用 chmod 命令更改鏈接的權(quán)限,但它會(huì)更改鏈接文件的權(quán)限,而不是鏈接本身。
您可以鏈接到一個(gè)鏈接的鏈接,也就是鏈?zhǔn)椒?hào)鏈接
您可以創(chuàng)建指向另一個(gè)鏈接的符號(hào)鏈接等等。這稱為鏈?zhǔn)椒?hào)鏈接。最好避免使用它們,因?yàn)樗鼤?huì)造成更多混亂。
嗯,就是這樣。我假設(shè)您現(xiàn)在對(duì)軟鏈接有了更好的了解,并且您知道如何在 Linux 中創(chuàng)建符號(hào)鏈接。您也可以查看 symlinks 命令,它可以幫助您在 Linux 中找到斷開(kāi)的符號(hào)鏈接并輕松管理它們。