Windowsばっかり使っていた人がLinuxを使い始めて、技術記事を読んで面食らう1つに、この.bashrcや.bash_profileがあると思います。
私もちゃんとLinuxを勉強するまで、よくわからず技術記事の言われるままにハンズオンしていましたが、勉強すれば特に難しいものではありませんでした。
読み込み順
/etc/profile システム全体に対する設定(全ユーザー共通)
↓
~/.bash_profile ユーザー個別 かつ ログイン時のみ読み込まれる
↓
~/.bashrc ユーザー個別 かつ ログイン時 または シェル切り替え時に読み込まれる
/etc/profileは置き場所から分かるように、システム全体に対する設定ファイルです。
.bash_profileと.bashrcはディレクトリがユーザーホームディレクトリであることから分かるように、ログインユーザーごとの設定ファイルです。
.bash_profileと.bashrcの違いは、読み込まれるタイミングにあります。
.bash_profileはログインシェルとしてbashが起動される場合のみ、読み込まれます。
一方、.bashrcはログインシェルとしてbashが起動された時に加えて、他のログインシェル(zshなど)からbashへ切り替えられた時も起動されます。
あまり業務でも趣味でもログインシェルから違うシェルに切り替えたいということはないと思います。
あくまで参考のためですが、次のようにしてシェルを切り替えることができます。
[ec2-user@ip-172-31-47-3 ~]$ sh # bash -> sh へ切り替えた。
...
sh-4.2$ bash # sh -> bash へ切り替えた。
[ec2-user@ip-172-31-47-3 ~]$
~/.bashrcに書いた内容は、上記の3行目でも読み込まれますが、~/.bash_profileの内容は読み込まれません。
実験してみましょう。
$ cat .bash_profile # .bash_profileを確認
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
echo 'this is ~/.bash_profile'
$ cat .bashrc # .bashrcを確認
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
echo 'this is ~/.bashrc'
# bash -> sh , sh -> bash にシェルを切り替え
$ sh
sh-4.2$ bash
this is ~/.bashrc
$
上記の結果から、違いがわかったと思います。
33行目でbashに切り替えたときに、.bashrcに書いた29行目の内容のみが、34行目に出力されていますね。
結論としては、bash実行時に必ず反映しておきたい設定は、~/.bashrc にだけ編集すれば良い!ということになります。
AWSでの環境構築で手間取ることはありませんか?環境構築にはLinuxの基礎知識が不可欠だと悟り、私はこの本でLinuxを勉強し直しました。