Linux

sudoでコマンドが見つからない場合の対応

管理者権限でコマンドを実行する場合に用いるsudoだが、環境変数が引き継がれないのでコマンドが見つからないなど不便なことがある。その場合はvisudoを用いて/etc/sudoersのsecure_pathなどを書き換えれば良い。以下の例ではsudoで見つけられなかった/opt/anaconda3/bin/pythonをsudoでも実行できるように設定変更してみた。

$ echo $PATH
/opt/anaconda3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
$ sudo echo $PATH
/opt/anaconda3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
$ which python
/opt/anaconda3/bin/python
$ python -V      
Python 3.6.1 :: Anaconda custom (64-bit)
$ sudo python -V
Python 2.7.5
$ sudo visudo
$     # Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin を以下のように書き換えた
$     # Defaults    secure_path = /opt/anaconda3/bin:/sbin:/bin:/usr/sbin:/usr/bin
$ sudo python -V
Python 3.6.1 :: Anaconda custom (64-bit)
$ ls -l /etc/sudoers
-r--r-----. 1 root root 4061 Sep 14 09:36 /etc/sudoers
$ sudo grep anaconda /etc/sudoers
Defaults    secure_path = /opt/anaconda3/bin:/sbin:/bin:/usr/sbin:/usr/bin