.png)
私は Centos-6.3 を実行している友人のサーバーで sudo アクセス権を持っていますが、いくつかのコマンドを実行しようとするとsudo vim /var/www/html/index.html
エラーが発生します。sudo: vim: command not found
ただし、sudo su
その後実行するvim /var/www/html/index.html
と期待どおりに動作します。
echo $PATH
どちらもsudo echo $PATH
次のようになります。
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin
sudo which vim
ただし、結果は次のようになります:
which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)
追加してみました
export PATH=$PATH:/usr/local/bin
を使用すると、問題/root/.bashrc
が修正されますsudo su
が、それだけではありませんsudo <command>
。
sudo <command>
どうやって仕事場へ行けばいいですか?
答え1
を実行するとsudo
、多くのシステムでは、ホワイトリストに登録されていないすべての値を環境からクリアし、PATH 変数をサニタイズされた値にリセットするように構成されています。
前者は およびでDefaults env_reset
いくつか見つかります。後者の「セキュア」オーバーライドは として指定されています。 を するときにこの動作を削除するには、この行を削除します。Defaults env_keep += "SOME_VARIABLE_NAME"
/etc/sudoers
PATH
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
sudo
sudo -V
として実行すると、どの環境変数がどのように処理されるかが出力されます root
。
これらのデフォルトを削除したくない場合は、いつでもフルパス ( sudo /usr/local/bin/vim
) を使用してプログラムを指定できます。
SETENV
あるいは、次のようにファイル内でアカウントを許可することもできますsudoers
。
%wheel ALL=(ALL) SETENV: ALL
これにより、次のように環境のデフォルトを上書きできます。sudo PATH=$PATH which vim
変数はコマンドが実行される前にシェルによって解釈され、継承されますPATH
(ただし、これには etc は含まれない可能性があります/sbin
)。
答え2
sudo echo $PATH
思った通りには動作しません。$PATH
(あなたの)シェルに置き換えられます前にコマンドを実行します。
目的の動作を実現するには、 を使用できますsudo -i
。
から男須藤:
-i [コマンド]
の-私(初期ログインをシミュレートする)オプションは、パスワード(5) 対象ユーザをログインシェルとして登録します。これは、ログイン固有のリソースファイル(
.profile
またはなど).login
がシェルによって読み込まれることを意味します。コマンドが指定されている場合は、シェルに渡されて実行されます。
答え3
sudo <command>
どうやって仕事場へ行けばいいですか?
パスの問題が解決するまでは、フルパス名を使用してください
sudo /usr/local/bin/vim /var/www/html/index.html