回答:
実際には、ルートとして実行されます。ただし、バックティックはコマンドを評価するために必要であるため、実行前 に評価さsudo
れています。より直接的に、なぜこれだけではないのですか?
sudo whoami
あなたのwhoami
中のバックチック実際にあなたが何を見る理由は、現在のユーザーとしてサブシェルで評価されます。
sudo
は、プロセス自体が実際のユーザーIDを変更する必要があります。しかし、xyrの回答を読むと、これは実際にはそうではなかったようです。
ここでいくつかの疑わしいことが起こっているようです…
バッククォートは明らかに他の人が説明したことを行ってwhoami
おり、 'sudo'を呼び出す前に拡張し、期待どおりにバックティックをオフのままにします。
しかし、sudo(8)で実際に起こっていることを理解することは役に立ちます。だから私は実際にmanページを見ました!
「実際の有効なuidとgidは、ターゲットユーザーのものと一致するように設定されています...」
したがって、観察された動作は、有効なユーザーIDと実際のユーザーIDの違いとは関係がないようです。
「sudo printenv」を実行して、単に「printenv」と比較することもまた実例であり、実際に少し驚いた。[i]一部[/ i]のエクスポートされた変数が利用可能で他は利用できないことを示しています:呼び出しユーザーのHOME、PATH、PS1、SHELL、TERM、およびEDITORを報告しますが、MANPATH、CVSROOT、LD_LIBRARY_PATH、またはENV。プログラムが元のユーザーまたはrootとして動作する場合とは異なる動作をする可能性があるため、これは少し奇妙に思えます。
sudoを使用すると、rootユーザーとしてではなく、root権限で任意のコマンドを実行できます。これが便利な理由は、この設定では複数のユーザーがroot権限を持つことができるにもかかわらず、すべてのロギングなどが誰が変更を行ったかを示すためです。
この設定は、ルートパスワードを共有するよりも優れています。そのため、Ubuntuを含む多くのディストリビューションでrootユーザーを持つことは置き換えられました。
一方、sudo suはrootユーザーになるため、実際には使用しないでください。
この違いは、観察された(正しい)動作も説明します。
Sudoは、一時的に、自分が誰であるか(そもそもsudoが許可されている場合)にrootレベルの特権を付与します。
rootになるには、デフォルトでUbuntuでブロックされているrootとしてログインする必要があります。
これには注意が必要です。sudoはrootではありません。Fredがsudoとして何かを実行していることを示したい場合、SUDO環境変数をche3dする場合、SUDO_COMMANDが最も便利です。
whoami
?sudo whoami ..がrootを返すと言ってください