ユーザーの作成をすると、「~/.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\]]\$ '