bashが起動時に実行するファイル:UNIX処方箋
「事件は枯れたシステムが稼働する現場で起こってるんだ」と現場ですぐに役立つ知識を欲するあなたに贈る珠玉のTips集。今回は、いつの間にか作成されている「.bashrc」や「.bash_profile」というファイルの正体について解説する。
現在、Red Hat Linux 9を利用しています。ホームディレクトリに「.bashrc」や「.bash_profile」というファイルがあるのですが、これは何でしょうか?
ご質問にあるファイルは、どちらもユーザーのホームディレクトリに置かれ、シェルが起動するときに実行される初期化ファイルです。
シェルには、大きく分けて2つの役割があります。まず1つ目は、ユーザーがコマンドを実行するためのコマンドライン環境を提供し、ユーザーとOSの中枢であるカーネルとのインタフェースの役割を果たすことです。
もう1つは、ユーザーがログインを行った際に、環境を整えるためにさまざまなファイルを実行し、初期化を行うことです。初期化のために実行されるファイルはシェルの種類によっても異なり、今回ご質問にあるファイルはbash(Bourne Again SHell)が起動されるときに実行されます。
以下では、bashが起動するときにどのファイルをどのような流れで実行しているのかを交え説明していきましょう。
bash起動時に実行される初期化ファイル
ユーザーがログインに成功した後、bashは「ログインシェル」として一般的に以下のような流れでファイルを順次検索し、ファイルが存在していれば実行し起動します。
- /etc/profileを実行
- /etc/profileによって、/etc/profile.dディレクトリ配下のすべてのファイルを実行
- ログインユーザーのホームディレクトリにある̃/.bash_profileを実行*
- ̃/.bash_profileによって、̃/.bashrcを実行
- ̃/.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について説明しましたが、シェルにはほかにも多くの種類があります。シェルによって読み込まれるファイルやタイミング、環境変数の設定方法、関数の文法などに違いはありますが、考え方は同じです。詳細についてはオンラインマニュアルなどをご参照ください。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このページで出てきた専門用語
̃/.bash_profileを実行
̃/.bash_profileファイルが存在しない場合、̃/.bash_loginファイルを実行する。̃/.bash_profileファイル、̃/.bash_loginファイルが存在しない場合は、̃/.profileファイルを実行する。
実行属性を持っておらず直接実行することはできません
/etc/profile.dディレクトリ配下にあるファイルは除く。各種ツール起動時に実行され環境変数やエイリアスが設定される。
関連記事
- acctcomコマンドによる終了ステータスの確認
- 電源制御キーの役割と無効化
- 「load average」によるCPU負荷の確認
- FTP利用でのファイル/ディレクトリの属性変更
- UFS loggingによるエラーと復旧方法
- ALOMにおけるSC用ユーザーの確認とパスワード変更
- PostgreSQLのテーブルデータをファイルへコピーする方法
- sotrussやapptraceによる実行コマンドのトレース
- TCP遅延肯定応答タイマーのタイムアウト値の変更
- 複数のマシンで効率的にシャットダウンする方法
- WWW::MechanizeモジュールによるWebアクセスの自動化
- IPv6アドレスの自動生成による不具合解消法
- キャッシュファイルを利用したNFSマウント
関連リンク
Copyright © ITmedia, Inc. All Rights Reserved.