こんにちは、なかにしです。
今回は、.bashrcと.bash_profileについて理解を深めたので、共有します!
いってみよう!
Linuxの挙動
bash起動~ログインまでの、Linuxの挙動は以下になります。
※細かいディストリビューションの差はありますので、前提としてCentOS7を使用します。
①起動する
②ログインシェルが起動する(/etc/profileを読み込む)
③ログインを待機する
④ログインする(~/.bash_profileを読み込む)
ここで、あれ?と思いました。
私はエイリアスや環境変数は「.bashrc」に書いてあり、
それをログイン時に読み込むものと思っていました。
しかし、実際読み込むのは「.bash_profile」。
思ってたのと違う…と思い、ちゃんと調べました。
.bash_profileと.bashrc
ログイン時、「.bash_profile」を読み込むのが正規の挙動のようです。
信頼と実績のわわわさん等によれば、
「.bashrc」
(ログインした後に画面上から)bashを起動したときに読み込まれる設定ファイル
「.bash_profile」
ログインシェルがbashの状態でログインしたときに読み込まれる設定ファイル
だそうです。
てことは、普通にログインするときは「.bash_profile」のみ読み込むのか…
あれ?でもログイン時に「.bashrc」のエイリアスとか反映されてるけどな~
さらに調べると、
「.bash_profile内で.bashrcを読み込ませている」というのを見つけました。
マジ?
ってことで実際に見てみました。
マジだ…
if文で「.bashrcがあれば読み込め」って書いてありますね。
「. ~/.bashrc」の「.」は「source」の省略系なんですって。かっこいい。
ちなみに、新しく作ったユーザーにも「.bashrc」と「.bash_profile」が自動で存在していたので調べると、新規ユーザー作成時に、「/etc/skel」の内容をユーザーのホームディレクトリにコピーするらしいです。
「/etc/skel」の内容も見てみました。
「.bash_logout」「.bash_profile」「.bashrc」の3種類がありますね。
これがユーザー作成時にホームディレクトリにコピーされ、
「.bash_profile」の内容として「.bashrc」を読み込めと書いてある。
結果として、.bashrcに書いたものが自動でログイン時に適用されるという流れなのですね。
使い分け
.bash_profile
ログイン時に一度だけ設定・実行したいものを記述します。
・環境変数
・ログイン時に実行したいコマンド
・パスの設定
.bashrc
.bash_profileに該当しなかった設定を記述します。
・エイリアス
・関数
・シェルプロンプトのカスタマイズ
さいごに
やっぱり奥が深いですね、Linux。
他のOSと歴史が違いすぎますね。
特に私は長らくWindowsユーザーで一部Linuxコマンドが使えないこともあり、
Macでやってる方はアドバンテージだな…と思ってます。
何気に今回の一番の収穫は、
「source」が「.」という省略系を持っているという発見です。
1文字て…
めっちゃいいですよね。使いたい。
今回はここまで!
Enjoy Hacking!!