Instiq
第1章 · シェルおよびスクリプト·v1.0.0·更新 2026/7/6·読了目安 約12分

変更要約: 初版(主題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 を読み込ませ、両者の設定を共通化する。
  • 編集後の反映=.(ドット)または sourcesource ~/.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 && BA が成功したときだけ B)/A || BA が失敗したときだけ 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 → ~/.bashrcalias・シェル関数
ログアウト時~/.bash_logout後片付け処理
編集の即時反映source(.)再ログイン不要
注意

ひっかけ: 「~/.bash_profile と ~/.profile は両方とも読み込まれる」は誤りです。bash は profile 系3ファイルのうち最初に見つかった1つだけを読みます。また「A ; B は A が成功したときだけ B を実行する」も誤り=;成否を見ずに順次実行し、成功時のみは && です。

ログイン/非ログインシェルの設定ファイル読み込み順と source・リスト演算子の図。
profile 系は最初の1つだけ

1.1.3この節のまとめ

  • ログイン=/etc/profile+profile系の最初の1つ/非ログイン=bash.bashrc+.bashrc。反映は source(.)
  • 環境変数は profile 系・alias/関数は .bashrc。連結は ;(無条件)/&&(成功時)/||(失敗時)

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. ~/.bashrc に alias を定義したが、ssh でログインした直後のシェルでは効いていない。原因として正しいのはどれ?

Q2. バックアップ用ディレクトリの作成に成功したときだけ、続けてコピーを実行したい。適切な書き方は?

Q3. ~/.bashrc を編集した内容を、ログインし直さずに現在のシェルへ反映したい。適切なコマンドは?

理解度を確認第1章「シェルおよびスクリプト」の問題を解く