プロセスの環境変数を確認する方法が複数あるのでまとめる。

strings

確認したいプロセスのプロセスIDがわかっているときは、バイナリファイルやデータファイルでも表示可能な文字列を表示できるstringsを使うのが一番簡潔。
環境変数は/proc/[PID]/environに記載されているが、各環境変数はnull文字(\0)で区切られているため、単純にcatするだけでは一行で出力されてしまい見づらい。

$ sudo cat /proc/4186/environ
TERM=xtermTMPDIR=/dev/shmPATH=/sbin:/usr/sbin:/bin:/usr/binPWD=/LANG=CSHLVL=2_=/usr/sbin/httpd

stringsを使うとnull文字で区切って表示してくれる。

$ sudo strings /proc/4186/environ
TERM=xterm
TMPDIR=/dev/shm
PATH=/sbin:/usr/sbin:/bin:/usr/bin
PWD=/
LANG=C
SHLVL=2
_=/usr/sbin/httpd

ps eオプション

確認したいプロセスのプロセスIDがまだわかっていないとき、プロセスIDを調べるためにpsコマンドを打つとすると、合わせてeオプションを指定すると環境変数が表示される。ただし、/proc/[pid]/environが自ユーザで起動しているプロセスのものでなければ、rootユーザでないと開けないのと同様に、rootでpsを行うか、sudoしないとeオプションをつけても環境変数が表示されない。
よく使うオプションの組み合わせとしてps auxがあるが、これに加えてps auxeが見やすい。
以下の例はヘッダと先ほどから使っているプロセスID4186のみを表示するため、パイプ以降が複雑になっているが、パイプ以前のコマンドのみでも起動プロセス数が少なければ十分見やすい。

$ sudo ps auxe | { head -1;grep '418[6]'; }
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      4186  0.0  0.3 416252 28452 ?        Ss   Jun05   0:02 /usr/sbin/httpd TERM=xterm TMPDIR=/dev/shm PATH=/sbin:/usr/sbin:/bin:/usr/bin PWD=/ LANG=C SHLVL=2 _=/usr/sbin/httpd
$

スペース区切りでコマンドの後ろに環境変数が表示されるため、閲覧はしやすいが、結果の再利用はしづらい。

sed

確認したいプロセスIDがわかっているとき、stringsが一番簡潔に書けるのは一番初めに示したが、sedでnull文字を置換してあげても同様の結果が得られる。sedでnull文字は\x0と書く。

$ sudo cat /proc/4186/environ | sed 's/\x0/\n/g'
TERM=xterm
TMPDIR=/dev/shm
PATH=/sbin:/usr/sbin:/bin:/usr/bin
PWD=/
LANG=C
SHLVL=2
_=/usr/sbin/httpd

# 当然、cat + sedでなく、sed単体でも問題ない。

# sudo sed 's/\x0/\n/g' /proc/4186/environ

tr

sedと同じ考えでtrで実施する。trでnull文字は\0と書く。

$ sudo cat /proc/4186/environ | tr '\0' '\n'
TERM=xterm
TMPDIR=/dev/shm
PATH=/sbin:/usr/sbin:/bin:/usr/bin
PWD=/
LANG=C
SHLVL=2
_=/usr/sbin/httpd

od

odを紹介しているサイトがあったが、オプションが長すぎることと毎日使うようなコマンドではないことから、あまりお勧めできない。

sudo od -S1 -An /proc/4186/environ