Q&A - jak wylistować zmienne środowiskowe działającej aplikacji?

W systemie GNU/Linux wiele aplikacji pobiera parametry konfiguracyjne bezpośrednio ze zmiennych środowiskowych, jeśli chcesz ustawić jakąś zmienną, by program ją widział, musisz to zrobić przed jego wystartowaniem, najlepiej tworząc skrypt startowy, ale co w przypadku kiedy program już działa, a my nie jesteśmy pewni z jakimi zmiennymi się uruchomił?

Do wylistowania aktualnie ustawionych zmiennych dla naszego użytkownika/procesu, służy polecenie env, lub export, natomiast jeśli chcemy sprawdzić, jakie zmienne ma ustawiony konkretny proces w systemie, mamy na to dwa sposoby, pierwszy to skorzystanie z przełącznika -e w poleceniu ps (ps -xwwe):

wynik będzie następujący:

# ps xwwe
1165 ?        Ss     0:00 /usr/sbin/apache2 -k start APACHE_PID_FILE=/var/run/apache2.pid APACHE_RUN_USER=www-data PATH=/usr/local/bin:/usr/bin:/bin PWD=/ APACHE_RUN_GROUP=www-data LANG=C SHLVL=1 _=/usr/sbin/apache2

proces apache2 ma ustawione m.in. zmienne APACHE_PID_FILE, APACHE_RUN_USER, APACHE_RUN_GROUP, LANG, drugi sposób to odczytanie ich bezpośrednio z /proc'a. Mając PID procesu (1165), wykonujemy polecenie $ cat /proc/$PID/environ:

# cat /proc/1165/environ
APACHE_PID_FILE=/var/run/apache2.pidAPACHE_RUN_USER=www-dataPATH=/usr/local/bin:/usr/bin:/binPWD=/APACHE_RUN_GROUP=www-dataLANG=CSHLVL=1_=/usr/sbin/apache2r

Tak naprawdę ps "jest nakładką na /proc" i pobiera dane dokładnie z niego, przy okazji przygotowując wynik w czytelnej postaci, dla wygody powinniśmy korzystać po prostu z ps -e, a o /proc jedynie pamiętać ;-)