sudo — 以其他使用者身份執行指令

以 root 或其他使用者身份執行指令,無需切換帳號。

語法

sudo [選項] 指令

常用選項

選項 說明 範例
-u 使用者 以指定使用者身份執行(預設 root) sudo -u www-data ls /var/www
-i 以目標使用者的登入 Shell 執行(完整環境) sudo -i
-s 以目標使用者身份開啟 Shell(繼承環境) sudo -s
-l 列出當前使用者可用的 sudo 指令 sudo -l
-v 更新 sudo 憑證快取(延長免輸入密碼時間) sudo -v
-k 清除 sudo 憑證快取(下次需重新輸入密碼) sudo -k
-E 保留當前使用者的環境變數 sudo -E make install
SUDO_ASKPASS=程式 使用圖形密碼程式 sudo -A command

使用範例

範例 1:安裝套件(最常用)

一般使用者安裝系統套件需要 root 權限,用 sudo 授權。

$ sudo apt install nginx
[sudo] password for user: (輸入密碼)
範例 2:編輯系統設定檔

以 root 身份開啟編輯器修改系統設定。

$ sudo nano /etc/nginx/nginx.conf
範例 3:以 root 身份執行多個指令

使用 sudo bash -c 執行多個指令序列。

$ sudo bash -c "apt update && apt upgrade -y"
範例 4:切換到 root Shell

使用 sudo -i 開啟一個 root 的完整登入 Shell。使用後記得 exit 離開。

$ sudo -i
root@server:~# 
危險:在 root Shell 中所有操作都以 root 執行,請謹慎操作。
範例 5:寫入需要 root 的檔案

使用 tee 搭配 sudo 寫入需要 root 權限的檔案。

$ echo "10.0.0.5 db-server" | sudo tee -a /etc/hosts
10.0.0.5 db-server
範例 6:查看可用的 sudo 權限

使用 sudo -l 查看目前帳號被授權可以執行哪些指令。

$ sudo -l
Matching Defaults entries for user ...
User user may run the following commands on server:
    (ALL : ALL) ALL

常見錯誤與排錯

user is not in the sudoers file. This incident will be reported.
原因
當前使用者沒有被加入 sudoers 清單,沒有 sudo 使用權限。
解法
以 root 身份執行 usermod -aG sudo username(Ubuntu/Debian)或 visudo 手動加入。
sudo: command not found
原因
系統未安裝 sudo。
解法
先 su - 切換為 root,再執行 apt install sudo 安裝。

延伸閱讀