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 安裝。