ログインシェルの目的は何ですか?

ログインシェルの目的は何ですか?

Bashのマニュアルは次のように言います:

ログインシェルの引数を持たない最初の文字は「-」または--loginオプションで呼び出されます。

これは、起動方法に応じてログインシェルを定義します。

または、目的の目的に応じてログインシェルを定義できますか?

たとえば、ログインシェルをユーザーがログインする必要があるシェルとして定義できますか?たとえば、ログインではなく対話型 bash シェルで create bash login シェルを実行すると、bash --loginログインする必要はありません。私のユーザー名とパスワードが暗黙的にキャッシュされて再利用されるのですか、それともログイン操作を実行しないのですか?

ログインを実行するためにログインシェルが必ずしも必要ではない場合、その意図された目的は何であり、ログインシェルと非ログインシェルを区別する機能がありますか?

ありがとうございます。

答え1

ログインはシェル以外のツールで処理されます。例えば login独自またはデスクトップマネージャ(PAMや他のさまざまなツールの助けを借りて)。

これ目的ログインシェルの役割は、ログインを処理するのではなく、ログインセッションの最初のシェルとして適切に機能することです。これは、主にログインセッションごとに一度だけ処理する必要がある開始ファイルを処理し、ログインセッションを不正アクセスから保護することを意味します。特定のシステム機能(特にジョブの一時停止)と対話するために必要です。

少なくともログインシェルの詳細バッシュで実装、以下に説明するように:

  • ログインシェルはのコマンドを処理してから、およびその間で見つかった最初の/etc/profileファイルを処理します(次に始まる非対話型ログインシェルではない場合)。~/.bash_profile~/.bash_login~/.profileいいえオプション--login);
  • logout代わりにログインシェルの実行を終了してくださいexit
  • ログインシェルを終了すると、すべての操作が一時停止します。
  • ログインシェルは一時停止できません。
  • ログインシェルセットHOME変数(POSIXly正しいモードを除く)
  • ログインシェルlogin_shellシェルオプションを設定します。

答え2

あなたは自分の質問に答えました。

bash --logincreate bash login shellを実行するときにログインする必要はありません。

これは、ユーザーがログインしており、ユーザー権限でアプリケーションを起動できる環境がすでにあることを意味します。
幸い、ログイン後にアプリを実行するたびにパスワードを入力する必要はありません。
主な違いはオプションを使用する-lことです--login

[bash] まず、/etc/profile および ~/.profile のコマンドを順次読み込み、実行しようとします。

(から抜粋man bash)。

目的は/etc/profileおよびから利益を得ることです~/.profilebashユーザーセッションを処理するコンポーネントではなくシェルです。PAMログイン/パスワードであなたを識別する役割を担うLinuxコンポーネント。

関連情報