web-dev-qa-db-ja.com

/ etc / environmentがPATH変数に読み込まれていません

Ubuntuでは、パス変数は/ etc/environmentに保存されます。これは私のものです(私はそれに変更を加えていません、これはシステムのデフォルトです):

$ cat /etc/environment 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

しかし、PATH変数を調べると:

$ echo $PATH
/home/dan/bin:/home/dan/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/X11

/ usr/gamesが欠落していることに気付くでしょう(数日前まで存在していました)。私の/ etc/profileはPATHについて言及していません。私の〜/ .profileはデフォルトであり、次のものしかありません。

if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

これはgnomeでのみ発生し、tty1-6では発生しません。これは、gnomeターミナルと、アプリケーションドロップダウンからアプリケーションを呼び出そうとしたときに両方に表示されません。何がこれを引き起こしているのか誰か知っていますか?

ありがとう。

4
Jarvin

シェルがbashの場合、少なくともマンページとstrace bashが言う限り、/ etc/environmentには注意を払いません。実際、/ etc/environmentに言及しているプログラムはリストされていません。

私はUbuntuで同様の状況に遭遇しました。そこでは、本当に必要なデータを指す4つ以上のレベルの間接参照があります。多くの場合、データムの最終的なソースよりも、近接したものを修正する方が簡単だと思います。

この場合、少なくとも V7 Unix なので、〜/ .profileで個人パスを変更することは、実際にはそれを行うための適切な方法です。

4
msw

この問題の根本原因に実際に答えた人は誰もいませんでした。 @mswには正しい解決策がありますが、何が起こっているのかを説明したいと思います。

Ubuntuでは、pam対応のアプリケーションを使用すると、/ etc/pam.d/*にリストされているモジュールのリストを実行します。ログイン中に使用されるこれらのモジュールの1つは、設定される環境変数を制御します。 /etc/pam.d/loginまたは/etc/pam.d/suは、ユーザーにログインしたときにトリガーしたモジュールである可能性があります。これらのファイルでは、/etc/login.defsを使用して、ここに示すように基本環境を決定します。

#
# *REQUIRED*  The default PATH settings, for superuser and normal users.
#
# (they are minimal, add the rest in the Shell startup files)
ENV_SUPATH      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH        PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

これが実際にpamでトリガーされる場所については十分に調べていませんでしたが、これは問題を解決するのに役立つはずです。 /etc/security/pam_env.confや他のいくつかの場所で上記を上書きする設定がある場合もあります。

http://www.tuxradar.com/content/how-pam-works pamがどのように機能し、どのプログラムがそれを使用しているかを特定する方法を本当に知りたい場合。

1
mschuett