如何更新 Linux 的符號(hào)鏈接
UNIX 和 Linux 用戶發(fā)現(xiàn)鏈接有很多用途,特別是符號(hào)鏈接。我喜歡使用符號(hào)鏈接的一種方式是管理各種 IT 設(shè)備的配置備份。
我有一個(gè)目錄結(jié)構(gòu),用來存放我的文檔、更新及網(wǎng)絡(luò)上其他和計(jì)算機(jī)和設(shè)備有關(guān)的文件。設(shè)備可以包括路由器、接入點(diǎn)、NAS 服務(wù)器和筆記本電腦,通常有不同的品牌和版本。配置備份本身可能在目錄樹的深處,例如 /home/alan/Documents/network/device/NetgearRL5000/config。
為了簡化備份過程,我在主目錄中有一個(gè)名為 Configuration 的目錄。我使用這個(gè)目錄的符號(hào)鏈接來指向特定的設(shè)備目錄:
- :~/Configuration/ $ ls -F1
- Router@
- Accesspoint@
- NAS@
注意:ls 命令的 -F 選項(xiàng)在每個(gè)文件名上附加特殊字符以表示其類型。如上所示,@ 符號(hào)表示這些是鏈接。
創(chuàng)建一個(gè)鏈接
符號(hào)鏈接 Router 指向我的 Netgear RL5000 的 config 目錄。創(chuàng)建它的命令是 ln -s:
- $ ln -s /home/alan/Documents/network/device/NetgearRL5000/config Router
然后,用 ls -l 看一下并確認(rèn):
- :~/Configuration/ $ ls -l
- Router -> /home/alan/Documents/network/device/NetgearRL5000/config
- NAS -> /home/alan/Documents/network/device/NFSBox/config
- ...
這樣做的好處是,當(dāng)對(duì)這個(gè)設(shè)備進(jìn)行維護(hù)時(shí),我只需進(jìn)入 ~/Configuration/Router。
如果我決定用一個(gè)新的型號(hào)替換這個(gè)路由器,使用符號(hào)鏈接的第二個(gè)好處就很明顯了。我可能會(huì)把舊的路由器改成一個(gè)接入點(diǎn)。因此,它的目錄并沒有被刪除。相反,我有一個(gè)新的目錄,對(duì)應(yīng)于新的路由器,也許是華碩 DF-3760。我創(chuàng)建這個(gè)目錄并確認(rèn)它的存在:
- $ mkdir -p ~/Documents/network/device/ASUSDF-3760/config
- :~/Documents/network/device/ $ ls
- NetgearRL5000
- ASUSDF-3760
- NFSBox
- ...
另一個(gè)例子是,如果你的辦公室里有幾個(gè)接入點(diǎn)。你可以使用符號(hào)鏈接在邏輯上代表每一個(gè),用一個(gè)通用的名字,如 ap1,ap2,等等,或者你可以使用描述性的詞語,如 ap_floor2,ap_floor3,等等。這樣,當(dāng)物理設(shè)備隨時(shí)間變化時(shí),你不必持續(xù)更新任何可能管理它們的進(jìn)程,因?yàn)樗鼈兪窃谔幚礞溄佣皇菍?shí)際的設(shè)備目錄。
更新一個(gè)鏈接
由于我的主路由器已經(jīng)改變,我想讓路由器的符號(hào)鏈接指向它的目錄。我可以使用 rm 和 ln 命令來刪除和創(chuàng)建一個(gè)新的符號(hào)鏈接,但是有一種方法可以只用 ln 命令和幾個(gè)選項(xiàng)就可以一步完成:
- ~/Configuration/ $ ln -vfns ~/Documents/network/device/ASUSDF-3760/config/ Router
- 'Router' -> '/home/alan/Documents/network/device/ASUSDF-3760/config/'
- :~/Configuration/ $ ls -l
- Router -> /home/alan/Documents/network/device/ASUSDF-3760/config
- NAS -> /home/alan/Documents/network/device/NFSBox/config
根據(jù)手冊(cè)頁,這些選項(xiàng)如下:
- -v、--verbose:打印每個(gè)鏈接文件的名稱
- -f、--force:刪除目標(biāo)文件(有必要,因?yàn)橐呀?jīng)存在一個(gè)鏈接)
- -n、--no-dereference:如果鏈接名是一個(gè)目錄的符號(hào)鏈接,就把它當(dāng)作一個(gè)正常的文件
- -s、--symbolic:制作符號(hào)鏈接而不是硬鏈接
總結(jié)
鏈接是 UNIX 和 Linux 文件系統(tǒng)中最強(qiáng)大的功能之一。其他操作系統(tǒng)也曾試圖模仿這種能力,但由于他們的文件系統(tǒng)缺乏基本的鏈接設(shè)計(jì),這些系統(tǒng)從來沒有工作得那么好,也沒有那么可用。
上面的演示只是利用鏈接在生活生產(chǎn)環(huán)境中無縫瀏覽不斷變化的目錄結(jié)構(gòu)的眾多可能性中的一種。鏈接提供了一個(gè)永遠(yuǎn)不會(huì)長期靜態(tài)的組織所需的靈活性。