sudo 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,属于用户与权限命令族(见用户与权限命令族)。普通用户临时要 root 权限,标准做法就是它。
sudo(superuser do)让你以另一个用户(默认 root)的身份执行单条命令。它用你自己的密码做授权,且每条都记日志,便于审计。
一、基本用法
bash
sudo apt update # 以 root 跑单条命令
sudo -i # 启动 root 的 login shell(见 [su](/linux/cmd/su.md) 对比)
sudo -u www-data ls /var/www # 以 www-data 身份跑和
su -不同,sudo cmd只把这一条命令提权,跑完就回普通身份——权限暴露窗口最小。sudo -i才是拿一个完整的 root shell(类似su -),尽量少用。
二、sudo vs su
bash
su - # 要 root 密码;拿完整 root shell;难审计
sudo -i # 用自己密码;可配精细规则;日志记录谁干的核心差异:su 共享 root 密码、操作记在 root 名下;
sudo用自己的密码、按/etc/sudoers授权、日志留名(谁、何时、跑了啥)。所以生产普遍用sudo。
三、免密码配置(NOPASSWD)
bash
# /etc/sudoers 里(用 visudo 编辑!)
alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx自动化脚本常需要 sudo 不卡密码:在
/etc/sudoers用NOPASSWD限定具体命令。注意必须用visudo编辑(会校验语法,防止写错锁死 sudo),且尽量限定到具体命令而非ALL,否则等于开放 root。
四、排错与时效
bash
sudo -l # 列出当前用户被允许跑的 sudo 命令
sudo -k # 强制下次重新输密码
sudo -l查"我到底有哪些 sudo 权限",权限不给时报not allowed。sudo默认 15 分钟缓存密码,-k立即失效。
一句话总结
sudo = 以其他身份(默认 root)跑单条命令:用自己密码授权、日志留名便于审计;sudo cmd 只提权这一条(窗口最小),sudo -i 才拿完整 root shell;比 su(见su)安全可审计;NOPASSWD 限具体命令、visudo 编辑 /etc/sudoers;sudo -l 查自己权限。