- 例如:我安装了ifconfig
- 首先我使用“su”成为 root
- 现在我写“ifconfig”并得到:“未找到命令”。
- 我写下“sudo ifconfig”,现在它可以工作了。
这似乎发生在很多程序中(并非全部)。
另一个例子:如果我不使用相同的方法,apt-get 似乎无法正确安装应用程序。
如果我已经是 root 身份,则不需要写 sudo。
这是为什么?我该怎么做才能解决这个问题?
答案1
TL,DR:使用su --login
或sudo
。
DebianPATH
为普通用户设置了不同的权限。在 中,您可以看到为 root/etc/profile
保留的默认权限:/sbin
if [ "`id -u`" -eq 0 ]; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH
type ifconfig
表示实用程序驻留在 ,/sbin/ifconfig
这就是普通用户无法轻松访问它的原因。当您su
不带参数运行时,调用用户的环境将保留,包括变量PATH
。sudo
另一方面, 提供了一个新的环境并覆盖了调用用户的PATH
。
su
您认为出现故障的原因是因为重置PATH
和IFS
默认是遗留行为。buster 最近切换到了不同工作原理util-linux
的实现;请参阅以了解详情。su
/usr/share/doc/util-linux/NEWS.Debian.gz
答案2
正如 dsstorefile1 所说,行为已经改变。
你可以运行“su -”而不是“su”,或者你可以
将“ALWAYS_SET_PATH yes”添加到“/etc/login.defs”以保留旧的 Debian 行为。
答案3
使用su - root
而不是su root
。然后输入adduser username sudo