Linuxのログイン時の環境変数の読込順

順番

  1. /etc/profile
  2. /etc/profile/profile.d配下
  3. ~/.bash_profile 
  4. ~/.bash_login
  5. ~/.profile
  6. ~/.bashrc
  7. /etc/bashrc

補記事項

  • /etc/profile/profile.dはディレクトリで、その配下にあるスクリプト内で定義
    • RHEL/CentOSは何も置いてないイメージ
    • ubuntuは結構もっさりあるイメージ
  • .bash_profile, .bash_login, .profileはもしかしたらどれか読み込んだら、他を読み飛ばすかも(きちんと実験していないので分からない)

その他配慮ポイント

  • サービスやcronで実行される場合は上記ファイルを参照しない
  • /etc/environmentで定義されている場合、それが読み込まれる(※1)
  • crontabのPATHは/etc/crontab内に定義されている場合がある(※2)
  • /etc/sudoersのsecure_pathはsudo実行時のみ上書きされる(cron実行時には評価されない)
  • suコマンドに-オプション付けてログインしている時としていない場合でも変わる
  • systemdのユニットファイルに定義されている場合がある
  • /etc/locate.conf で定義されている場合がある
  • それ以外にもスクリプトのどこかで上書きされている場合がある
  • 追記されている場合もあれば、上書きされている場合もある
  • 手動実行時とサービス等での実行時では変わる要素ありすぎるため、必ずテストすること
  • 必ず、必ずテストすること(2度目)
  • かくいう私も7年程前にやらかしてる…
  • まだ抜かしている前提あるかもといつも不安になる

※1 参照される主なシーン
・システムサービス
・実行中のデーモン

※2 /etc/crontabに定義されている例(※3)

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
(以下略)

※3 CentOSでは定義されていること多いが、ubuntuでは定義されていない様な気がする