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