.bash_profileと.bashrcについて

  • 234
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

.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  59 20:21 2014 .
drwxr-xr-x. 114 root root 12288  612 13:50 2014 ..
-rw-r--r--    1 root root    18  718 22:19 2013 .bash_logout
-rw-r--r--    1 root root   176  718 22:19 2013 .bash_profile
-rw-r--r--    1 root root   124  718 22:19 2013 .bashrc

以上のことから、すべてのユーザのホームディレクトリに共通に配布したい
ファイルがある場合は、事前に/etc/skel内においておくと、確実です。