そこまで大きな内容というわけではありませんが、結構前にまとめてみたいと思った内容でちょうどいい機会だったので一つの記事としました
bashの設定ファイル
概要
単にコマンドで環境変数やエイリアスなどを設定した場合、それはシェル内で有効なのでユーザのログインやスイッチによって初期化されるため再度設定しなければなりません。
エイリアスや環境変数は特定ユーザや環境で使い続けたい場合も多いので毎回設定するのは面倒です。
なので、シェルが起動されるたびにエイリアスや環境変数の設定が読み込まれるようにしておくのが便利です。
まずは設定に使われるファイルを列挙します。
ディストリビューションによって多少違いはあるかもしれません。
・bashの設定ファイル
ファイル | 起動タイミング | 対象範囲 |
---|---|---|
|
ログイン時に実行 | 全ユーザ |
|
~/.bashrc から参照 | 全ユーザ |
|
ログイン時に実行 | HOMEユーザ |
|
ログイン時に実行(.bash_profileがない場合) | HOMEユーザ |
|
ログイン時に実行(上記2つがない場合) | HOMEユーザ |
|
bash起動時に実行 | HOMEユーザ |
|
ログアウト時に実行 | HOMEユーザ |
以下それぞれのファイルと優先順位についてです。
/etc/profile
「/etc」配下の設定ファイルは全ユーザに対して適用されるのはイメージしやすいところです。
その中でも「profile」はログイン時に実行されます。
・設定例
私のCentOS7環境のデフォルト設定です。
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then umask 002 else umask 022 fi for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do if [ -r "$i" ]; then if [ "${-#*i}" != "$-" ]; then . "$i" else . "$i" >/dev/null fi fi done unset i unset -f pathmunge
スクリプト等の実行も含むことができ、デフォルトでは/etc/profile.d配下のファイルの実行がなされます。
/etc/bashrc
「/etc/bashrc」は後述する「~/.bashrc」から呼び出される設定ファイルです。
なのでタイミング的にはbashの起動時に呼び出され、呼び出し元の設定に依存しますが基本的には全ユーザから呼び出されることになります。
・設定例
同じくデフォルト設定の一部抜粋になります。
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then umask 002 else umask 022 fi SHELL=/bin/bash
~/.bash_profile
「~/.bash_profile」は各ログインユーザのホームディレクトリに隠しファイルとして存在する設定ファイルです。
ユーザのログイン時に実行され、「~/.bash_login」や「~/.profile」と同等のファイルになりますが呼び出される優先順位として以下の通りです。
~/.bash_profile > ~/.bash_login > ~/.profile
今回は私のCentOS7環境に存在した「~/.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
デフォルトの設定を確認すると、前述の「~/.bashrc」ファイルが呼び出されてることが分かります。
また、個人の設定としてコマンドや環境変数を設定する場合にはここに記述する場合が多いでしょう。
~/.bashrc
「~/.bashrc」も各ユーザのホームディレクトリに存在し、bashの起動時、つまりはbashの対話モードを起動時に毎回読み込まれます。
例えば、シェル変数を設定すると、対話モードでの呼び出しにはここで設定した変数の内容が表示されますが、シェルスクリプトではシェル変数の内容は反映されません。
・設定例
# .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
~/.bash_logout
「~/.bash_logout」もユーザのホームディレクトリに存在しますが、その名が示す通り使い始めではなくユーザのログアウト時に実行されます。
使いどころはどこだろうか。
ファイル参照順序
最後によくあるbash設定の読み込み順序を一枚図にまとめておきます。
この辺は試験関係なく、理解しておくと役に立つことがあると信じてる。
ーーーーーーーーーーーーーーー
・前回(第一回)
www.wantanblog.com