新卒インフラエンジニア向けLinuC 102 試験対策シリーズがスタートします。前シリーズ(101)でサーバーへのログインからディスク管理までを扱いました。102 シリーズでは 運用・カスタマイズ・自動化・ネットワーク・セキュリティへと一段進みます。
第1回のテーマは シェル環境のカスタマイズ。環境変数の永続化、bash の起動ファイルの読み込み順、alias・history のチューニング、ロケールとタイムゾーンの設定 ── 「自分が毎日使うシェル」を整える基本動作を一度に押さえます。LinuC 101 第9回で扱った env/export/alias/history の基礎の上に、永続化と運用設定を積み上げる回です。
環境前提
- ディストリビューション: AlmaLinux 9.6(Sage Margay)
- シェル: bash 5.1.8(既定 alias と HISTSIZE=1000 が
/etc/profileで設定済み) - ユーザー:
developer(sudo NOPASSWD設定済み) - 関連VM:
linuc-alma(10.0.10.132) - NTP:
linuc-proxy(10.0.10.131、stratum 3)から chrony で同期 - ロケール初期値:
ja_JP.UTF-8/ タイムゾーン:Asia/Tokyo ~/.bashrcを編集する演習があります。必ず先にバックアップ(cp ~/.bashrc ~/.bashrc.bak)を取ってから操作してください
今ここマップ
LinuC 102 試験対策シリーズ(全12回)
▶ 第1回 シェル環境のカスタマイズ ← いまここ
第2回 Bashスクリプト入門
第3回 ネットワーク基礎
第4回 ネットワークトラブルシューティングとDNS
第5回 ユーザ・グループ管理と sudo 設定
第6回 ジョブスケジューリングと時刻管理
第7回 ログ管理実践
第8回 メール配送エージェント(MTA)の基本
第9回 ファイアウォールと SELinux 入門
第10回 暗号化によるデータ保護
第11回 クラウドセキュリティの基礎
第12回 オープンソースの文化
この記事で身につくこと
- シェル変数と環境変数の違いを説明し、
set/env/printenv/export/unsetを使い分けられる - bash の起動ファイル(
/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc)の読み込み順を説明できる alias/unalias/ シェル関数を活用し、対話シェルの効率を上げられるHISTSIZEHISTCONTROL等で history をカスタマイズできるlocale/localectl/timedatectlでロケールとタイムゾーンを確認・設定できる
第1章:「シェルそのもの」を整える
毎日触るサーバーのシェル ── プロンプトの色、頻用コマンドの短縮、履歴の保持件数、エラーメッセージの言語、ログの時刻表示。これらは全て「シェルそのものの設定」です。LinuC 101 第9回で env や alias の基本は扱いました。本記事では、「再ログインしても消えない」永続化と、運用環境としての整え方に踏み込みます。
誰のために整えるか
- 毎日のあなた:ログインのたびに同じ環境が用意されているのが当然になる
- 後任の引き継ぎ:あなたの
~/.bashrcを渡せばだいたい同じ操作感が再現できる - 自動化スクリプト:
LANG=Cで英語ロケール固定、タイムゾーンは UTC 統一、など環境差異の予防 - 監査・障害対応:時刻が NTP で正確、ログメッセージのロケールが揃っている、というインフラ品質
第2章:環境変数の復習と永続化
2.1 シェル変数と環境変数(101 第9回の復習)
linuc-almaで実行:
$ MY_VAR=local
$ export MY_GLOBAL=exported
$ bash -c 'echo "child: MY_VAR=[$MY_VAR] MY_GLOBAL=[$MY_GLOBAL]"'
実行結果:
child: MY_VAR=[] MY_GLOBAL=[exported]

子プロセスから見えるのは export された方だけ。シェル変数は現セッション内だけ、環境変数は子プロセスにも継承。これが基礎。
2.2 確認・操作のコマンド
| コマンド | 表示する内容 |
|---|---|
env | 環境変数のみ |
set | シェル変数すべて+シェル関数定義 |
echo $VAR / printenv VAR | 個別の値 |
export(引数なし) | 環境変数の一覧(declare -x 形式) |
unset VAR | 変数を削除 |
linuc-almaで実行:
$ set | wc -l
$ env | wc -l
実行結果(環境ごとに前後します):
104
36
set は 104 件(シェル変数+関数)、env は 36 件(環境変数のみ)。差の 68 件はシェル変数とシェル関数です。
2.3 主要な環境変数
| 変数 | 意味 |
|---|---|
PATH | 実行ファイルを探すディレクトリのリスト(コロン区切り) |
HOME | 現ユーザーのホームディレクトリ |
USER / LOGNAME | 現ユーザー名 |
SHELL | ログインシェルのパス(/etc/passwd 由来) |
PS1 | プライマリプロンプトの定義 |
LANG / LC_* | 言語・ロケール |
TERM | 端末種別 |
EDITOR / VISUAL | 既定エディタ(visudo 等が参照) |
2.4 「今だけ」と「ずっと」── 永続化の基本
- 今だけ(現セッションのみ):
export VAR=valueをシェルで打つ - ずっと(再ログインしても):
~/.bashrcまたは~/.bash_profileに書く - 全ユーザー共通:
/etc/profileまたは/etc/profile.d/*.shに書く(要 root)
「どのファイルに書くべきか」は次章の起動ファイルの読み込み順を理解すると判断できます。
📖 試験Tipsボックス:環境変数とシェル変数
主題:1.06.1(重要度:中〜高)
出題パターン:「環境変数のみを表示するコマンドは?」「シェル変数を環境変数化するは?」「シェル変数全部を表示するは?」
暗記ポイント
VAR=value:シェル変数(子に伝わらない)export VAR=value:環境変数(子に伝わる)/ 既存変数もexport VARで環境変数化env:環境変数のみ /set:シェル変数全部+関数 /printenv VAR:個別unset VAR:削除- 主要:
PATHHOMEUSERSHELLPS1LANGTERMEDITOR
第3章:bash の起動ファイル
3.1 ログインシェルと非ログインシェル
bash は起動の仕方によって読み込むファイルが変わります。区別の鍵は「ログインシェルかどうか」。
- ログインシェル:SSH 接続直後、
su -、コンソールログインなど。「ログイン処理を伴って起動した bash」 - 非ログイン・インタラクティブシェル:すでにログインしているターミナルから新しく
bashを打って起動した子シェル - 非インタラクティブシェル:シェルスクリプト実行時の bash
3.2 読み込み順の地図
【ログインシェル】(SSH 接続など)
/etc/profile
│
├─ /etc/profile.d/*.sh (色付け、言語設定など)
│
▼
~/.bash_profile (無ければ ~/.bash_login → ~/.profile)
│
│(多くは中で)
▼
~/.bashrc を source する記述あり
│
│
▼
/etc/bashrc (~/.bashrc が source)
【非ログイン・インタラクティブ】(端末から bash を新規起動)
/etc/bashrc
│
▼
~/.bashrc

AlmaLinux 9 既定の ~/.bash_profile は次のようになっています。linuc-almaで実行:
$ cat ~/.bash_profile
実行結果:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
~/.bash_profile から ~/.bashrc を source している点に注目。結果として、SSH ログイン時も非ログインシェル起動時も、~/.bashrc は両方とも読まれる。これは多くのディストリビューションの慣習です。
3.3 ファイルごとの役割
| ファイル | 役割 | 典型的な記述 |
|---|---|---|
~/.bash_profile | ログイン時に1回だけ実行 | PATH 永続追加、起動時のお知らせ |
~/.bashrc | シェル起動のたび毎回 | alias、関数、PS1、HISTSIZE などの対話設定 |
~/.bash_logout | ログアウト時に1回 | 履歴のクリア、画面消去など |
/etc/profile | 全ユーザー共通のログイン時設定 | システムワイド PATH、共通環境変数 |
/etc/profile.d/*.sh | /etc/profile から自動 source | パッケージごとの初期化(vim、git 等) |
/etc/bashrc | 全ユーザー共通の bashrc 相当 | システムワイド alias、関数 |
3.4 自分が今ログインシェルにいるか確認
echo $0 はシェルの名前を返しますが、ログインかどうかは判別しません。確実なのは shopt login_shell。linuc-almaで実行:
$ shopt login_shell
実行結果:
login_shell off
SSH の接続直後でも、スクリプト実行のときの bash は非ログインで起動する場合があります。意外と複雑なので、「現在のシェルがログインかどうかは shopt login_shell で確認する」と覚えておきます。
3.5 編集後に再読み込み
~/.bashrc を編集しても、編集中のシェルには反映されません。再ログインするか、source(または短縮形 .)で再読み込みします:
$ source ~/.bashrc # または
$ . ~/.bashrc
📖 試験Tipsボックス:bash 起動ファイル
主題:1.06.1(重要度:中〜高)
出題パターン:「ログインシェルが最初に読むファイルは?」「全ユーザー共通の bashrc は?」「~/.bash_profile と ~/.bashrc の違いは?」
暗記ポイント
- ログインシェル:
/etc/profile→/etc/profile.d/*.sh→~/.bash_profile(→ 多くは~/.bashrcを source) - 非ログイン・インタラクティブ:
/etc/bashrc→~/.bashrc ~/.bash_profile:ログイン1回だけ/~/.bashrc:シェル起動のたび- 全ユーザー共通:
/etc/profile/etc/profile.d//etc/bashrc - 編集後は
source ~/.bashrcまたは. ~/.bashrcで再読み込み - 判定:
shopt login_shell
第4章:alias と関数
4.1 既定で定義されている alias
AlmaLinux 9 はログイン時に /etc/profile.d/colorls.sh 等から alias を自動定義します。linuc-almaで実行:
$ alias | head -8
実行結果:
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
注目すべきは ll が既に定義されている点。LinuC 101 第9回では「自分で alias ll='ls -alF' する」と書きましたが、AlmaLinux 系では既定で ls -l --color=auto として定義されています。確認は type コマンド。
linuc-almaで実行:
$ type ls
$ type ll
実行結果:
ls は `ls --color=auto' のエイリアスです
ll は `ls -l --color=auto' のエイリアスです
4.2 自分の alias を永続化
新しい alias を ~/.bashrc に追記すれば、再ログイン後も生きます。
# ~/.bashrc に追記する例
alias ll='ls -alFh --color=auto' # 上書きで属性多めに
alias g='git'
alias ..='cd ..'
alias ...='cd ../..'
追記後は source ~/.bashrc で即時反映。alias の上書きを一時的に避けたい場面では、コマンドの前にバックスラッシュを置いて \ls のように呼び出すと素のコマンドが実行されます。
4.3 alias で表現できないものは関数で
alias は単純な文字列置換なので、引数を取って加工する処理には向きません。引数を扱いたい場合はシェル関数を使います。
linuc-almaで実行:
$ myls() { ls -l "$@"; }
$ myls /etc | head -3
実行結果:
合計 1052
-rw-r--r--. 1 root root 4673 3月 12 2025 DIR_COLORS
-rw-r--r--. 1 root root 4755 3月 12 2025 DIR_COLORS.lightbgcolor
"$@" は「呼び出し時の全引数を、引用を維持しつつ展開」するイディオム。関数の中で使えば、myls /etc でも myls -a /etc でも引数が透過的に渡ります。
関数の永続化も ~/.bashrc への追記。削除は unset -f myls。
第5章:history のカスタマイズ
5.1 既定値を確認
linuc-almaで実行:
$ echo "HISTSIZE=$HISTSIZE / HISTFILESIZE=$HISTFILESIZE / HISTCONTROL=$HISTCONTROL"
$ echo "HISTFILE=$HISTFILE / HISTTIMEFORMAT=$HISTTIMEFORMAT"
実行結果:
HISTSIZE=1000 / HISTFILESIZE= / HISTCONTROL=
HISTFILE=/home/developer/.bash_history / HISTTIMEFORMAT=
AlmaLinux 9 既定の状態:
HISTSIZE=1000:メモリ上の履歴件数(1000行)。/etc/profileで設定されているHISTFILESIZE=:未設定(ファイル~/.bash_historyの件数上限は明示されていない)HISTCONTROL=:未設定(重複や先頭スペース行の制御なし)HISTTIMEFORMAT=:未設定(履歴にタイムスタンプ無し)
5.2 おすすめのチューニング
~/.bashrc に以下を追記すると、history が一気に使いやすくなります:
# ~/.bashrc に追記
HISTSIZE=10000 # メモリ上の履歴件数を増やす
HISTFILESIZE=20000 # ファイル上の履歴件数を増やす
HISTCONTROL=ignoredups:ignorespace # 重複と先頭スペース行を除外
HISTTIMEFORMAT='%F %T ' # 履歴にタイムスタンプ表示
shopt -s histappend # 上書きでなく追記(複数セッションで安全)
| 設定 | 意味 | 運用上の効果 |
|---|---|---|
HISTSIZE=10000 | 履歴件数を増やす | 「先週何打ったっけ」が遡れる |
HISTCONTROL=ignoredups | 連続する重複を除外 | 同じコマンドを何度も打っても1件にまとまる |
HISTCONTROL=ignorespace | 先頭がスペースの行を除外 | (スペース)mysql -p MyPassword のように打つと履歴に残らない |
HISTTIMEFORMAT='%F %T ' | 履歴にタイムスタンプ | 「いつそのコマンドを打ったか」が監査用に残る |
shopt -s histappend | 追記モード | 複数セッションを並行で使っても履歴が消えない |
5.3 機密情報を履歴に残さない
パスワードを引数に渡すコマンド(mysql -p や curl -u user:pass など)は、履歴に残ると後で漏洩リスクになります。HISTCONTROL=ignorespace を設定したうえで、コマンドの先頭に半角スペースを入れて打つと履歴に残りません:
$ mysql -uadmin -psecret # 先頭スペースで履歴に残らない
$ history | tail -3 # 確認 → 上のコマンドは出ない
既に履歴に入ってしまったら history -d <番号> で個別削除、または history -c で全削除(履歴は空になります)。
📖 試験Tipsボックス:history のカスタマイズ
主題:1.06.1(重要度:中)
出題パターン:「履歴の重複を除外する設定は?」「履歴ファイルの場所は?」「先頭スペースの行を履歴から除外するには?」
暗記ポイント
HISTSIZE:メモリ上の履歴件数 /HISTFILESIZE:ファイル上の件数HISTCONTROL=ignoredups重複除外 /=ignorespace先頭スペース行除外 /=ignoreboth両方HISTTIMEFORMAT='%F %T 'でタイムスタンプHISTFILE:履歴ファイルの場所(既定~/.bash_history)history -c全消去 /history -d N個別削除 /shopt -s histappend複数セッション追記
第6章:locale ── ロケールと国際化
6.1 ロケールが決めるもの
ロケールは 「言語+地域+文字エンコーディング+数値・通貨・日付の書式」のセットです。ja_JP.UTF-8 なら「日本語・日本・UTF-8」。en_US.UTF-8 なら「英語・米国・UTF-8」。
linuc-almaで実行:
$ locale
実行結果:
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=
| カテゴリ | 用途 |
|---|---|
LC_CTYPE | 文字種別(大小判定、エンコーディング) |
LC_NUMERIC | 数値の桁区切り・小数点 |
LC_TIME | 日付・時刻の表示形式 |
LC_MESSAGES | システム・コマンドのメッセージ言語 |
LC_MONETARY | 通貨書式 |
LC_COLLATE | ソート順 |
LANG | 上記すべての既定値 |
LC_ALL | すべてを上書きする最上位の指定 |
6.2 優先順位
LC_ALL > 個別の LC_* > LANG の順で優先されます。日常では LANG だけ設定すれば十分。LC_ALL はスクリプト内で「他の設定を上書きしてでも英語ロケールに固定したい」場合に使います。
6.3 利用可能なロケールの確認
linuc-almaで実行:
$ locale -a | grep -E '^(C|en_US|ja_JP|POSIX)' | head
実行結果:
C
C.utf8
POSIX
ja_JP.eucjp
ja_JP.utf8
C ロケールは「最小限の英語環境」。スクリプトで LANG=C を使うと出力を予測可能にできます。
6.4 ロケール切り替えで動作が変わる実例
linuc-almaで実行:
$ LANG=C ls /no-such-file 2>&1
$ LANG=ja_JP.UTF-8 ls /no-such-file 2>&1
実行結果:
ls: cannot access '/no-such-file': No such file or directory
ls: '/no-such-file' にアクセスできません: そのようなファイルやディレクトリはありません
同じコマンドでも、LANG=C なら英語、LANG=ja_JP.UTF-8 なら日本語のメッセージ。自動化スクリプトで grep するなら、メッセージが揺れない英語版(LANG=C 固定)が安全です。
6.5 システム全体のロケール
OS 全体のロケールは localectl で管理します。linuc-almaで実行:
$ localectl status
実行結果:
System Locale: LANG=ja_JP.UTF-8
VC Keymap: jp
X11 Layout: jp
変更したい場合(変更は本記事では実行せず説明のみ):
$ sudo localectl set-locale LANG=en_US.UTF-8 # 英語に
$ sudo localectl set-keymap us # キーマップ変更
📖 試験Tipsボックス:locale
主題:1.08.3(重要度:中)
出題パターン:「現在のロケールを表示するコマンドは?」「利用可能ロケール一覧は?」「LANG と LC_ALL の優先順は?」
暗記ポイント
locale:現在の設定 /locale -a:利用可能ロケール一覧- 優先順位:
LC_ALL> 個別LC_*>LANG LANG=C コマンド:英語ロケールでスクリプト実行- システム全体:
localectl status確認 /localectl set-locale LANG=...変更 - 主要カテゴリ:
LC_CTYPE(文字)/LC_TIME(日付)/LC_MESSAGES(メッセージ)/LC_NUMERIC(数値)
第7章:timedatectl ── 時刻とタイムゾーン
7.1 現状の確認
linuc-almaで実行:
$ timedatectl status
実行結果(時刻は実行時のもの):
Local time: 日 2026-05-10 22:04:50 JST
Universal time: 日 2026-05-10 13:04:50 UTC
RTC time: 日 2026-05-10 13:04:51
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
- Local time:タイムゾーンを反映した現地時刻(JST)
- Universal time:UTC(協定世界時)
- RTC time:ハードウェア時計(マザーボード上の電池でも動く時計)
- Time zone:現タイムゾーン名と UTC からのオフセット
- System clock synchronized:NTP との同期完了か
- NTP service:NTP クライアント(chrony)が動作中か
- RTC in local TZ:RTC を UTC で持つか現地時刻で持つか(Linux は UTC が標準、Windows と Dual Boot 時のみ true)
7.2 タイムゾーン管理
linuc-almaで実行:
$ timedatectl list-timezones | grep -E "Tokyo|UTC" | head
実行結果:
Asia/Tokyo
Etc/UTC
UTC
タイムゾーンを変更する場合(本記事では実行せず説明のみ):
$ sudo timedatectl set-timezone Asia/Tokyo
$ sudo timedatectl set-timezone UTC # クラウドの定石
$ sudo timedatectl set-ntp true # NTP 有効化(chrony が動く)
7.3 chrony で NTP 同期状態を確認
本検証環境では、社内 NTP サーバー linuc-proxy から時刻同期しています。linuc-almaで実行:
$ chronyc tracking | head -6
$ chronyc sources
実行結果(一部抜粋):
Reference ID : 0A000A83 (linuc-proxy.linuc.local)
Stratum : 4
Ref time (UTC) : Sun May 10 13:04:21 2026
System time : 0.000000032 seconds slow of NTP time
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* linuc-proxy.linuc.local 3 6 377 29 -4938ns[ +21us] +/- 71ms
- Reference ID:同期している NTP サーバー(linuc-proxy)
- Stratum:階層数。4 は「stratum 0(原子時計など)から4 段下」
- System time:システム時刻と NTP との誤差(秒)
- Last sample:直近の補正量と誤差範囲
「^*」のマークは「現在同期中のサーバー」を示す。複数 NTP サーバーを設定していれば、Reach や RMS offset で品質を判断します。
第8章:現場での使いどころ
- 運用環境のカスタマイズ:
~/.bashrcに PS1 / alias / 関数 / HISTCONTROL を集約。新規サーバーへの引き継ぎはscp ~/.bashrc1発で済む - dotfiles を git 管理:
~/.bashrc~/.bash_profile~/.vimrc等をgit initでリポ化、複数サーバー間で同期 - クラウドのタイムゾーン設計:本番は UTC 統一(ログ突合と海外メンバー協業のため)、踏み台や運用ツールサーバーは JST、のような使い分け
- 自動化スクリプトの安定化:スクリプト先頭で
export LC_ALL=Cを書く。日本語メッセージで grep が引っかかる事故を予防 - 機密情報の履歴除外:
~/.bashrcにHISTCONTROL=ignoredups:ignorespace。パスワード入力時は先頭スペースで打つ - 監査用タイムスタンプ:
HISTTIMEFORMAT='%F %T 'で「いつ何を打ったか」を残す。インシデント調査の基本 - NTP の死活監視:
chronyc trackingをスクリプト化、System timeが一定値を超えたらアラート
第9章:ヒヤリハット ── ~/.bashrc 構文ミスでログイン不能
⚠️ ~/.bashrc のクォート閉じ忘れで SSH ログインできない
新人M君は、本番運用サーバーのプロンプトをカラフルにしたくなり、~/.bashrc に PS1 設定を追記しました。クォートを閉じ忘れたまま保存し、その日はそのまま退社。翌朝、別の作業で SSH 再接続したところ、ログイン直後にプロンプトが表示されず、シェルが起動エラーで切断。リモートでは復旧できず、Hyper-V コンソールから直接ログインして ~/.bashrc を修正する事態に。
教訓:
~/.bashrc編集前に必ず バックアップ:cp ~/.bashrc ~/.bashrc.bak- 編集後、保存前に 構文チェック:
bash -n ~/.bashrc(エラー無しなら何も出ない) - 反映前に 別の SSH セッションを別タブで開いておく:現セッションが切れても予備で復旧可能
- 致命的に壊れても
bash --norcでログインすれば~/.bashrcをスキップできる(緊急脱出) - SSH 接続不能になった場合、Hyper-V コンソール / クラウドのシリアルコンソールを確保しておく
類似事例:~/.bash_profile の export PATH=... でタイポ → PATH が壊れて ls も vi も呼べなくなる。復旧は /usr/bin/vi ~/.bash_profile のようにフルパス指定。あるいは PATH=/usr/bin:/usr/sbin と打って一時復旧。
やってみよう
linuc-alma にログインしている前提で、演習1〜4を順に実行してください。演習2の前に必ず ~/.bashrc のバックアップを取得します。
演習1:環境変数とシェル変数
echo "$PATH"で PATH を確認env | head -10で環境変数の頭10件set | wc -lとenv | wc -lで件数差を比較MY_VAR=localexport MY_GLOBAL=exportedbash -c 'echo "child: MY_VAR=[$MY_VAR] MY_GLOBAL=[$MY_GLOBAL]"'- 子プロセスから MY_VAR が空になっていることを確認
unset MY_VAR MY_GLOBAL
演習2:bash 起動ファイルを観察
cp ~/.bashrc ~/.bashrc.bakで必ずバックアップcat ~/.bash_profileで内容確認(~/.bashrcを source しているはず)head -20 ~/.bashrcで頭20行ls /etc/profile.d/ | head -10でシステム profile.dshopt login_shellで現セッションがログインかどうかbash --login -c 'shopt login_shell'でログインで起動した場合の値を比較bash -n ~/.bashrcで構文チェック(何も出なければ OK)
演習3:alias と関数
type lstype ll(既定 alias 確認)alias | head -8myls() { ls -l "$@"; }myls /etc | head -3type mylsunset -f mylsecho "HISTSIZE=$HISTSIZE / HISTCONTROL=$HISTCONTROL"で history の既定値
演習4:locale と timedatectl
localeで現在の設定locale -a | grep -E '^(C|en_US|ja_JP|POSIX)' | headLANG=C ls /no-such 2>&1(英語メッセージ)LANG=ja_JP.UTF-8 ls /no-such 2>&1(日本語メッセージ)localectl statustimedatectl statustimedatectl list-timezones | grep Tokyochronyc tracking | head -6chronyc sources- クリーンアップ:必要なら
mv ~/.bashrc.bak ~/.bashrcでバックアップから復元(編集していなければそのまま削除:rm ~/.bashrc.bak)
分からないオプションは man bash(STARTUP FILES セクション)、man locale、man timedatectl、man chrony で調べてください。
理解度チェック
○か×で答えてください。回答と解説は次回冒頭で振り返ります。
setコマンドは環境変数のみを表示し、シェル変数は表示しない。- SSH でログインすると、最初に
~/.bashrcが読み込まれ、その後~/.bash_profileが読み込まれる。 HISTCONTROL=ignorespaceを設定すると、コマンドの先頭に半角スペースを置いて打った行は履歴に残らない。- ロケール設定の優先順位は
LC_ALL> 個別のLC_*>LANGである。 timedatectl set-ntp trueを実行すると、systemd が NTP サービス(AlmaLinux 9 では chrony)の自動起動を有効化する。
解答
- 1. ×
setはシェル変数すべて+関数を表示。環境変数のみはenvまたはprintenv - 2. × ログインシェルでは
~/.bash_profileが先に読まれ、そこから~/.bashrcが source される(多くのディストロの慣習) - 3. ○
ignorespaceで先頭スペース行が履歴除外。パスワード入力時の定石 - 4. ○
LC_ALLが最優先、次に個別LC_*、最後にLANG - 5. ○
timedatectl set-ntp trueで systemd-timesyncd または chrony が有効化される(AlmaLinux 9 は chrony)
次回予告
第2回は「Bashスクリプト入門:if / for / 関数で書く現場の自動化スクリプト」です。今回扱った環境変数・関数・bashrc の知識を土台に、シェルスクリプトを書く側に回ります。#!/bin/bash の意味、変数のクォーティング、条件分岐とループ、終了ステータスの扱いを実機で習得します。
LinuC 102 試験対策シリーズ 全12回
- 第1回 シェル環境のカスタマイズ:環境変数・エイリアス・履歴・ロケール(本記事)
- 第2回 Bashスクリプト入門:if/for/関数で書く現場の自動化スクリプト
- 第3回 ネットワーク基礎:TCP/IP・ip コマンド・NetworkManager
- 第4回 ネットワークトラブルシューティングとDNSクライアント設定
- 第5回 ユーザ・グループ管理と sudo 設定の実務(useradd, visudo)
- 第6回 ジョブスケジューリングと時刻管理:cron, systemd timer, chrony, NTP
- 第7回 ログ管理実践:journalctl と rsyslog の使い分け
- 第8回 メール配送エージェント(MTA)の基本:postfix の動作確認
- 第9回 ファイアウォール(firewalld / ufw)と SELinux 入門
- 第10回 暗号化によるデータ保護:SSH鍵認証・GnuPG・OpenSSL
- 第11回 クラウドセキュリティの基礎:IAM・公開鍵管理・SSH踏み台構成
- 第12回 オープンソースの文化:主要ライセンス(GPL/MIT/Apache)とコミュニティ
