在 Linux 系统中,sudo
命令允许普通用户以超级用户(root)或其他用户的权限执行命令。以下是 sudo
的详细使用指南:
sudo [选项] 命令
root
身份执行命令。示例:
sudo apt update # 以 root 权限更新软件包列表
sudo /etc/init.d/nginx restart # 重启 Nginx 服务
选项 | 作用 |
---|---|
-u 用户名 |
以指定用户身份执行(如 sudo -u alice ls ) |
-l |
列出当前用户可执行的 sudo 命令 |
-k |
清除缓存的密码(下次 sudo 需重新输入) |
-v |
刷新 sudo 会话的超时时间(默认 15 分钟) |
-s |
启动 root 的 shell 环境 |
-i |
模拟 root 登录(加载环境变量) |
sudo -u mysql touch /var/log/mysql.log # 以 mysql 用户创建文件
sudo -u postgres psql # 以 postgres 用户启动 PostgreSQL CLI
/etc/sudoers
visudo
命令安全编辑(避免语法错误导致锁死):
bash
sudo visudo
常见配置示例:
# 允许用户 alice 以 root 权限执行所有命令(需密码)
alice ALL=(ALL:ALL) ALL
# 允许组 wheel 免密码执行所有命令
%wheel ALL=(ALL) NOPASSWD: ALL
# 允许用户 bob 仅执行特定命令
bob ALL=(root) /usr/bin/systemctl restart nginx
默认情况下,sudo
会重置环境变量。若需保留当前用户环境:
sudo -E command # 继承环境变量
或在 /etc/sudoers
添加:
Defaults env_keep += "PATH VAR1 VAR2"
sudo
操作记录在 /var/log/auth.log
(Ubuntu/Debian)或 /var/log/secure
(CentOS/RHEL)。bash
sudo grep sudo /var/log/auth.log
username is not in the sudoers file.
解决:
用 root 用户执行 visudo
,添加该用户或将其加入 wheel
/sudo
组:
usermod -aG sudo username # Ubuntu/Debian
usermod -aG wheel username # CentOS/RHEL
bash
passwd username
sudo: command not found
解决:
指定命令的完整路径(用 which command
查找路径):
sudo /usr/sbin/nginx -t
NOPASSWD
时需谨慎。/etc/sudoers
和日志文件。掌握这些用法后,你可以安全高效地使用 sudo
管理 Linux 系统权限!