変更要約: 初版(主題1.06・副主題1.06.1〜1.06.2に対応)
1.1シェル環境のカスタマイズ
ログイン時・シェル起動時に読み込まれる設定ファイルの体系を学びます。全体設定(/etc/profile・/etc/bash.bashrc)とユーザー設定(~/.bash_profile・~/.bash_login・~/.profile・~/.bashrc・~/.bash_logout)の読み込み順、alias によるコマンド置換、PATH の設定、./source とリスト(;・&&・||)を押さえます。
「.bashrc に書いたのに反映されない」「ログインしたときだけ実行したい」— こうした疑問の答えはすべて、bash がどの設定ファイルを・いつ・どの順で読むかにあります。102試験の頻出テーマであり、全ユーザーの環境を管理する実務の基礎でもあります。
1.1.1設定ファイルの体系と読み込み順
- ログインシェル(ssh ログイン等)=まず全体設定 /etc/profile → 次にユーザー設定を ~/.bash_profile → ~/.bash_login → ~/.profile の順に探し、最初に見つかった1つだけを読む。ログアウト時は ~/.bash_logout。
- 非ログインシェル(端末エミュレータの新規タブ等)=/etc/bash.bashrc(ディストリにより /etc/bashrc)→ ~/.bashrc を読む。慣例として .bash_profile から .bashrc を読み込ませ、両者の設定を共通化する。
- 編集後の反映=
.(ドット)または source(source ~/.bashrc)。再ログインせず現在のシェルに適用できる。 - 環境変数(PATH など)はログイン時に1回設定すればよいので profile 系へ、alias や関数はシェルごとに必要なので .bashrc へ、が配置の定石。
PATH=$PATH:/opt/app/binで既存 PATH に追記する。
1.1.2alias とリスト演算子
- alias=コマンドの別名(
alias ll='ls -l')。引数なしのaliasで一覧・unaliasで解除。既存コマンドと同名の alias は本体より優先される(alias rm='rm -i'が定番)。 - リスト=コマンドの連結演算子:
A ; B(順に実行・A の成否に関係なく B)/A && B(A が成功したときだけ B)/A || B(A が失敗したときだけ B)。
「ssh ログインで読まれるのは profile 系・新規タブは .bashrc」「~/.bash_profile → ~/.bash_login → ~/.profile は最初の1つだけ」「編集の即時反映=source(.)」「&&=成功時のみ・||=失敗時のみ」 が定番です。「.bashrc に PATH を書いたのに ssh ログインで効かない」型のトラブル問題は読み込み体系の理解を試しています。
典型トラブルを2つ解いてみます。
①「ssh ログインすると alias が効かない」→ ssh ログインはログインシェルなので profile 系しか読みません。alias は ~/.bashrc にあるはず= ~/.bash_profile に [ -f ~/.bashrc ] && . ~/.bashrc を書いて橋渡しするのが定石です(多くのディストリビューションは初期状態でこの橋渡しを入れています)。
②「全ユーザーにプロキシ環境変数を配りたい」→ 個々の ~/.bash_profile ではなく全体設定 /etc/profile(またはその追加置き場 /etc/profile.d/*.sh)に書けば一元管理できます。リスト演算子は次節のスクリプトでも主役で、mkdir /backup && cp data /backup(作成できたときだけコピー)、systemctl is-active nginx || systemctl start nginx(動いていなければ起動)のように条件付きワンライナーを構成します。; は成否を見ないため、失敗を無視してよい後片付けなどに限定するのが安全です。
| タイミング | 読まれるファイル | 置くべき設定 |
|---|---|---|
| ログインシェル | /etc/profile → bash_profile 系の最初の1つ | 環境変数(PATH 等) |
| 非ログインシェル | /etc/bash.bashrc → ~/.bashrc | alias・シェル関数 |
| ログアウト時 | ~/.bash_logout | 後片付け処理 |
| 編集の即時反映 | source(.) | 再ログイン不要 |
ひっかけ: 「~/.bash_profile と ~/.profile は両方とも読み込まれる」は誤りです。bash は profile 系3ファイルのうち最初に見つかった1つだけを読みます。また「A ; B は A が成功したときだけ B を実行する」も誤り=; は成否を見ずに順次実行し、成功時のみは && です。
1.1.3この節のまとめ
- ログイン=/etc/profile+profile系の最初の1つ/非ログイン=bash.bashrc+.bashrc。反映は source(.)
- 環境変数は profile 系・alias/関数は .bashrc。連結は ;(無条件)/&&(成功時)/||(失敗時)
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. ~/.bashrc に alias を定義したが、ssh でログインした直後のシェルでは効いていない。原因として正しいのはどれ?
Q2. バックアップ用ディレクトリの作成に成功したときだけ、続けてコピーを実行したい。適切な書き方は?
Q3. ~/.bashrc を編集した内容を、ログインし直さずに現在のシェルへ反映したい。適切なコマンドは?

