|
1.
Zmienne środowiskowe
Czym są zmienne środowiskowe?
Zmienne środowiskowe to nazwa obiektów zawierających informacje, które używane
są przez jeden lub wiele programów w systemie operacyjnym. Wielu użytkowników
(zwłaszcza mających styczność z Linuksem od niedawna) traktuje je jako coś nie
do ogarnięcia. Nic bardziej mylnego! Dzięki zmiennym środowiskowym zmiana
konfiguracji jednego lub kilku programów jest banalnie prosta.
Przykłady ważniejszych zmiennych środowiskowych
Poniższa tabela przedstawia listę ważniejszych zmiennych używanych przez system
Linux, wraz z krótkim opisem. Przykładowe ich wartości znajdują się pod tabelą.
| Zmienna |
Opis |
| PATH |
Ta zmienna zawiera oddzieloną dwukropkami listę katalogów, w których system
operacyjny szuka plików z prawami do uruchomienia. Jeśli w konsoli wpiszesz
nazwę programu mającego prawa do uruchamiania (np. ls,
rc-update lub emerge) lecz program ten nie znajduje się w
jednym z katalogów zdefiniowanych w zmiennej PATH, system nie wykona
tego programu (chyba, że wpiszesz pełną ścieżkę do miejsca gdzie znajduje się
ten program, np. /bin/ls).
|
| ROOTPATH |
Ta zmienna spełnia prawie taką samą funkcję jak PATH, z tą tylko
różnicą, że zawiera informacje o katalogach które są sprawdzane w
poszukiwaniu programów dla superużytkownika (czyli root'a).
|
| LDPATH |
Zmienna zawiera podzieloną dwukropkami listę katalogów, które konsolidator
przeszukuje w celu odnalezienia bibliotek.
|
| MANPATH |
Zmienna, podobnie jak inne zawiera listę katalogów oddzielonych dwukropkiem,
w których man szukał będzie dokumentów w odpowiednim dla siebie
formacie.
|
| INFODIR |
Zmienna ta, to lista katalogów oddzielona znakiem dwukropka, które
przeszukiwane są przez program info w celu odnalezienia dokumentacji w
odpowiednim dla niego formacie.
|
| PAGER |
Zmienna zawiera ścieżkę do programu, który służy do prezentacji zawartości
plików (przykładowo less lub more)
|
| EDITOR |
Zmienna zawiera ścieżkę do programu używanego do edycji plików (przykładowo
nano lub vi) |
| KDEDIRS |
Zmienna zawiera listę oddzielonych znakiem dwukropka katalogów, w których
mieszczą się materiały związane z środowiskiem graficznym KDE.
|
| CONFIG_PROTECT |
Zmienna ta zawiera listę oddzielonych znakiem spacji katalogów, które
mają być zabezpieczone przez Portage w trakcie dokonywania uaktualnień
oprogramowania.
|
| CONFIG_PROTECT_MASK |
Zmienna zawiera listę oddzielonych znakiem spacji katalogów, które nie
mają być zabezpieczane przez Portage podczas dokonywania uaktualnienia
oprogramowania.
|
Poniżej znajdują się przykładowe wartości omówionych zmiennych środowiskowych:
Listing 1.1: Przykładowe wartości zmiennych |
PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin"
ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
MANPATH="/usr/share/man:/usr/local/share/man"
INFODIR="/usr/share/info:/usr/local/share/info"
PAGER="/usr/bin/less"
EDITOR="/usr/bin/vim"
KDEDIRS="/usr"
CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb /opt/tomcat/conf \
/usr/kde/3.1/share/config /usr/share/texmf/tex/generic/config/ \
/usr/share/texmf/tex/platex/config/ /usr/share/config"
CONFIG_PROTECT_MASK="/etc/gconf"
|
1.
Definiowanie zmiennych globalnych
Katalog /etc/env.d
Aby skupić w jednym miejscu definicje zmiennych, w Gentoo wprowadzono katalog
/etc/env.d. W katalogu tym odnaleźć można pliki takie jak
00basic, 05gcc i inne. Zawierają one zmienne
potrzebne do działania programów, których nazwy najczęściej są takie jak nazwy
plików znajdujących się w katalogu /etc/env.d.
Na przykład po zainstalowaniu gcc, w katalogu /etc/env.d
tworzony jest plik o nazwie 05gcc, który zawiera definicje
następujących zmiennych:
Listing 1.1: /etc/env.d/05gcc |
PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man"
INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info"
CC="gcc"
CXX="g++"
LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
|
W innych dystrybucjach trzeba by zmienić lub dodać definicje powyższych
zmiennych systemowych do pliku /etc/profile lub w innym miejscu. W
Gentoo jest to znacznie prostsze i nie wymaga w zasadzie ingerencji
użytkownika.
W przypadku, kiedy gcc jest uaktualniane, uaktualniany jest także plik
/etc/env.d/05gcc. Dzieje się to bez udziału użytkownika.
Rozwiązanie to przynosi korzyści nie tylko dla systemu Portage, ale także dla
użytkownika. Sporadycznie użytkownik może być zapytany o to, jaką wartość ma
mieć pewna zmienna środowiskowa. Może to mieć miejsce w przypadku zmiennej
http_proxy. Zamiast zamiast ingerować w plik /etc/profile,
można utworzyć plik (/etc/env.d/99local) i wpisać tam definicje
swoich zmiennych. Na przykład:
Listing 1.1: /etc/env.d/99local |
http_proxy="proxy.server.com:8080"
|
Dzięki takiemu sposobowi definiowania zmiennych środowiskowych masz szybki wgląd
na w te zmienne, które zdefiniowałeś samodzielnie.
Skrypt env-update
Kilka plików w katalogu /etc/env.d definiuje zmienną PATH.
Nie jest to błędem. Kiedy wykonane zostanie env-update, to skrypt ten
doda do siebie wszystkie definicje tej samej zmiennej, uaktualniając na koniec
zmienne środowiskowe w systemie. Daje to możliwość dodawania własnych zmiennych
środowiskowych bez obawy przed tym, że zmodyfikowana zostanie już istniejąca
zmienna (pozbawiając ją dotychczasowej wartości).
Skrypt env-update dodaje wartości zmiennych w kolejności alfabetycznej.
Tłumaczy to fakt dlaczego nazwy plików w katalogu /etc/env.d
zaczynają się od dwóch cyfr.
Listing 1.1: Kolejność w jakiej env-update uaktualnia zmienne |
00basic 99kde-env 99local
+-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"
|
Tylko wartości niektórych zmiennych są ze sobą łączone, należą do nich:
KDEDIRS, PATH, LDPATH, MANPATH, INFODIR,
INFOPATH, ROOTPATH, CONFIG_PROTECT,
CONFIG_PROTECT_MASK, PRELINK_PATH i PRELINK_PATH_MASK. Dla
wszystkich pozostałych zmiennych ważna jest ostatnia zdefiniowana wartość
(pliki w kolejności alfabetycznej w katalogu /etc/env.d).
Uruchomienie skryptu env-update powoduje utworzenie zmiennych
systemowych i umieszczenie ich w pliku /etc/profile.env (z którego
korzysta /etc/profile). Skrypt ten pobiera także informacje z
(opisanej wcześniej) zmiennej LDPATH i używa ich do utworzenia pliku
/etc/ld.so.conf. Po wykonaniu tej czynności uruchamia polecenie
ldconfig w celu odbudowania wspomnianego pliku
/etc/ld.so.cache, który jest używany przez konsolidator.
Jeśli chcemy zaobserwować efekt, jaki przynosi wykonanie polecenia
env-update, należy uruchomić następujące polecenia w celu uaktualnienia
zmiennych środowiskowych. Użytkownicy mający już pierwszą instalację Gentoo za
sobą pewnie pamiętają polecenie:
Listing 1.1: Uaktualnianie zmiennych środowiskowych |
# env-update && source /etc/profile
|
Uwaga:
Powyższe polecenie uaktualnia zmienne tylko na terminalu, na którym zostało
uruchomione i jego terminalach potomnych. W związku z tym jeśli pracuje się w
X11 należy albo wpisywać source /etc/profile w każdym terminalu, który
się otwiera albo zrestartować serwer X tak żeby wszystkie nowe terminale
posiadały nowe zmienne. Użytkownicy menedżerów logowania powinni przełączyć się
na konto roota i wpisać /etc/init.d/xdm restart. Jeśli się tego nie zrobi
to konieczne będzie przelogowanie się w X by uruchamiać terminale potomne z
nowymi zmiennymi.
|
Ważne:
Przy definiowaniu zmiennych nie możemy używać innych zmiennych obecnych w
powłoce. Oznacza to, że zapis FOO="$BAR" (gdzie $BAR jest inną
zmienną) jest zabroniony.
|
1.
Definiowanie zmiennych lokalnych
Zmienne użytkownika
Nie zawsze użytkownik chce aby zdefiniowane przez niego zmienne miały charakter
globalny (były dostępne dla innych użytkowników w systemie). Na przykład może
zechcieć dodać katalog /home/moj_uzytkownik/bin i katalog, w
którym obecnie się znajduje do zmiennej PATH, lecz nie chce aby była ona
dostępna dla pozostałych. Aby zdefiniować taką zmienną środowiskową lokalną,
do pliku ~/.bashrc lub ~/.bash_profile należy dodać
następującą linię:
Listing 1.1: Definicja lokalnej zmiennej PATH w pliku ~/.bashrc |
PATH="${PATH}:/home/my_user/bin:"
|
Po wylogowaniu się i ponownym zalogowaniu, wartość zmiennej PATH będzie
uaktualniona.
Zmienne bieżącej sesji
W niektórych przypadkach przydatna jest możliwość definiowania zmiennych,
które używane są tylko w trakcie trwania bieżącej sesji. Na przykład może
pojawić się potrzeba używania programów z katalogu tymczasowego, który nie
jest ujęty standardowo w zmiennej PATH.
W tym przypadku można po prostu zdefiniować wartość tej zmiennej za pomocą
polecenia export. Tak zdefiniowana zmienna będzie miała swoją wartość do
momentu wylogowania się.
Listing 1.1: Definiowanie zmiennych środowiskowych dla bieżącej sesji |
# export PATH="${PATH}:/home/my_user/tmp/usr/bin"
|
|