プロジェクトでスクリプトを実行していますが、このコマンドが表示されます
su - `whoami`
私はいくつかの基本的な質問があります:
su
はスイッチユーザーの略です。
バックティック(``
) are コマンド置換 :これらは、バッククォート内でコマンドを実行した結果に置き換えられます。ここでwhoami
を実行し、ユーザー名を出力します。
-
after su
su
を実行させます ログインシェル :ログインシェルは、特に特定の環境構成を最初から読み取ります。デフォルトでは、ユーザーのシェルを通常のシェルとして実行するだけで、すべての作業は実行されません(リンクを参照)。
su
は常に新しいユーザーセッションを開始し、ユーザーが最初からログインしたかのようにユーザーを再認証します。外部からの環境変数はすべて、内部シェルでクリアされます。
したがって、これはすべてまとめてコマンドに相当します(マシン上のユーザー名も「blunderboy
」であると仮定します)。
su - blunderboy
これは、「新しいセッションをblunderboyとして再認証し、ログインシェルを実行する」ことを意味します。
このコマンドの全体的な結果は、現在のユーザーのように、最初から新しいセッションを開始することです。なぜわざわざそうするのですか? su
のいくつかの副作用を検出する可能性があります。特に、新しいユーザーセッションを開始するため、ユーザーが属するグループへの変更、および他のユーザーや権限の変更を検出します。 、およびおよび環境変数はすべてリセットされます。通常、ユーザーを新しいグループに追加しても、ユーザーは再度ログインするまで有効になりません¹:su
はその目的で再度ログインしたものとしてカウントされるため、起動するシェルでは新しいグループがアクティブになります。
¹これは単純化したものですが、この説明には十分に当てはまります。