sudoが見つからないコマンドを返すので、なぜコマンドを実行するのですか?


12

コマンド例:

drush cc all

動作しますが、これ:

sudo drush cc all

私に与える:

sudo: drush: command not found

どうして?これを修正するには?


また、このような基本的なコマンドを使用して、この問題が発生することもありますcddzdo cd返される「コマンドが見つかりません」を使用します。もちろん私は後で気づいcd私はどちらかにrootシェルまたは必要必要があるので、ディレクトリにINGのことは、私は非常に多く、しませんヘルプの権限を持っていないことdzdo lsdzdo mvなどの外部からのコンテンツディレクトリのことを。
ワイルドカード2015年

2
の問題sudo cdは、それcdがプログラムではなく組み込みコマンドであることです。あなたがそのディレクトリに移動したい場合は、あなたがへのアクセスを持っていない、と(例えば)は、ファイルの名前を変更するには、(例えば)行うことができますsudo mv dir/oldfile dir/newfile sudo sh -c "cd dir; mv oldfile newfile"
G-Manは '

回答:


13

するとsudo、事前構成されたを取得します$PATH。これは、(想定されている)rootユーザーのデフォルトパスのようなものです。プログラムは、で識別されるディレクトリのリストに含まれていません$PATH

例を見る

sudoは、外部コマンドを実行するときに安全であることを試みます。

環境変数を処理する方法は2つあります。デフォルトでは、env_reset sudoers オプションは有効になっています。この原因コマンドを含む最少の環境で実行されるようにTERMPATHHOMESHELLLOGNAMEUSERおよびUSERNAME呼び出しプロセスから変数に加えてによって許可env_checkし、env_keep sudoersのオプション。実際には、環境変数のホワイトリストがあります。

sudoを保持するように構成できない場合$PATHの通常の回避策は、プログラムの完全なパス名を指定することです。(アクセスされていない)ディレクトリにある他の実行可能ファイルを呼び出すスクリプトではうまく機能しない可能性があります。


0

フルパスを指定する必要があります。また、より安全です。パスを指定しない場合、攻撃者がroot権限で実行される別のプログラムを作成する可能性があります。

また、/etc/sudoersそれを可能にするために行を入れる必要があります。man sudoers構文については、ここに記述するのは多すぎます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.