はじめに
.bash_profile
と.bashrc
でユーザ環境のカスタマイズはよくやってますが、
その使い分けについてまじめに確認したことがなかったのでメモをしておきます。
.bash_profileと.bashrc
ユーザがLinuxにログインすると、ホームディレクトリにある.bash_profile
と
.bashrc
が実行されるようになっています。
ユーザは、これらの中に環境変数やコマンドのエイリアスの設定を自由に追加できます。
.bash_profileと.bashrcの使い分けについて
sshでログインすると、.bash_profile
-> bashrc
の順に実行されます。
これは.bash_profile
のソースの上のあたりを見るとすぐにわかります。
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
***以下略***
しかし、すでにログインしている状況で、新たにシェル(bash)を起動した際は
.bashrc
だけが実行されます。
とくに、Linuxデスクトップ環境では、テスクトップ上で新しいコマンド端末を開いた際は
.bashrc
のみが実行されます。
つまり、
- ログイン時に一回だけ実行したい時
-> .bash_profile
に記載
- シェルを起動する度に実行したい時(一般的な設定)
-> .bashrc
に記載
テスト
上記のことを確かめるために簡単なテストをしました。
.bash_profile
に下記を追記
# テスト
echo '.bash_profileに記載されたechoです'
.bashrc
に下記を追記
# テスト
echo '.bashrcに記載されたechoです'
ターミナルソフトで対象のサーバにsshログインすると、.bashrc
に書いたものと
.bash_profile
に書いたものが表示されました。
.bashrc
に書いたものが先に表示されているのは、.bash_profile
内で.bashrc
が
呼び出された後の行にecho '.bash_profileに記載されたechoです'
を書いている
ためです。
Last login: Thu Jun 12 13:51:12 2014 from office-gw01.bbtower.co.jp
.bashrcに記載されたechoです
.bash_profileに記載されたechoです
[testuser@www ~]$
ログインした後に、bash
コマンドをたたくと、.bashrc
の内容のみが表示されます。
bash
[testuser@www ~]$ bash
.bashrcに記載されたechoです
ちなみにsu
コマンドに-
をつけるかつけないで挙動が変わります。
-
をつけると、ログインシェルが呼び出されます。
この違いも一応見てみると、下記のとおり
[testuser@www ~]$ su testuser
パスワード:
.bashrcに記載されたechoです
[testuser@www ~]$ su - testuser
パスワード:
.bashrcに記載されたechoです
.bash_profileに記載されたechoです
.bash_profileや.bashrcの大元
.bash_profile
や.bashrc
の大元は/etc/skel
にあります。
つまり、useradd
コマンドでユーザを作成すると、このディレクトリ内の
ファイルがサブディレクトリを含めて、作成したユーザのホームディレクトリに
コピーされます。
$ ls -la /etc/skel/
合計 36
drwxr-xr-x. 4 root root 4096 5月 9 20:21 2014 .
drwxr-xr-x. 114 root root 12288 6月 12 13:50 2014 ..
-rw-r--r-- 1 root root 18 7月 18 22:19 2013 .bash_logout
-rw-r--r-- 1 root root 176 7月 18 22:19 2013 .bash_profile
-rw-r--r-- 1 root root 124 7月 18 22:19 2013 .bashrc
以上のことから、すべてのユーザのホームディレクトリに共通に配布したい
ファイルがある場合は、事前に/etc/skel
内においておくと、確実です。