SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【LPIC102】bashの設定ファイルと読み込み順序 LPICで学ぶLinux2


そこまで大きな内容というわけではありませんが、結構前にまとめてみたいと思った内容でちょうどいい機会だったので一つの記事としました

bashの設定ファイル

概要

単にコマンドで環境変数やエイリアスなどを設定した場合、それはシェル内で有効なのでユーザのログインやスイッチによって初期化されるため再度設定しなければなりません。
エイリアスや環境変数は特定ユーザや環境で使い続けたい場合も多いので毎回設定するのは面倒です。

なので、シェルが起動されるたびにエイリアスや環境変数の設定が読み込まれるようにしておくのが便利です。

まずは設定に使われるファイルを列挙します。
ディストリビューションによって多少違いはあるかもしれません。

・bashの設定ファイル

ファイル 起動タイミング 対象範囲
/etc/profile ログイン時に実行 全ユーザ
/etc/bashrc ~/.bashrc から参照 全ユーザ
~/.bash_profile ログイン時に実行 HOMEユーザ
~/.bash_login ログイン時に実行(.bash_profileがない場合) HOMEユーザ
~/.profile ログイン時に実行(上記2つがない場合) HOMEユーザ
~/.bashrc bash起動時に実行 HOMEユーザ
~/.bash_logout ログアウト時に実行 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設定の読み込み順序を一枚図にまとめておきます。
この辺は試験関係なく、理解しておくと役に立つことがあると信じてる。

f:id:wantanBlog:20201031021220p:plain


ーーーーーーーーーーーーーーー

■参考
Linux - シェル環境のカスタマイズと使用

・前回(第一回)
www.wantanblog.com