110
112

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Linuxで環境変数が保存される仕組み(bash_profile)

Last updated at Posted at 2016-11-21

環境変数である$PATHはインストールする時などのエラーの原因になりやすいです。
そのため、$PATHの設定を理解するための記事です。

環境変数はログイン時に毎回、値を代入されています。
まずは、$PATHを初期化しているファイルを特定しましょう。

ログインした時に実行されるファイル(実行順)

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はディレクトリです。
profile.dの中に入っている.shファイルが全て実行されます。
全ユーザにPATHを追加するときはprofile.dの中のshファイルを追加すると良いでしょう。
特定のユーザにPATHを追加するときは/.bash_profileに追加すると良いでしょう。

ログアウトした時に実行されるファイル

1, ~/.bash_logout

「/etc/profileファイル」の説明

この部分ではrootユーザとそれ以外のユーザで分岐されている。(上がrootユーザ)
pathmunge関数で、$PATHに引数の値を追加している。

if [ "$EUID" = "0" ]; then
    pathmunge /sbin
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
else
    pathmunge /usr/local/sbin after
    pathmunge /usr/sbin after
    pathmunge /sbin after
fi

この部分では/etc/profile.d/の中の拡張子が.shのものを全て実行していく

for i in /etc/profile.d/*.sh ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null 2>&1
        fi
    fi
done

この部分ではpathmunge関数の定義をしている
第2引数にafterが付いていれば$PATHの後に追加する。(同じ名前のコマンドだと先頭のパスが優先される)

pathmunge () {
    case ":${PATH}:" in
        *:"$1":*)
            ;;
        *)
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
    esac
}

PATHの確認

echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/username/bin

コマンドのPATHの確認

which python
/usr/bin/python

コマンドのPATHがバージョンの違うコマンドだったりとかが、たまにあります。
ホームディレクトリに最初インストールしていて、その後/usr/local/srcなどにインストールしたらPATHがホームディレクトリのままであったりとか。

フォルダの説明

/bin システムで使う基本的なコマンドを格納
/sbin システムで使う管理者用の基本的なコマンドを格納
/usr/bin アプリケーションで使う基本的なコマンドを格納
/usr/sbin アプリケーションで使う管理者用のアプリ汎用コマンドを格納
/usr/local/bin 追加したアプリケーションで使うコマンドを格納
/usr/local/sbin 追加した管理者用のコマンドを格納

/home/USER/bin ユーザが追加したコマンドを格納
/etc/profile/profile.d 全ユーザでも使えるアプリケーションのコマンドのPATH追加するシェルファイルを格納

110
112
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
110
112

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?