su:switch user(完全切换)
su # 切到 root(要 root 密码)
su - # 切到 root 并加载 root 的环境(推荐)
su alice # 切到 alice
su - alice # 切到 alice 并切其环境
exit # 退回原身份
多数 Ubuntu 默认禁用 root 密码 →
su失效;用sudo -i代替。
sudo:以 root(或别人)跑单条命令
sudo apt update # 用 root 权限跑
sudo -i # 切到 root shell(同 su -)
sudo -s # 切到 root shell 但保留环境
sudo -u alice command # 以 alice 身份跑
sudo -l # 看自己能 sudo 什么
sudo -k # 清空 sudo 缓存(下次重输密码)
sudo !! # 重跑上一条加 sudo
sudo -E cmd # 保留环境变量
su - vs sudo -i 差别
su - 要目标用户密码;切到目标家
sudo -i 要自己密码;切到 root(或目标)家
生产推荐 sudo——审计日志 + 不需要 root 密码共享。
别 sudo 重定向
sudo echo "hi" > /etc/test # ❌ shell 在 sudo 前打开 fd 失败
echo "hi" | sudo tee /etc/test # ✓ 这才行
sudo bash -c 'echo hi > /etc/test' # ✓ 也行
sudo 配置(/etc/sudoers)
sudo visudo # ★ 永远用 visudo(语法检查)
例:
%sudo ALL=(ALL:ALL) ALL # sudo 组成员全权限
alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
详见 linux/18-sudo。
看自己有什么 sudo 权限
sudo -l
坑
sudo -i用 root 跑——任何错误代价都大。用完赶紧exitsudo缓存 15 分钟——之后再 sudo 要重输密码(可以sudo -k立刻清)- 重定向用
tee,别忘-a追加(不加-a默认覆盖)