質問: linux/unix の初学者です。よろしくお願いします。 シェルに関する参考書を読んでいるとユーザーにはログインシェルが割り当てられると書かれています。このため /etc/profile, それから~/.bash_profileのスクリプトがログインシェルの実行時に有効になるのですよね。(.bashrc との違いはよくわかってません。。) ところで、そこまで読んでいてあることを思い出しました。 確か、apacheなどのサーバーデーモンはログインされては困るということで、/sbin/nologin を使っているとあちこちのウェブページに書かれていました。 実際、/etc/passwd を読んでみると ``` daemon:x:2:2:daemon:/sbin:/sbin/nologin ``` と書かれているので、確かに nologin というシェルを指定しているのがわかりました。 ここで疑問があります。 nologin をログインシェルに指定した場合、ユーザーはログインできないのだとすると、ログインできないままデーモンなどのプログラムは環境変数をどのように取得しているのでしょうか。 いまいちここのところを教えてくれるページを見つけられなかったので教えてもらえると嬉しいです。
回答: 環境変数というものの理解にそもそも誤解があるように思います。 環境変数を実現しているのはOSであってシェルではありません。 OSがプロセスを複製するとき、一緒にコピーされる変数を環境変数と呼びます。 なので、どんなプロセスにも環境変数はあります。 シェルで環境変数を操作する手段が豊富に用意されているのは、シェルが起動するプロセス(=コマンド)に対して変数を引き渡す必要があるからです。