もう迷わない!.bash_profileと.bashrcの使い分けと読み込み順のメモ
はじめに
Linux環境でCUIを使っていると、エイリアスや環境変数の設定で.bash_profile
や.bashrc
といったファイルを編集しますよね。
しかし、「.bashrc
にエイリアスを書いたのに、SSHでログインし直したら使えない…なぜ?」といった経験はありませんか?
この記事では、自身のメモを元に、この2つのファイルがいつ、どのような順番で読み込まれるのか、そしてどのように使い分けるべきかを簡潔にまとめます。
結論ファースト:シェルの種類で使い分ける
まず結論です。
-
.bash_profile
: ログインシェルが起動する時に1回だけ読み込まれる。 -
.bashrc
: 非ログインシェルが起動する度に読み込まれる。
この「ログインシェル」と「非ログインシェル」の違いが理解の鍵です。
ログインシェルとは?
ユーザーが認証を伴ってログインする際に起動するシェルのことです。セッションの最初に一度だけ起動します。
-
具体例:
- SSHでサーバーにログインした時
- PCのコンソール(CUI画面)でユーザー名とパスワードを入力してログインした時
非ログインシェルとは?
すでにログイン済みの状態で、新しく起動するシェルのことです。
-
具体例:
- GUI環境でターミナルソフト(GNOME Terminalなど)を新しく開いた時
- ログイン中のシェルから手動で
bash
コマンドを実行した時
ファイルが読み込まれる仕組み
このシェルの違いによって、読み込まれる設定ファイルが変わります。
1. ログインシェルの場合
一般的に、以下の順番でファイルが読み込まれます。
-
/etc/profile
(システム全体の設定) -
~/.bash_profile
(ユーザー個別の設定)
多くのLinuxディストリビューションでは、デフォルトの~/.bash_profile
の中に、~/.bashrc
を読み込むための記述が含まれています。
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
この記述があるおかげで、ログイン時にも.bashrcの内容が読み込まれるわけです。
2. 非ログインシェルの場合
こちらはシンプルで、以下の順番で読み込まれます。
-
/etc/bashrc
(システム全体の設定) -
~/.bashrc
(ユーザー個別の設定)
プラクティス:どう使い分けるべきか?
ここまでの仕組みを踏まえると、ベストプラクティスが見えてきます。
-
エイリアスやシェル関数、プロンプトの見た目(
PS1
)など、インタラクティブなシェルで毎回設定したいものは、基本的に全て~/.bashrc
に記述する。 -
~/.bash_profile
では、~/.bashrc
を読み込む記述があることを確認する。(なければ追記する) -
環境変数(
PATH
など)のように、ログイン時に一度だけ設定すれば十分なものは~/.bash_profile
に記述する。
このルールで運用すれば、「設定したはずなのに読み込まれない」という問題はほぼ発生しなくなります。
おわりに
.bash_profile
と.bashrc
の違いは、シェルの種類(ログインシェルか非ログインシェルか)に起因します。
普段何気なく使っている設定ファイルの裏側にあるこの仕組みを理解しておくと、環境構築の際に余計なトラブルシューティングで時間を溶かすことがなくなります。
この記事で紹介した内容以外にも、技術情報をブログで発信しています。
MyNote
Discussion