sudoでいつものLinuxコマンド実行できない!?を解決します

sudo [なんらかのコマンド] で「コマンドが見つかりません (command not found)」というエラーが出たときの対処法を解説します。結論としては visudo で sudo 時に読みこまれるパスの設定をしていきます。

こんにちは。iQeda [@iQeeeda] です。

普段つかっている Linux コマンドが使えないと焦ることがあります。

たとえばアクセス権が必要なファイルを編集したいとします。
自分でインストールした Emacs を使いたいので sudo emacs [ファイル名] と入力します。

カタカタカタ...ターン!

コマンドが見つかりません (command not found)
...!?

僕は泣く泣く vi を使いました。

今回はそんな sudo で使えないコマンドがあった場合、
visudo コマンドで secure_path を修正して PATH を通す方法を説明します!

sudo で一部コマンドが使えなくなる原因

sudo 実行時はセキュリティ上「環境変数を初期化している」のだそうです。

なので環境変数 PATH なども初期化されてしまい、
usr/local/bin にある普段づかいのライブラリが使えなくなってしまいます。

sudo 時の PATH を設定する

/etc/sudoers というファイルで sudo 時に使われる PATH が設定がされています。

visudo コマンド

直接 /etc/sudoer を開いてもいいのですが、vidudo というコマンドを使った方が簡単です。

visudo コマンドを実行すると vim で /etc/sudoers を編集する画面に移ります。

secure_path

vim で / と入力して secure_path という文字列を検索します。以下の追記を行ってください。

# 末尾に :/usr/local/bin を追加
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

ファイル保存後 visudo -c で記述に誤りがないかチェックしてみましょう。
問題なければ
sudo で個人設定のコマンドを実行できるようになります。

secure_path は自己責任で設定しましょう

そもそもなぜ PATH に制限がかかっているかというと、
sudo で何でも実行できてしまうと「危険」だからですね。

個人設定のコマンドを使うと予期せぬ影響があるかもしれませんので、
secure_path は自己責任で設定をしてくださいね。

No comments yet