- PR -

CentOS でデフォルトで設定される環境変数について

投稿者投稿内容
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2006-04-24 02:48
引用:

/* The value for PATH when invoking `command -p'. This is only used when
the Posix.2 confstr () function, or CS_PATH define are not present. */
#ifndef STANDARD_UTILS_PATH
#define STANDARD_UTILS_PATH \
"/bin:/usr/bin:/sbin:/usr/sbin:/etc:/usr/etc"
#endif



いろいろとありがとうございます。ただ、私は上記の設定がどこで使われているかについて知りたいと言っているだけです。

init が内部的にどういう PATH を設定しているかについて私は問題にしていません。それについては、init からプログラムを起動し PATH の値を出力させたり、カーネルのソースコードを見れば分かることだと思っています。

とは言えど、私はカーネルの仕様についてはあまり知りませんが (まだソースコードまでは読んでません)、init でデフォルトパスを設定しているかどうかについては微妙なところだと思います。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2006-04-24 08:36
ということは、当初の
引用:

2. PATH 環境変数のデフォルト値は、/etc/rc.local/rc.sysinit スクリプトから参照されている、/etc/rc.d/init.d/functions で設定されていて、その内容は rc.sysinit スクリプトの最後まで引き継がれているようですが、runlevel 3 で起動し、一般ユーザでログインすると、sbin を含むパスが全て削除されてしまっています。この処理はどのファイル内で行われているのでしょうか?


にはもう興味が無い、ということでしょうか。

引用:

とは言えど、私はカーネルの仕様についてはあまり知りませんが (まだソースコードまでは読んでません)、


カーネルは関係ありません。
「execve(2)のマニュアルの記述を疑う」というのであれば話は別ですが。
# それ以前に3章のexec系関数群のほうの、フロントエンドとしての動作のほうが...

引用:

init でデフォルトパスを設定しているかどうかについては微妙なところだと思います。


何か調べていますか?
私はさきに書いたとおり、
引用:

PATH環境変数へのポインタを取得して値をファイルに書き出すプログラムをCで書いて
inittabにそのプログラムを登録しておけばinitが設定している値が分かります。
# initが子プロセスの環境変数を変えてからexecする、なんてこと(initのような
# 立場のプロセスでは、ちょっとあり得そうにないことです)をしていない限り。
実際にやってみれば分かりますが、もちろん値が設定されています。


ということは済ませています。
各プロセスが自身で再設定するか、exec系関数群の中から敢えてexecle(3)を
選んで設定しない限り(もしくは直接execve(2)を発行しない限り)、その値が
すべてのユーザプロセスに踏襲されます。

[ メッセージ編集済み 編集者: ぽんす 編集日時 2006-04-24 08:42 ]
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2006-04-24 20:11
/sbin/init では、パスがハードコーディングされていました。

/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin (CentOS 4.3 の場合)

ただ、/bin/login にも、/usr/local/bin:/bin:/usr/bin という記述があるので、bash 起動時に DEFAULT_PATH_VALUE が使われたかどうかについては不明です (どちらが使われているかについては、もうちょっと調べてみる価値がありそうです)。ただ、どちらかで、/sbin/init で設定された内容が上書きされたのでしょう。ちなみに、mingetty では PATH について何もしていないように見えます。
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2006-04-24 20:25
引用:

ただ、/bin/login にも、/usr/local/bin:/bin:/usr/bin という記述があるので、bash 起動時に DEFAULT_PATH_VALUE が使われたかどうかについては不明です (どちらが使われているかについては、もうちょっと調べてみる価値がありそうです)。



bash をソースコードからコンパイルして、DEFAULT_PATH_VALUE の値を変えても何も変化が見られなかったことから、/bin/login で設定されたパスがデフォルトになっているようです。いろいろご指摘いただきありがとうございました。

[ メッセージ編集済み 編集者: あんとれ 編集日時 2006-04-24 20:26 ]

スキルアップ/キャリアアップ(JOB@IT)