Linux 中的 ln 命令:創建軟鏈接和硬鏈接
鏈接是對另一個文件的引用,它為同一文件提供多個名稱,并允許它們同時位于兩個或多個位置。
有兩種類型的鏈接:
- 軟連接:也稱為符號鏈接,原始文件的快捷方式;
- 硬鏈接:這將指向原始文件的內存位置。
下圖顯示了兩種鏈接的工作方式:
硬鏈接和軟鏈接都是使用 ln 命令創建的,本文將會介紹如何使用 ln 命令在 Linux 中創建多種類型的鏈接。
ln 命令示例
ln 命令的語法很簡單:
下面我們通過例子來具體看一下。
1,創建指向文件的硬鏈接
創建指向文件的硬鏈接,可在不添加任何選項的情況下使用 ln 命令,如下:
2,創建指向文件的軟連接
要創建指向文件的軟連接,使用 ln 命令的 -s 選項:
在 ls -l 命令的輸出列表中,大多數 LInux 終端都會以不同顏色顯示軟鏈接及其指向的目標;同時鏈接都會以 l 開頭,而不是普通文件的 -,這也是識別鏈接的一種方式。
3,創建指向目錄的軟鏈接
創建指向目錄的軟鏈接與創建指向文件的軟鏈接方法相同,將文件名替換為目錄名即可:
你可能會注意到了,在 Linux 終端中,軟鏈接和硬鏈接的顏色是不同的,一般情況下,無法創建指向目錄的硬鏈接。
4,更新已有的軟鏈接(或硬鏈接)
鏈接是可以被覆蓋的。默認情況下,如果你使用一個已有的鏈接指向一個新文件,會報錯:
要覆蓋現有鏈接,有兩種方式(即 ln 命令的兩個選項):
- -i:系統會詢問你是否要覆蓋現有鏈接;
- -f:強制覆蓋現有鏈接,不會給確認信息。
比如,我們要強制覆蓋一個現有鏈接,看下面的例子:
在這里需要注意,如果是要覆蓋一個軟鏈接的話,需要添加 -s 選項,否則會將軟鏈接轉換為硬鏈接。
通過鏈接鏈獲取原始文件
通常情況下,使用 ls -l 命令來查看文件的時候,鏈接會顯示它所指向的文件。
但如果存在鏈接鏈的話,則不會顯示原始文件。例如,創建指向文件的鏈接,然后創建指向第一個鏈接的另一個鏈接;在長列表的輸出中,第二個鏈接將指向第一個鏈接。
要從鏈接鏈中找到原始文件,可以使用 readlink -f 命令,如下所示:
選項 -f 表示 follow,即 follow the chain。
為什么會需要鏈接
上面我們介紹了如何創建鏈接,接下來我們再來了解下鏈接的實際用途。
假設我們下載了一個包含有代碼和可執行文件的軟件,然后我們將整個軟件放在了 /opt 目錄中。但是如果想要從任何路徑下都可以運行該程序,那需要將可執行文件放到 /usr/bin 目錄下。
如果我們將可執行文件放到 /usr/bin 目錄下以后,它可能不會正常運行,因為它需要訪問某些代碼(即隨同文件一起被下載的那些代碼),但是在 /usr/bin 目錄下無法找到這些代碼文件。這種情況下,我們就可以在 /usr/bin 目錄中創建指向該可執行文件的鏈接,而不是把可執行文件移動到該目錄下。
這樣,程序就可以在系統的任何地方運行,其可執行文件仍會保留在原地方。
鏈接是 Linux 的重要組成部分,它在應用在很多地方。在系統的 /lib 目錄下,會有很多軟鏈接存在。