/etc/profile.d/*.sh:/etc/profile から呼び出される個別スクリプト群

/etc/profile.d

/etc/profile.d/*.shについての概要と詳細

/etc/profile.d/*.shとは

/etc/profile.d/ は、ログインシェルの環境設定をスクリプト単位で管理するためのディレクトリです。
このディレクトリ内にある *.sh ファイルは、/etc/profile から読み込まれ、ログイン時に実行されるようになっています。

たとえば、/etc/profile の中には以下のようなスクリプトが含まれているのが一般的です

# /etc/profile の中の例
for script in /etc/profile.d/*.sh; do
  if [ -r "$script" ]; then
    . "$script"
  fi
done

主な役割と利点

  • 環境変数の初期化(例:JAVA_HOMEPATHLANG など)
  • 個別パッケージやサービスの初期化処理
  • 共通エイリアスや関数の設定
  • 設定をファイル単位で分割できるため、管理・保守がしやすい

利用例

たとえば、JavaやPythonなどのパッケージが自動で環境変数を追加する際、次のようなファイルが配置されます。

# /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH

# /etc/profile.d/locale.sh
export LANG=ja_JP.UTF-8

対象となるシェル

  • 基本的に ログインシェル でのみ実行されます。
  • bashshksh など、POSIX互換のシェルで広く使用されます。

拡張子の使い分け

  • *.sh:POSIX準拠のシェル(bashやsh)向け
  • *.csh:Cシェル(csh、tcsh)向けに記述

ディストリビューションによっては、シェルに応じて読み分けられるように構成されています。

注意点

  • 各ファイルは実行権限がなくても構いませんが、読み取り可能である必要があります(-r)。
  • 無効な記述があると、ユーザー全体に影響を及ぼす可能性があるため慎重に記述する必要があります。
  • 変数定義に export を忘れると環境変数として伝播しません。

まとめ

/etc/profile.d/*.sh は、ログインシェル環境を柔軟かつモジュール的に構成するための重要な仕組みです。
システム全体の環境初期化を一元管理せず、スクリプト単位で分割して整理できるため、保守性と拡張性が高まります。システム管理者にとって、環境設定を適切に行う上で欠かせないディレクトリのひとつです。