「.bash_logout」と「.bash_profile」、「.bashrc」について

ユーザーの作成をすると、「~/.bash_logout」と「~/.bash_profile」、「~/.bashrc」が作られます。それぞれの用途についてまとめてみます。

環境

$ cat /etc/almalinux-release
AlmaLinux release 9.6 (Sage Margay)
$ uname -r
5.14.0-570.41.1.el9_6.x86_64

ユーザー作成時に作られるファイル

ユーザーの作成時に、ホームディレクトリー配下に自動で作成されるファイルは、「/etc/skel」のディレクトリーにあるものがコピーされます。また、「/etc/login.defs」はシステム全体のポリシーを記述します。

$ cat /etc/login.defs | sed '/^#/d;/^$/d' ・・・ システム全体のポリシーを記述するファイル
MAIL_DIR        /var/spool/mail ・・・ 各ユーザーのメールスプールディレクトリー
UMASK           022 ・・・ 新規ファイル作成時のデフォルトパーミッションマスク(ファイル:644、ディレクトリー:755)
HOME_MODE       0700 ・・・ ユーザー作成時のホームディレクトリーのパーミッション
PASS_MAX_DAYS   99999 ・・・ パスワードの最大有効日数(99999:ほぼ無制限)
PASS_MIN_DAYS   0 ・・・ パスワードの最小有効日数(0:いつでも変更可能)
PASS_WARN_AGE   7 ・・・ パスワード期限切れ前に警告を出す日数
UID_MIN         1000 ・・・ 通常ユーザーのUID最小値(RHEL8からは5000以上が推奨)
UID_MAX         60000 ・・・ 通常ユーザーのUID最大値
SYS_UID_MIN     201 ・・・ システムユーザーのUID最小値
SYS_UID_MAX     999 ・・・ システムユーザーのUID最大値
SUB_UID_MIN     100000 ・・・ ユーザー名前空間のUID最小値(コンテナを使わなければ気にしなくてよい)
SUB_UID_MAX     600100000 ・・・ ユーザー名前空間のUID最大値(コンテナを使わなければ気にしなくてよい)
SUB_UID_COUNT   65536 ・・・ ユーザー名前空間のUID総数(コンテナを使わなければ気にしなくてよい)
GID_MIN         1000 ・・・ 通常グループのGIDの最小値(RHEL8からは5000以上が推奨)
GID_MAX         60000 ・・・ 通常グループのGIDの最大値
SYS_GID_MIN     201 ・・・ システムグループのGID最小値
SYS_GID_MAX     999 ・・・ システムグループのGID最大値
SUB_GID_MIN     100000 ・・・ ユーザー名前空間のGID最小値(コンテナを使わなければ気にしなくてよい)
SUB_GID_MAX     600100000 ・・・ ユーザー名前空間のGID最大値(コンテナを使わなければ気にしなくてよい)
SUB_GID_COUNT   65536 ・・・ ユーザー名前空間のGID総数(コンテナを使わなければ気にしなくてよい)
ENCRYPT_METHOD  SHA512 ・・・ パスワードの暗号化方式
SHA_CRYPT_MAX_ROUNDS 100000 ・・・ SHA-512ハッシュの計算回数[繰り返し回数]
USERGROUPS_ENAB yes ・・・ ユーザーと同名グループ[プライベートグループ]を作成するかどうか
CREATE_HOME     yes ・・・ ホームディレクトリーを自動作成するかどうか
HMAC_CRYPTO_ALGO SHA512
$ cat /etc/default/useradd ・・・ ユーザー環境の利便性を記述するファイル
# useradd defaults file
GROUP=100 ・・・ デフォルトで割り当てるグループID
HOME=/home ・・・ ホームディレクトリを作成するときのベースPATH
INACTIVE=-1 ・・・ パスワードの有効期限切れ後、アカウントが無効になるまでの日数(-1 は無期限)
EXPIRE= ・・・ アカウントの有効期限日(YYYY-MM-DD形式、空なら無期限)
SHELL=/bin/bash ・・・ デフォルトのログインシェル
SKEL=/etc/skel ・・・ ホームディレクトリを作成するときにコピーするテンプレート(スケルトン)
CREATE_MAIL_SPOOL=yes ・・・ /var/mail/ユーザー名のメールスプールファイルを作成するかどうか
$ ls -la /etc/skel/. ・・・ テンプレートファイルが格納されるディレクトリー
total 24
drwxr-xr-x.   2 root root   62 Sep 13 01:51 .
drwxr-xr-x. 104 root root 8192 Sep 14 18:04 ..
-rw-r--r--.   1 root root   18 Apr 30  2024 .bash_logout ・・・ ログインシェル終了時に実行される
-rw-r--r--.   1 root root  141 Apr 30  2024 .bash_profile ・・・ ログインシェル起動時に実行される
-rw-r--r--.   1 root root  492 Apr 30  2024 .bashrc ・・・ 非ログインシェル起動時に実行される

/etc/skel/.bash_logoutファイル

ログインシェル終了時(ログアウト時)に一度だけ実行されるスクリプトファイルです。
主に、一時ファイルや一時ディレクトリーの削除などを記述します。

$ cat /etc/skel/.bash_logout
# ~/.bash_logout

/etc/skel/.bash_profileファイル

ログインシェル起動時(ログイン時)に一度だけ実行されるスクリプトファイルです。
主に、環境変数の設定やPATHの追加などを記述します。

$ cat /etc/skel/.bash_profile
# .bash_profile

# Get the aliases and functions ・・・ 翻訳:エイリアスと関数を取得
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs ・・・ 翻訳:ユーザー固有の環境設定と起動プログラム

/etc/skel/.bashrcファイル

非ログインシェル起動時(bashコマンドで新たにシェルを起動)に一度だけ実行されるスクリプトファイルです。
主に、エイリアスや関数の定義などを記述します。

# cat /etc/skel/.bashrc
# .bashrc

# Source global definitions ・・・ 翻訳:グローバル定義を読み込む
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific environment ・・・ 翻訳:ユーザー固有の環境設定
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
then
    PATH="$HOME/.local/bin:$HOME/bin:$PATH"
fi
export PATH

# Uncomment the following line if you don't like systemctl's auto-paging feature: ・・・ 翻訳:systemctl の自動ページング機能が気に入らない場合は、次の行のコメントを外してください
# export SYSTEMD_PAGER=

# User specific aliases and functions ・・・ ユーザー固有のエイリアスと関数
if [ -d ~/.bashrc.d ]; then
        for rc in ~/.bashrc.d/*; do
                if [ -f "$rc" ]; then
                        . "$rc"
                fi
        done
fi

unset rc ・・・ 前のfor文で使用している変数「rc」を削除

/etc/skel配下のファイルを編集してカスタム化

新規で作成するユーザー全体に適用したい場合、「/etc/skel」配下のファイルを編集するといいでしょう。既に作成済みのユーザーに対しては、ホームディレクトリーにあるものを直接編集してください。

/etc/skel/.bash_logoutファイルの編集

$ sudo vi /etc/skel/.bash_logout
# ~/.bash_logout

# コマンド履歴ファイルを削除する
rm -f ~/.bash_history

/etc/skel/.bash_profileファイルの編集

$ sudo vi /etc/skel/.bash_profile
# ~/.bash_profile

# カレントディレクトリーにある.bashrcを読み込み
if [ -f ~/.bashrc ]; then
  source ~/.bashrc
fi

# ユーザー固有の環境設定と起動プログラム

# デフォルトで使われるテキストエディタ
export EDITOR=vim

/etc/skel/.bashrcファイルの編集

$ sudo vi /etc/skel/.bashrc
# ~/.bashrc

# グローバル定義の読み込み(/etc/bashrcファイルがあれば)
if [ -f /etc/bashrc ]; then
  source /etc/bashrc
fi

# ユーザー固有環境変数の読み込み(変数PATH内に${HOME}/.local/binと${HOME}/binが含まれいなければ)
if ! [[ "${PATH}" =~ "${HOME}/.local/bin:${HOME}/bin:" ]]
then
    PATH="${HOME}/.local/bin:${HOME}/bin:$PATH"
fi
export PATH

# ユーザー固有のエイリアスや関数の読み込み(~/.bashrc.dディレクトリーがあれば)
if [ -d ~/.bashrc.d ]; then
  for FILE_NAME in ~/.bashrc.d/*; do
    if [ -f "${FILE_NAME}" ]; then
      source "${FILE_NAME}"
    fi
  done
fi
unset FILE_NAME


# systemctlの自動ページング機能を無効化
export SYSTEMD_PAGER=cat

### コマンド履歴関連 ### 
# 先頭がスペース、もしくは、直前と同じコマンドはコマンド履歴に残さない
export HISTCONTROL=ignoreboth
# 過去と同じコマンドは最新のものをコマンド履歴に残す
export HISTCONTROL=erasedups
# 指定したコマンドはコマンド履歴に残さない
export HISTIGNORE="ls:cd:pwd:exit:clear"
# セッション中のコマンド履歴を100件保持
export HISTSIZE=100
# コマンド履歴ファイルを無効化
unset HISTFILE

# プロンプト表示
PS1='[\[\e[38;5;196m\]\u@\h\[\e[m\]:\w\[\e[m\]]\$ '
タイトルとURLをコピーしました