web-dev-qa-db-ja.com

sudoを使用するときにコマンドが見つかりません

私の問題に関連しているように思われるサイト上のいくつかの質問がありますが、私はそれらのどれにも解決策を見つけることができませんでした。

私のオペレーティングシステムはUbuntu 12.04です。 mvn/tools/noarch/Apache-maven-3.1.1にインストールし、/etc/profileの最後に次の行を追加しました。

export M2_HOME=/tools/noarch/Apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH

その後、source /etc/profileを実行します。

mvn --versionを実行するとコマンドが成功し、mvn実行可能ファイルが見つかります。Sudo mvn --versionを実行すると、出力がSudo: mvn: command not foundになります。 PATHを使用してコマンドを実行するとSudoが異なる可能性があることを私は知っています。そのため、これを試しました。

$>Sudo echo $PATH
/tools/noarch/Apache-maven-3.1.1/bin:... some other stuff ...

私が試したもう1つのことは、Sudo su -を実行してからmvn --versionを入力することです。この場合、mvnが正常に見つかり、コマンドが成功します。ここで何が起こっているの?

48
izomorphius

$PATHはあなたのシェルによって評価されるので、あなたのチェックは期待通りには動きません。

/etc/sudoersはあなたのPATHをデフォルトのものに置き換えるように設定されています。

Sudoは、コマンドを実行する前にログインシェル環境をロードしないため、/etc/sudoersのデフォルトのPATHが使用されます。 su -はログインシェルを開きます。これは/etc/profileのロードを含みます。 man bash、sectionINVOCATIONを参照してください。

/etc/sudoersPATH resetを削除するだけです。おそらくsecure_pathというルールです。


CentOS

CentOSでは、PATHDefaults env_keepセクションに追加することができます。

Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
                        LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                        LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                        LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                        LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                        _XKB_CHARSET XAUTHORITY PATH"
36
Daniel Beck

現在のSudoPATHを渡します。

Sudo env "PATH=$PATH" your_command
41
opyate

@opyateの答えを詳しく説明しますが、次のシェルスクリプトを使用しています(たとえば、mysudoという名前の場合があります)。

#!/bin/bash
Sudo -E env "PATH=$PATH" "$@"
  • -Eは、Sudoに環境を保持するように指示します。
  • env "PATH=$PATH"Sudo呼び出しの外側に展開され、外部PATHSudo内でも使用可能にします(これは、-Eに加えてPATHは通常、環境全体が受ける治療に加えて、特別な治療を受けます。
  • "$@"は、スクリプトが受け取る引数をSudo行に渡します。

スクリプトをPATHのディレクトリにあるファイルに保存し、+xパーミッションを付与します。

12
Tom

現在の答えは少しあいまいなので、パスを変更する/etc/sudoersの特定の設定はsecure_pathです。

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

あなたはそれをSudo visudoで修正することができます、あるいはもっと良いことに、あなたが必要とするディレクトリを追加してください:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
4
mikemaccana

Maven を最初にインストールしたときにも同じ問題がありました。 2行追加したところ、問題は解決しました。

export M2_HOME=/tools/noarch/Apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH

4つのファイルに:

/root/.bashrc
/root/.profile

そして現在のユーザー(mehranは私のUbuntuのユーザー名です):

/home/mehran/.bashrc
/home/mehran/.profile
2
Mehran Hatami

RootのPATH変数を自分で行ったのとまったく同じようにつまり、/root/.bashrcにあるSudoのプロファイルにこれらの2行を追加して、それをソースとして追加する必要があります。

1
MariusMatutiae