su与su -切换root后ufw命令执行差异问题咨询
su与su -切换root后ufw命令执行差异问题咨询
这个问题其实是Linux里su和su -最典型的差异体现,我来给你拆解清楚:
核心区别:环境变量的继承与否
su:这个命令只是帮你切换到root的用户身份(UID/GID变成root),但完全保留原来普通用户的环境变量,包括PATH、HOME这些关键变量。简单说就是“变成了root,但还在用原来用户的‘运行环境’”。su -:后面的横杠是关键,它会启动root的登录shell,也就是模拟你重新以root身份登录系统的过程。这时候系统会读取root的登录配置文件(比如/root/.profile、/etc/profile),完全加载root专属的环境变量,相当于“彻底切换到root的工作环境”。
为什么ufw命令找不到?
ufw的可执行文件通常放在/usr/sbin目录下——这个目录是给系统管理类工具用的,普通用户的PATH默认不会包含它(普通用户的PATH一般是/usr/local/bin:/usr/bin:/bin这类面向普通应用的目录)。
- 当你用
su切换root后,PATH还是原来普通用户的,系统找不到/usr/sbin/ufw,所以就会提示command not found。 - 而
sudo ufw status能正常执行,是因为sudo默认会重置环境变量,自动把/usr/sbin这类系统管理目录加入到PATH里,所以能定位到ufw。 su -切换后,系统加载了root的PATH,root的PATH默认就包含/usr/sbin,自然就能找到并执行ufw了。
验证小技巧
你可以自己对比两种环境的PATH差异:
- 执行
su切换后,输入:
看看输出里有没有echo $PATH/usr/sbin - 退出当前root,执行
su -切换后,再输入同样的命令,就能看到/usr/sbin已经在PATH里了。
备注:内容来源于stack exchange,提问作者rach
相关产品推荐
相关产品推荐

