sudo 有一个名为secure_path
的设置,从 sudo 1.9.16 开始,secure_path
设置会默认启用。官方博客介绍了这个改动的原因。
当使用 sudo 执行命令的时候,用户当前的环境变量会被修改。其中PATH
会被设置为secure_path
的值。因此,经常会发生加了sudo
之后就找不到命令的情况。解决方法也是非常的简单,要么修改secure_path
的值,要么直接删除这个设置,这样 sudo 就不会修改PATH
了。
运行sudo visudo
,然后删除或者修改下面这一行即可。
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
还有一种方法是使用绝对路径来运行命令,可以用which
命令来查看命令的绝对路径。下面是一个例子。
sudo $(which COMMAND)