Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux pwd 指令完全指南:顯示當前工作目錄與符號連結路徑解析

編輯:關於 Linux

pwd(print working directory)是 Linux 顯示當前工作目錄絕對路徑的基本指令。雖然功能單一,但對於處理符號連結(-P vs -L)、驗證腳本執行路徑、除錯目錄變更等場景至關重要。本文完整說明語法、參數差異、實戰範例與特殊情境處理。

指令語法與核心功能

pwd [選項]

核心功能: 輸出當前工作目錄的完整絕對路徑(以 / 開頭)。

關鍵參數:-P(實體路徑)vs -L(邏輯路徑)

參數長參數行為適用場景
-P--physical顯示實體路徑,解析符號連結需要知道實際磁碟位置、除錯連結問題
-L--logical顯示邏輯路徑,保留符號連結名稱(Shell 內建預設)腳本中保持路徑一致性、使用者視角
Shell 內建 vs 外部指令: Bash 內建 pwd 預設行為為 -L;外部指令 /bin/pwd 預設為 -P。腳本中建議顯式指定參數避免差異。

實戰範例演示

範例一:基本用法

pwd
# /home/user

cd /opt/soft
pwd
# /opt/soft

範例二:符號連結路徑差異

# 假設 /etc/init.d -> /etc/rc.d/init.d (符號連結)
cd /etc/init.d

pwd          # /etc/init.d        (邏輯路徑,-L 預設)
pwd -P       # /etc/rc.d/init.d   (實體路徑)
/bin/pwd     # /etc/rc.d/init.d   (外部指令預設 -P)
/bin/pwd -L  # /etc/init.d

範例三:目錄被刪除後的行為差異

cd /opt/soft
mkdir removed
cd removed
pwd                    # /opt/soft/removed
rm -rf ../removed      # 刪除上層目錄

pwd                    # /opt/soft/removed  (Shell 內建快取路徑)
/bin/pwd               # 錯誤:couldn't find directory entry in ".." with matching i-node
cd
pwd                    # /home/user         (切換後恢復正常)
深度解析: Shell 內建 pwd 維護邏輯路徑快取($PWD 變數),目錄被刪除後仍回傳快取值;/bin/pwd 透過系統呼叫 getcwd() 解析實際 inode,發現目錄不存在則報錯。

進階應用場景

腳本中取得真實腳本目錄

#!/bin/bash
# 取得腳本所在實體目錄(解析符號連結)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
echo "腳本實體路徑:$SCRIPT_DIR"

驗證目前目錄是否為預期路徑

#!/bin/bash
EXPECTED="/var/www/html"
CURRENT=$(pwd -P)

if [[ "$CURRENT" != "$EXPECTED" ]]; then
    echo "錯誤:請在 $EXPECTED 執行此腳本,目前在 $CURRENT" >&2
    exit 1
fi

搭配 readlink -f 解析任意路徑

# 解析相對/符號連結路徑為實體絕對路徑
readlink -f ../data/file.txt
# 等同於
(cd "$(dirname ../data/file.txt)" && pwd -P)/$(basename ../data/file.txt)

常見問題與排查

現象原因解決
pwd 輸出與實際不符經由符號連結進入目錄,使用邏輯路徑加上 -P 參數或使用 /bin/pwd
腳本中 $PWD 變數未更新使用 cd 但非 Shell 內建(如搭配 sudo)腳本中改用 pwd -P 重新取得
掛載點路徑顯示異常bind mount 或 overlayfs 層級findmnt -T $(pwd -P) 查看掛載資訊

最佳實務總結

  • 互動式使用: 直接輸入 pwd(Shell 內建,快速、邏輯路徑)
  • 腳本/自動化: 明確使用 pwd -P 取得實體路徑,避免符號連結導致邏輯錯誤
  • 路徑比較/判斷: 雙方皆用 pwd -P 或 readlink -f 正規化後再比較
  • 除錯目錄異常: 對比 pwd、pwd -P、/bin/pwd、ls -ld .、stat . 多源驗證

理解 pwd 的邏輯/實體路徑機制與 Shell 內建與外部指令差異,能有效避免路徑解析導致的腳本錯誤與部署失敗,是 Linux 開發運維的基礎功力。

Copyright © Windows教程網 All Rights Reserved