現象:sudo cd、sudo ll 提示 command not found,但 sudo ls 正常。
fork/exec 創建子進程以提權身份運行外部命令(磁盤上的可執行文件,如 /bin/ls)。exec 執行。cd 必須在當前 Shell 進程中改變工作目錄,若在子進程執行則對父 Shell 無影響;ll 通常是 alias ll='ls -l',屬於 Shell 別名。sudo cd /tmp,Shell 解析為「以 root 權限運行命令 cd」。sudo 程序嘗試在 PATH 中尋找名為 cd 的可執行文件 → 找不到 → 報錯。ll 是別名,非文件,sudo 也找不到。cd /path(無需 sudo,權限足夠即可進入);若目錄權限不足,用 sudo -s 切換到 root Shell 再 cd,或 sudo bash -c 'cd /path && cmd'。sudo ls -l 替代,或定義 root 別名(在 /root/.bashrc 中加 alias ll='ls -l')。需自定義 sudo 權限時,使用 visudo 編輯 /etc/sudoers,切勿直接 vi,防止語法錯誤導致無法 sudo。