如何更新 Linux 的符號連結

連結一直是 UNIX 檔案系統的一個獨特的高階功能。

UNIX 和 Linux 使用者發現連結有很多用途,特別是符號連結。我喜歡使用符號連結的一種方式是管理各種 IT 裝置的配置備份。

我有一個目錄結構,用來存放我的文件、更新及網路上其他和計算機和裝置有關的檔案。裝置可以包括路由器、接入點、NAS 伺服器和膝上型電腦,通常有不同的品牌和版本。配置備份本身可能在目錄樹的深處,例如
   /home/alan/Documents/network/device/NetgearRL5000/config

為了簡化備份過程,我在主目錄中有一個名為 Configuration的目錄。我使用這個目錄的符號連結來指向特定的裝置目錄:

:~/Configuration/ $ ls -F1 Router@ Accesspoint@ NAS@

注意ls命令的-F選項在每個檔名上附加特殊字元以表示其型別。如上所示,@符號表示這些是連結。

建立一個連結

符號連結 Router指向我的 Netgear RL5000 的config目錄。建立它的命令是ln -s

$ ln -s /home/alan/Documents/network/device/NetgearRL5000/config Router

然後,用 ls -l看一下並確認:

:~/Configuration/ $ ls -l Router -> /home/alan/Documents/network/device/NetgearRL5000/config NAS -> /home/alan/Documents/network/device/NFSBox/config ...

這樣做的好處是,當對這個裝置進行維護時,我只需進入 ~/Configuration/Router

如果我決定用一個新的型號替換這個路由器,使用符號連結的第二個好處就很明顯了。我可能會把舊的路由器改成一個接入點。因此,它的目錄並沒有被刪除。相反,我有一個新的目錄,對應於新的路由器,也許是華碩 DF-3760。我建立這個目錄並確認它的存在:

$ mkdir -p ~/Documents/network/device/ASUSDF-3760/config

:~/Documents/network/device/ $ ls NetgearRL5000 ASUSDF-3760 NFSBox ...

另一個例子是,如果你的辦公室裡有幾個接入點。你可以使用符號連結在邏輯上代表每一個,用一個通用的名字,如 ap1ap2,等等,或者你可以使用描述性的詞語,如ap_floor2ap_floor3,等等。這樣,當物理裝置隨時間變化時,你不必持續更新任何可能管理它們的程序,因為它們是在處理連結而不是實際的裝置目錄。

更新一個連結

由於我的主路由器已經改變,我想讓路由器的符號連結指向它的目錄。我可以使用 rmln命令來刪除和建立一個新的符號連結,但是有一種方法可以只用ln命令和幾個選項就可以一步完成:

:~/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

根據手冊頁,這些選項如下:

  • -v--verbose:列印每個連結檔案的名稱
  • -f--force:刪除目標檔案(有必要,因為已經存在一個連結)
  • -n--no-dereference:如果連結名是一個目錄的符號連結,就把它當作一個正常的檔案
  • -s--symbolic:製作符號連結而不是硬連結

總結

連結是 UNIX 和 Linux 檔案系統中最強大的功能之一。其他作業系統也曾試圖模仿這種能力,但由於他們的檔案系統缺乏基本的連結設計,這些系統從來沒有工作得那麼好,也沒有那麼可用。

上面的演示只是利用連結在生活生產環境中無縫瀏覽不斷變化的目錄結構的眾多可能性中的一種。連結提供了一個永遠不會長期靜態的組織所需的靈活性。

via: https://opensource.com/article/21/11/update-linux-file-system-link

作者:Alan Formy-Duval選題:lujun9972譯者:geekpi校對:wxy

本文由 LCTT原創編譯,Linux中國榮譽推出