加短横线“-”(即su -)能完整切换用户身份、家目录、shell配置及所有关键环境变量,实现真正登录;不加“-”仅切换UID/GID,PATH、HOME等仍为原用户,易致command not found或permission denied。

用 su -(等价于 su -l 或 su --login)能真正模拟一次完整登录,把用户身份、家目录、shell 配置和所有关键环境变量一次性换干净——这才是运维中安全、可靠执行系统管理任务的前提。
为什么必须加短横线“-”?
不加“-”的 su root 只改 UID/GID,PATH、HOME、SHELL、USER 这些变量全还是你原来普通用户的。结果就是:
• cd 进不去 /root 目录(还在你自己的家目录)
• ls /root 可能报 Permission denied(因为 PATH 里没包含 root 的 bin 路径)
• vim /etc/hosts 启动失败(.vimrc 加载的是你自己的配置,甚至可能找不到 vim)
加了“-”,系统会主动加载 /root/.bash_profile → /root/.bashrc,切换到 /root,PATH 变成 root 的标准路径(如 /usr/local/sbin:/usr/sbin:/sbin),提示符也变成 #,这才是“真 root”。
典型运维操作示例
• 切换到 root 并进入完整管理环境:
su -(输 root 密码后,直接进 /root,可用所有 root 工具)
• 切换到特定服务用户排查问题(比如 nginx):
su - nginx(进 /var/lib/nginx,加载其专属环境,查日志、测配置更准确)
• 以目标用户身份执行一条命令,同时保证环境正确:
su -c "systemctl status sshd" -s /bin/bash root(显式指定 shell,避免因默认 shell 不兼容出错)
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
验证是否切换成功
执行完 su - 后,立刻检查三件事:
• pwd —— 应该显示 /root(或目标用户的家目录)
• echo $HOME —— 值应为 /root(不是 /home/xxx)
• echo $PATH | grep sbin —— 应含 /usr/local/sbin:/usr/sbin:/sbin(普通用户 PATH 一般不含这些)
三项全对,才算真正切换到位。
注意事项与替代建议
• root 密码需严格管控,生产环境建议禁用 root 密码登录,改用 sudo -i 或 sudo su -(前提是已配置好 sudoers)
• 若目标用户没有交互 shell(如 /usr/sbin/nologin),su - 会失败,此时改用 su -s /bin/bash -c "command" username
• 在脚本中慎用交互式 su -,优先选 su -c 配合完整路径,避免卡在密码输入环节

















