網站部署資料夾裡的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日;實際介面與文件可能更新。

評論0