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

sudo cd / sudo ll 報錯原因深度解析:Shell 內建命令與外部命令的區別

編輯:Linux 教學

現象:sudo cd、sudo ll 提示 command not found,但 sudo ls 正常。

核心原因

  • sudo 是一個獨立程序,通過 fork/exec 創建子進程以提權身份運行外部命令(磁盤上的可執行文件,如 /bin/ls)。
  • cd、ll 是 Shell 內建命令/別名,不存在於文件系統,無法被 exec 執行。cd 必須在當前 Shell 進程中改變工作目錄,若在子進程執行則對父 Shell 無影響;ll 通常是 alias ll='ls -l',屬於 Shell 別名。

詳細機制

  1. 輸入 sudo cd /tmp,Shell 解析為「以 root 權限運行命令 cd」。
  2. sudo 程序嘗試在 PATH 中尋找名為 cd 的可執行文件 → 找不到 → 報錯。
  3. 同理 ll 是別名,非文件,sudo 也找不到。

解決方案

  • cd:直接輸入 cd /path(無需 sudo,權限足夠即可進入);若目錄權限不足,用 sudo -s 切換到 root Shell 再 cd,或 sudo bash -c 'cd /path && cmd'。
  • ll:用 sudo ls -l 替代,或定義 root 別名(在 /root/.bashrc 中加 alias ll='ls -l')。

sudo 配置提示

需自定義 sudo 權限時,使用 visudo 編輯 /etc/sudoers,切勿直接 vi,防止語法錯誤導致無法 sudo。

Copyright © Windows教程網 All Rights Reserved