実際に正しく呼び出すと、
sudo
現在の環境PATH
(env
コマンドを使用)および/または残りの環境(オプションを使用)で機能します。-E
sudo -E env "PATH=$PATH" <command> [arguments]
実際にそれを使用してエイリアスを作成できます。
alias mysudo='sudo -E env "PATH=$PATH"'
sudo
(元の名前を置き換えてエイリアス自体の名前を指定することもできますsudo
。)
コマンドでsudo
オプションの代わりに現在を使用するのはなぜですか?PATH
env
-E
コマンドの代わりにオプションでsudo
残りの環境を使用するのはなぜですか?-E
env
これもPATH
環境の一部ですか?
PATH
他の環境と比較して特別な点は何ですか?
ありがとうございます。
~からsudo マンページ
sudo は外部コマンドの実行時にセキュリティを確保しようとします。コマンドのなりすましを防ぐために、sudo は「.」をチェックします。ユーザーのPATHからコマンドを検索すると(どちらか一方または両方がPATHにある場合)、最後のコマンドは ""です(両方とも現在のディレクトリを表します)。しかし、参考にしてください。実際の PATH 環境変数は変更されず、sudo が実行するプログラムに変更されずに渡されます。
これは、「実際のPATH環境変数は変更されませんが、sudoが実行されているプログラムには変更されずに渡され、」ユーザー変数がPATH
実行されたコマンドにそのまま渡されることを意味しますか?sudo
答え1
有効にするとenv_reset
(デフォルト)sudo
環境を消去し、特に独自の環境を提供しますPATH
(参考secure_path
文献を参照/etc/sudoers
)。env_reset
無効になっていても適用され、消去される可能性がありenv_check
ます。出力を比較するとこれがわかります。env_delete
PATH
echo $PATH
そして
sudo printenv PATH
カスタム項目がある場合、PATH
出力には表示されませんsudo printenv
。
このenv
ヒントは環境の整理に関するものです。
sudo env "PATH=$PATH" command
sudo
実行を求められ、現在を含めるようにシェルで拡張しenv "PATH=$PATH" command
てrootとして実行すると、その値はその環境に保存され、その環境で実行されます。$PATH
PATH
env
PATH
command
したがって、構成に応じてのPATH
コンテキストを除いて特別なものはありません。適切な構成では、すべての変数をsudo
同じ方法で「特殊」sudo
またはPATH
「非特殊」にすることができます。よりsudo
そしてsudoers
詳しくはマンページをご覧ください。