1. sudo: XXX: command not found

其中,XXX 是所运行的程序命令。

  • 问题:直接运行 XXX 程序命令时没有问题,但加上超级权限 sudo 就报错 command not found

  • 原因:使用 sudo 命令时,使用的配置文件是 /etc/sudoers,查找可运行程序命令由 /etc/sudoers 文件中的 $secure_path 环境变量指定,所以即使系统环境变量 $PATH 中有 XXX 程序命令的路径,sudo XXX 也会报错。

  • 解决:

  1. 直接将程序命令所在目录(必须是绝对路径,不能带环境变量)追加到 /etc/sudoers 文件中的 $secure_path 变量,即 /etc/sudoers 文件中如下位置(由于 /etc/sudoers 文件是只读文件,所以这种强制修改方式不太好):
1
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  1. 查看 /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 的路径