Linux下sudo报错
1. sudo: XXX: command not found
其中,XXX 是所运行的程序命令。
-
问题:直接运行
XXX
程序命令时没有问题,但加上超级权限sudo
就报错command not found
。 -
原因:使用 sudo 命令时,使用的配置文件是
/etc/sudoers
,查找可运行程序命令由/etc/sudoers
文件中的$secure_path
环境变量指定,所以即使系统环境变量$PATH
中有XXX
程序命令的路径,sudo XXX
也会报错。 -
解决:
- 直接将程序命令所在目录(必须是绝对路径,不能带环境变量)追加到
/etc/sudoers
文件中的$secure_path
变量,即/etc/sudoers
文件中如下位置(由于/etc/sudoers
文件是只读文件,所以这种强制修改方式不太好):
1
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
- 查看
/etc/sudoers
文件中的$secure_path
变量,该变量包含的所有目录下的程序命令都可以被 sudo 查看到,于是我们就可以创建程序命令 XXX 的软连接到$secure_path
变量包含的任意目录下,比如在目录/usr/local/bin
下创建 XXX 的软链接:
1
sudo ln -s path_of_XXX /usr/local/bin # path_of_XXX 为程序命令 XXX 的路径
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!