bashが起動時に実行するファイルUNIX処方箋

「事件は枯れたシステムが稼働する現場で起こってるんだ」と現場ですぐに役立つ知識を欲するあなたに贈る珠玉のTips集。今回は、いつの間にか作成されている「.bashrc」や「.bash_profile」というファイルの正体について解説する。

» 2008年03月10日 01時30分 公開
[ITmedia]

現在、Red Hat Linux 9を利用しています。ホームディレクトリに「.bashrc」や「.bash_profile」というファイルがあるのですが、これは何でしょうか?


ご質問にあるファイルは、どちらもユーザーのホームディレクトリに置かれ、シェルが起動するときに実行される初期化ファイルです。

 シェルには、大きく分けて2つの役割があります。まず1つ目は、ユーザーがコマンドを実行するためのコマンドライン環境を提供し、ユーザーとOSの中枢であるカーネルとのインタフェースの役割を果たすことです。

 もう1つは、ユーザーがログインを行った際に、環境を整えるためにさまざまなファイルを実行し、初期化を行うことです。初期化のために実行されるファイルはシェルの種類によっても異なり、今回ご質問にあるファイルはbash(Bourne Again SHell)が起動されるときに実行されます。

 以下では、bashが起動するときにどのファイルをどのような流れで実行しているのかを交え説明していきましょう。

bash起動時に実行される初期化ファイル

 ユーザーがログインに成功した後、bashは「ログインシェル」として一般的に以下のような流れでファイルを順次検索し、ファイルが存在していれば実行し起動します。

  1. /etc/profileを実行
  2. /etc/profileによって、/etc/profile.dディレクトリ配下のすべてのファイルを実行
  3. ログインユーザーのホームディレクトリにある̃/.bash_profileを実行*
  4. ̃/.bash_profileによって、̃/.bashrcを実行
  5. ̃/.bashrcによって、/etc/bashrcを実行

 例えば、コマンドラインからのbashの起動、suコマンドで別のユーザーになった場合など、ログインシェルとしての起動ではない場合は、5のみが実行されます。

システムプロファイル

 /etcディレクトリ配下にある/etc/profile、/etc/bashrcといったファイルはすべてのユーザーに影響を与えるグローバルな初期設定が記述されており、「システムプロファイル」と呼ばれています。このシステムプロファイルは、ユーザーのホームディレクトリにあるファイルよりも先に実行されます。

 各ユーザーごとにログインシェル(bash)の環境をカスタマイズするという場合には、~/.bash_profile、~/.bashrcを編集します。

̃/.bash_profileと̃/.bashrcの違い

 すでに説明したように、~/.bash_profileはbashがログインシェルとして起動されたときにのみ実行されますが、~/.bashrcはログイン時も含めbashが起動するたびに実行される点が違います。

 そのため、~/.bash_profileにはユーザーがログイン時にのみ行う処理(設定)を記述し、~/.bashrcにはシェル変数や環境変数、エイリアスなどユーザー環境の基本となる設定を記述するのが一般的です。

sourceコマンド

 bashの起動時に読み込まれるファイルはテキストファイルのため、簡単に編集できます。しかし、編集しただけでは変更が反映されず、ログアウトしてログインし直すか、次のようにsourceコマンドを使用する必要があります。

$ source .bash_profile


 bashの起動ファイル内で別の起動ファイルを読み込む場合にも、sourceコマンドが使用されています。sourceコマンドは「.」と書くこともでき、例えば~/.bash_profileファイル中で~/.bashrcを読み込む場合は以下のように記述されています。

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi


 なお、これらの実行ファイルはシェルスクリプトと同じ形式で記述されていますが、実行属性を持っておらず直接実行することはできません*

 最後に、ここではbashについて説明しましたが、シェルにはほかにも多くの種類があります。シェルによって読み込まれるファイルやタイミング、環境変数の設定方法、関数の文法などに違いはありますが、考え方は同じです。詳細についてはオンラインマニュアルなどをご参照ください。

このページで出てきた専門用語

̃/.bash_profileを実行

̃/.bash_profileファイルが存在しない場合、̃/.bash_loginファイルを実行する。̃/.bash_profileファイル、̃/.bash_loginファイルが存在しない場合は、̃/.profileファイルを実行する。

実行属性を持っておらず直接実行することはできません

/etc/profile.dディレクトリ配下にあるファイルは除く。各種ツール起動時に実行され環境変数やエイリアスが設定される。


関連キーワード

Linux | Red Hat | UNIX | UNIX処方箋


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ