Linux符號連結失效?用readlink查清相對路徑

網站部署資料夾裡的current明明存在,開啟它卻顯示找不到檔案;搬動連結後,原本能讀的index.html也失效。先別急著重新上傳網站:current可能是符號連結,裡面記錄的相對路徑已經指到錯誤位置。

先看連結記了什麼,再看目標是否存在

以下適用於有GNU coreutils的Linux環境。假設site/releases/v1放著網站檔案,site/links/current是一個連結,先從site的上一層執行:

readlink site/links/current
readlink -e site/links/current

第一行顯示連結儲存的文字,例如../releases/v1。第二行嘗試解析完整路徑,且要求每一段都存在。若第一行有值、第二行沒有輸出且回傳失敗,表示解析不到完整目標;也要留意權限問題,不能只憑這一點認定檔案被刪了。

相對路徑從連結所在目錄算

../releases/v1是從site/links往上一層,再進releases/v1。它不是從你目前開終端的位置算。如果把current移到site/moved/deeper,連結文字仍是../releases/v1,卻會指向site/moved/releases/v1,原本的目標就找不到了。

要在新的位置指向site/releases/v1,需要../../releases/v1。先用新名稱建立候選連結,不直接覆蓋目前網站使用的current:

ln -s ../../releases/v1 site/moved/deeper/current-check
readlink -e site/moved/deeper/current-check
cat site/moved/deeper/current-check/index.html

確認完整目標與檔案內容都正確後,再依你的部署流程替換原連結。不要直接抄ln -sf去覆蓋未知路徑;目的地可能是資料夾,替換規則也可能和你想的不一樣。動手前先記下原連結文字,保留可回復的部署版本。

為什麼這裡用-e,不只用-f?

GNU readlink -f允許最後一段不存在,-e則要求全部存在。你要確認網站檔案真的可讀,使用-e比較符合這個問題,但解析成功仍不等於網站路由、PHP或權限都正常。接著要檢查實際檔案、服務讀取權限與網站回應。

這些命令先在自己的練習目錄操作;正式部署目錄的連結替換,應先確認目前站點使用哪個路徑以及回復方式。macOS或其他工具版本的選項可能不同,請先查看當地readlink --help或手冊。

參考資料

資料核對於2026年10月3日;實際介面與文件可能更新。

原文鏈接:https://wntheme.com/linux-readlink-relative-symlink/,轉載請註明出處。
0

評論0

顯示驗證碼
沒有帳號?註冊  忘記密碼?