トップ > Linuxらしい使い方を覚える >
ログイン時・シェル起動時・ログアウト時の処理の記述場所

  

スタートアップファイルとシェルファイル

この記事では "スタートアップファイル" および "シェルファイル" と呼ばれるファイルについて解説します。 どちらのファイルも、ログインやシェルの起動と終了に関連するファイルです。

スタートアップファイルはログイン直後に実行され、シェルファイルはシェルが起動した時点・シェルを抜けてログアウトした時点で実行されます。

スタートアップファイル

まずはスタートアップファイルから解説します。 スタートアップファイルというのはログイン直後に実行されるファイルで、

  1. /etc/profile
  2. ~/.bash_profile または ~/.bash_login または ~/.profile

の4つのファイルです。 (1) が全ユーザ共通のファイルで、環境変数 PATH の設定などが行われます。

  
(1) の /etc/profile は、/etc/profile.d ディレクトリに置かれた全てのファイルをさらに呼び出します。

(2) が各ユーザ専用のファイルで、環境変数 PATH へのホームディレクトリの追加などが行われます。

なお (2) の3つのファイルは、最初に見つかったファイルだけが実行されます。 ~/.bash_profile が見つかればそれが実行され ~/.bash_login と ~/.profile は実行されません。

~/.bash_profile も ~/.bash_login も見つからない場合のみ ~/.profile が実行されます。

  
Linux Mint のインストール直後の状態では ~/.bash_profile も ~/.bash_login は存在しませんので、無条件に ~/.profile が実行されます。

シェルファイル

続いて紹介するのはシェルファイルです。 シェルファイルは、

  1. シェルが起動した時点
  2. シェルを抜けてログアウトした時点

の2つの時点で実行されます。 シェルが起動された時点で実行されるファイルが、

  • ~/.bashrc

です。 シェルプロンプトの表示内容を定義するための環境変数 PS1 の設定などが行われます。

一方、シェルを抜けてログアウトした時点で実行されるファイルが、

  • ~/.bash_logout

です。 ログアウト後の画面の消去の処理などが記述されています。

ログイン・シェル起動・ログアウトについての補足

上で解説したようにログインした直後に、

  1. /etc/profile
  2. ~/.bash_profile または ~/.bash_login または ~/.profile

のファイルが実行されます。 理解しやすい動作であり、特に難しいことはありません

一方、シェルファイルはちょっとわかりにくいです。 シェルが起動された時点で、

  • ~/.bashrc

が実行され、シェルを抜けてログアウトした時点で、

  • ~/.bash_logout

が実行されますが、そこが少々わかりづらいのです

シェルが起動した時点とは

まず "シェルが起動した時点" ですが、X Window Systemにログインしただけではシェルは起動されません。 ログイン後に画面下部のパネルにある端末のアイコンから端末を起動することで、初めてシェルが起動します。

一方、コンソールからログインする場合には話は変わります。 ログインに成功した直後にシェルが起動し、あなたからの命令の入力を待ち構えます。 ログインしただけでシェルが起動されるのです。

これはつまり、X Window Systemからログインしても ~/.bashrc は実行されないが、コンソールからログインすると実行されるということです。

シェルを抜けてログアウトした時点とは

"シェルを抜けてログアウトした時点" はさらに理解しづらいです。 シェルファイルである、

  • ~/.bash_logout

が実行されるのは、"シェルを抜けてログアウトした時点" です。 "ログアウトした時点" ではなく "シェルを抜けてログアウトした時点" なのです。

X Window Systemで端末を閉じると、その端末に加えて端末で実行されていたシェルが終了します。 しかし、ログアウトはしません。 端末のウィンドウが、パッと消えるだけです。 そのため ~/.bash_logout は実行されません。

X Window Systemからログアウトするには、Linux Mintメニューの "ログアウト" を実行します。 では、この場合には ~/.bash_logout は実行されるのでしょうか。 残念ながら実行されません。 シェルを終了する、という動作が伴っていないからです。

一方、コンソールからログアウトするにはシェルを終了します。 シェルを終了しつつログアウトしますから ~/.bash_logout は実行されます。

これはつまり、X Window Systemからログアウトしても ~/.bash_logout は実行されないが、コンソールからログアウトすると実行されるということです。

各時点で実行されるファイルの整理

ではここで、ログイン時・シェル起動時・ログアウト時に実行されるファイルについて整理しておきます。

X Window System ログイン ~/.profile
端末を開く ~/.bashrc
端末を閉じる 無し
ログアウト 無し
コンソール
※SSH接続も同じ
ログイン ~/.profile
~/.bashrc
ログアウト ~/.bash_logout

上の表を見ればわかるようにログイン時に実行したい処理は ~/.profile に、端末を開く毎に実行したい処理は ~/.bashrc に記述しましょう。

  
SSH接続とは、他のUNIX系OSのPC や Windows PC からのネットワーク経由での接続のことです。 本ウェブサイトでは SSH接続 については解説していません。
  

ログインし直したり端末を開き直すことなくスタートアップファイル・シェルファイルを適用する方法

上で解説したようにログイン時には ~/.profile が実行され、端末を開くと ~/.bashrc が実行されます。 ということは、これらのファイルを修正した場合にはログインし直したり端末を開き直す必要があるのでしょうか

いえ、大丈夫です。 ログインし直すことも端末を開き直すこともなく、スタートアップファイルやシェルファイルを適用することはできます。 そのためのコマンドが用意されています

現行のシェル環境でスタートアップやシェルファイルを実行するためのコマンドが .(ピリオド) コマンドです。 例えば ~/.profile を実行するなら、

. ~/.profile

と実行します。 なお .(ピリオド) コマンドと全く同じ機能を持つコマンドである souce コマンドも用意されており、

source ~/.profile

と記述することもできます。

どちらの記述でも全く同じ結果になります。 どちらのコマンドを使っても構いません

なお、以前の記事でも触れたようにシェルにはたくさんの種類(=製品)があります。 bash, sh, ksh, zsh, csh, tcsh, ash, dash, fish などです。 シェルによって、

  1. .(ピリオド) コマンドしか理解しない
  2. source コマンドしか理解しない
  3. どちらとも理解できる

のように違いがあります。 bash はどちらの構文も理解できますので、どちらを記述しても大丈夫です。

  

まとめ

ログイン時やシェル起動時およびログアウト時に実行される "スタートアップファイル" や "シェルファイル" と呼ばれるファイルがあります。 ログインした直後には、

  1. /etc/profile
  2. ~/.bash_profile または ~/.bash_login または ~/.profile

のファイルが実行されます。 また、シェルが起動された時点では、

  • ~/.bashrc

が実行され、シェルを抜けてログアウトした時点では、

  • ~/.bash_logout

が実行されます。 シェルの設定をカスタマイズしたい場合には、これらのファイルを修正します。

修正内容を反映させるためにわざわざログインし直したり、端末を開き直す必要はありません。 .(ピリオド) コマンド、または source コマンドでスタートアップファイルやシェルファイルの修正内容を即座に反映させることができます。

操作/コマンド 説明
. filename
(または)
source filename
ファイル filename を現行のシェル環境で実行する

なお、各ファイルは以下の条件で実行されます。 ログイン時に実行したい処理は ~/.profile に、端末を開く毎に実行したい処理は ~/.bashrc に記述しましょう。

X Window System ログイン ~/.profile
端末を開く ~/.bashrc
端末を閉じる 無し
ログアウト 無し
コンソール ログイン ~/.profile
~/.bashrc
ログアウト ~/.bash_logout
メニュー