$ PATHにコマンドがありますが、sudoを使用すると認識されません。

$ PATHにコマンドがありますが、sudoを使用すると認識されません。

Ubuntu 14.04を使用しています。 $ PATHからコマンドを取得するためにsudoを使用することはできません。これを/root/.profileファイルに追加しました。

# ~/.profile: executed by Bourne-compatible login shells.

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

export PATH=$PATH:/usr/local/rvm/rubies/default/bin

mesg n

ログアウトし、sudo権限を持つユーザーとして再度ログインしました。その後、$ PATHでコマンドを実行しようとすると、「コマンドが見つかりません」というメッセージが表示されます。

daveuser@mymachine:/home/rails/myproject$ sudo gem pristine --all
sudo: gem: command not found
daveuser@mymachine:/home/rails/myproject$ sudo echo $PATH
/usr/local/rvm/gems/ruby-2.3.0/bin:/usr/local/rvm/gems/ruby-2.3.0@global/bin:/usr/local/rvm/rubies/ruby-2.3.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/    bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/rvm/bin
daveuser@mymachine:/home/rails/myproject$ sudo which gem
daveuser@mymachine:/home/rails/myproject$ which gem
/usr/local/rvm/rubies/ruby-2.3.0/bin/gem

$ PATHをechoすると、 "gem"コマンドを持つPATHを正確に知ることができます。 sudoユーザーとしてコマンドを実行するときに「gem」コマンドを認識させるには、どうすればよいですか?

編集する:環境を保存することは効果がありません。このようなことが起こりました…

remoteuser@remotemachine:/home/rails/myproject$ sudo --preserve-env gem pristine --all
[sudo] password for remoteuser: 
sudo: gem: command not found

編集2:sudo -lの出力

remoteuser@rtemotemachine:/home/rails/myproject$ sudo -l
Matching Defaults entries for remoteuser on rtemotemachine:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User remoteuser may run the following commands on rtemotemachine:
    (ALL : ALL) ALL

答え1

デフォルトでは、sudoはセキュリティ上の理由で環境変数をリセットします。 /etc/sudoersで次の行を確認してください。

Defaults    env_reset

PATH変数は "secure_path"の値にリセットされます。

e.g. Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

あなたは試すことができます

sudo env "PATH=$PATH" [command]sudo -Eへのパスを維持することは効果がありません。

より良い説明を見つけることができますここ

答え2

使用

sudo --preserve-env

-E, --preserve-env ユーザーが既存の環境変数を保存したいことを示すセキュリティポリシーです。ユーザーが環境を保護する権限を持っていない場合、セキュリティポリシーはエラーを返す可能性があります。

関連情報