ログインシェルと非ログインシェルの違い
このチュートリアルでは、UNIX ベースのシステムでのログインシェルと非ログインシェルの違いについて説明します。
UNIX ベースのシステムのシェルとは
UNIX ベースのシステムのシェルは、ユーザーとオペレーティングシステムのカーネル間のインターフェイスです。ユーザーからの入力を受け取り、それをカーネルに送信します。また、カーネルからユーザーに結果を受け取ります。
シェルには、ログインシェルと非ログインシェルの 2 種類があります。
すべてのシェルは、一連の起動スクリプトを実行して、起動後に環境をセットアップします。スクリプトにはさまざまな用途があり、それらはすべて環境に影響を与えます。
後続のスクリプトは、前のスクリプトが設定した値を上書きできます。
UNIX ベースのシステムのログインシェルとは
ログインシェルは、/etc/passwd ファイルを読み取って/bin/login を使用して正常にログインした後に開始される最初のプロセスです。ログインシェルは、ユーザーID で実行されます。
ログインシェルは、端末を使用してログインするとき、別のユーザーに切り替えるとき、または SSH を使用するときに実行されます。
ログインシェルが開始されると、起動スクリプトのコレクションを実行してシェル環境をセットアップします。以下のスクリプトが実行されます。
- ログインプロセスは
/etc/profileを実行します。 /etc/profileは/etc/profile.dのスクリプトを実行します- ログインプロセスは
~/.bash_profileを実行します。 ~/.bash_profileは~/.bashrcを実行します~/.bashrcは/etc/bashrcを実行します
次のコマンドは、シェルがログインシェルであるかどうかを示すために使用されます。
echo $0
出力として -bash または -su を取得すると、シェルがログインシェルであることを示します。出力の前にある - 記号に注意してください。
次の画像では、echo $0 コマンドの出力の前に - があります。シェルがログインシェルであることを示しています。

UNIX ベースのシステムでの非ログインシェルとは何ですか
ログインシェルは、非ログインシェルを開始します。ログインせずにプロセスで開始するシェル、または別のシェルから開始するシェルの場合があります。プロセスは、シェル実行可能ファイルの名前を使用して、非ログインシェルを開始します。
非ログインシェルとして bash シェルを実行すると、次のスクリプトが実行されます。
- 非ログインプロセスは
~/.bashrcを実行します ~/.bashrcは/etc/bashrcを実行します/etc/bashrcは/etc/profile.d/を実行します
シェルが非ログインシェルであるかどうかを判断するには、次のコマンドを実行します。
echo $0
出力が bash または su で、前に - 記号がない場合、シェルは非ログインシェルです。
次の画像で echo $0 コマンドを実行すると、出力には bash の前に - が表示されます。これは、ログインシェルを使用していることを意味します。
非ログインシェルを開始するには、シェルの実行可能ファイルの名前、この場合は bash を入力します。echo $0 コマンドを再度実行して、新しく開始されたシェルのタイプを確認します。echo コマンドの出力は、- なしの bash です。これは、新しいシェルが非ログインシェルであることを意味します。

