はじめに
.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の内容のみが表示されます。
[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内においておくと、確実です。