Με το Gentoo μπορείτε εύκολα να διαχειρίζεστε τις μεταβλητές περιβάλλοντος του συστήματός σας. Το παρών κεφάλαιο εξηγεί πώς να το κάνετε αυτό, και επίσης περιγράφει συχνά χρησιμοποιούμενες μεταβλητές. 1.16 2007-05-18
Μεταβλητές Περιβάλλοντος Τι Είναι

Η μεταβλητή περιβάλλοντος είναι ένα ονοματιζόμενο αντικείμενο που περιέχει πληροφορίες που χρησιμοποιούνται από μία ή περισσότερες εφαρμογές. Πολλοί χρήστες (ειδικά αυτοί που είναι νέοι στο Linux) το βρίσκουν αυτό λίγο περίεργο ή κάτι που δεν διαχειρίζεται. Ωστόσο, αυτό είναι λάθος: χρησιμοποιώντας τις μεταβλητές περιβάλλοντος μπορεί κανείς να αλλάξει εύκολα τις ρυθμίσεις για μία ή περισσότερες εφαρμογές.

Σημαντικά Παραδείγματα

Ο παρακάτω πίνακας περιέχει ένα αριθμό μεταβλητών που χρησιμοποιούνται από το Linux και περιγράφει τη χρήση τους. Παραδείγματα τιμών παρέχονται μετά τον πίνακα.

PATHΗ μεταβλητή αυτή περιέχει μια λίστα με ονόματα καταλόγων χωρισμένα με άνω κάτω τελεία στους οποίους το σύστημα ψάχνει για εκτελέσιμα αρχεία. Αν εισάγετε το όνομα ενός εκτελέσιμου (όπως το ls, rc-update ή emerge) αλλά αυτό δεν υπάρχει σε ένα από τους καταλόγους στη λίστα, το σύστημα δε θα το εκτελέσει (εκτός αν εισάγετε την πλήρη διαδρομή της εντολής, όπως /bin/ls).ROOTPATHΗ μεταβλητή αυτή έχει την ίδια λειτουργία με την PATH, αλλά αυτή περιέχει τη λίστα των καταλόγων που ελέγχονται όταν ο χρήστης root εισάγει μια εντολή.LDPATHΗ μεταβλητή περιέχει μια λίστα με ονόματα καταλόγων χωρισμένα με άνω κάτω τελεία στους οποίους ψάχνει για τις βιβλιοθήκες ο δυναμικός συνδέτης.MANPATHΗ μεταβλητή περιέχει μια λίστα με ονόματα καταλόγων χωρισμένα με άνω κάτω τελεία στους οποίους η εντολή man ψάχνει για τις σελίδες man.INFODIRΗ μεταβλητή περιέχει μια λίστα με ονόματα καταλόγων χωρισμένα με άνω κάτω τελεία στους οποίους η εντολή info ψάχνει για τις σελίδες info.PAGERΗ μεταβλητή περιέχει την πλήρη διαδρομή για το πρόγραμμα που χρησιμοποιείται για την εμφάνιση των περιεχόμενων των αρχείων (όπως το less ή το more).EDITORΗ μεταβλητή περιέχει την πλήρη διαδρομή για το πρόγραμμα που χρησιμοποιείται για την αλλαγή των περιεχόμενων των αρχείων (όπως το nano ή το vi).KDEDIRSΗ μεταβλητή περιέχει μια λίστα με ονόματα καταλόγων χωρισμένα με άνω κάτω τελεία που περιέχουν υλικό σχετιζόμενο με το KDE.CONFIG_PROTECTΗ μεταβλητή περιέχει μια λίστα με ονόματα καταλόγων χωρισμένα με το κενό που προστατεύονται από το Portage κατά τη διάρκεια αναβαθμίσεων.CONFIG_PROTECT_MASKΗ μεταβλητή περιέχει μια λίστα με ονόματα καταλόγων χωρισμένα με το κενό που δεν προστατεύονται από το Portage κατά τη διάρκεια αναβαθμίσεων.
Μεταβλητή Περιγραφή

Παρακάτω θα βρείτε ένα παράδειγμα ορισμών για όλες αυτές τις μεταβλητές:

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"
Καθολικός Ορισμός Μεταβλητών Ο Κατάλογος /etc/env.d

Προκειμένου να είναι σε ένα κεντρικό σημείο οι ορισμοί όλων αυτών των μεταβλητών, το Gentoo εισήγαγε τον κατάλογο /etc/env.d. Μέσα στον κατάλογο θα βρείτε ένα αριθμό από αρχεία, όπως το 00basic, 05gcc, κτλ. που περιέχουν τις μεταβλητές που απαιτούνται από την εφαρμογή στην οποία αναφέρεται το όνομά τους.

Για παράδειγμα, όταν εγκαταστήσατε το gcc, δημιουργήθηκε ένα αρχείο με όνομα 05gcc από το ebuild, που περιέχει τους ορισμούς για τις παρακάτω μεταβλητές:

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"

Άλλες διανομές σας πληροφορούν να αλλάξετε ή προσθέσετε τέτοιες μεταβλητές περιβάλλοντος στο αρχείο /etc/profile ή σε άλλες τοποθεσίες. Το Gentoo από την άλλη πλευρά το κάνει εύκολο για εσάς (και για το Portage) να συντηρείτε και να διαχειρίζεστε τις μεταβλητές περιβάλλοντος χωρίς να χρειάζεται να δίνετε προσοχή σε πολυάριθμα αρχεία που μπορεί να περιέχουν μεταβλητές περιβάλλοντος.

Για παράδειγμα, όταν το gcc αναβαθμιστεί, το αρχείο /etc/env.d/05gcc επίσης θα αναβαθμιστεί χωρίς παρέμβαση του χρήστη.

Από αυτό δεν κερδίζει μόνο το Portage, αλλά και εσείς, ως χρήστης. Περιστασιακά, μπορεί να σας ζητηθεί να θέσετε μια μεταβλητή περιβάλλοντος σε επίπεδο συστήματος. Για παράδειγμα, θα δούμε τη μεταβλητή http_proxy. Αντί να πειράζετε το αρχείο /etc/profile, μπορείτε απλά να δημιουργήσετε ένα αρχείο (/etc/env.d/99local) και να εισάγετε τον(ους) ορισμό(ούς) εκεί:

http_proxy="proxy.server.com:8080"

Χρησιμοποιώντας το ίδιο αρχείο για όλες σας τις μεταβλητές, έχετε μια γρήγορη σύνοψη για ποιες μεταβλητές έχετε ορίσει εσείς.

Το Σενάριο env-update

Αρκετά αρχεία στον κατάλογο /etc/env.d ορίζουν τη μεταβλητή PATH. Αυτό δεν είναι λάθος: όταν εκτελείτε το env-update, θα προσθέσει τους διάφορους ορισμούς πριν ενημερώσει τις μεταβλητές περιβάλλοντος, κάνοντάς το έτσι εύκολο για τα πακέτα (ή τους χρήστες) να προσθέτουν τις δικές τους μεταβλητές περιβάλλοντος χωρίς να παρεμβαίνουν στις ήδη υπάρχουσες τιμές.

Το σενάριο env-update θα προσθέσει τις τιμές διαβάζοντας με αλφαβητική σειρά τα αρχεία από τον κατάλογο /etc/env.d. Τα ονόματα των αρχείων πρέπει να ξεκινούν με δύο δεκαδικά ψηφία.

         00basic        99kde-env       99local
     +-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"

Η αλληλουχία των μεταβλητών δε συμβαίνει πάντα, αλλά μόνο στις ακόλουθες μεταβλητές: KDEDIRS, PATH, LDPATH, MANPATH, INFODIR, INFOPATH, ROOTPATH, CONFIG_PROTECT, CONFIG_PROTECT_MASK, PRELINK_PATH και PRELINK_PATH_MASK. Για τις υπόλοιπες μεταβλητές, χρησιμοποιείται η τελευταία ορισμένη τιμή (με αλφαβητική σειρά των αρχείων στον κατάλογο /etc/env.d).

Όταν εκτελείτε το env-update, το σενάριο θα δημιουργήσει όλες τις μεταβλητές περιβάλλοντος και θα τις τοποθετήσει στο αρχείο /etc/profile.env (που χρησιμοποιείται από το /etc/profile). Θα εξάγει επίσης τις πληροφορίες από τη μεταβλητή LDPATH και θα τις χρησιμοποιήσει για να δημιουργήσει το αρχείο /etc/ld.so.conf. Στη συνέχεια, θα εκτελέσει το ldconfig για να επαναδημιουργήσει το αρχείο /etc/ld.so.cache που χρησιμοποιεί ο δυναμικός συνδέτης.

Αν θέλετε να παρατηρήσετε την επίδραση του env-update αμέσως αφού το εκτελέσετε, εκτελέστε την παρακάτω εντολή για να ενημερώσετε το περιβάλλον σας. Οι χρήστες που έχουν εγκαταστήσει το Gentoo από μόνοι τους πιθανόν να το θυμούνται από τις οδηγίες εγκατάστασης:

# env-update && source /etc/profile
Η παραπάνω εντολή ενημερώνει τις μεταβλητές μόνο στο τρέχον τερματικό, σε νέες κονσόλες και στα παιδιά αυτών. Έτσι, αν δουλεύετε σε X11, θα πρέπει να εισάγετε σε κάθε νέο τερματικό που ανοίγετε source /etc/profile ή να επανεκκινήσετε τα Χ ώστε όλα τα τερματικά να λάβουν υπόψη τις νέες μεταβλητές. Αν χρησιμοποιείτε ένα διαχειριστή εισόδου, συνδεθείτε ως root και εισάγετε /etc/init.d/xdm restart. Αν όχι, θα πρέπει να αποσυνδεθείτε και να ξανασυνδεθείτε προκειμένου τα X να δημιουργούν διεργασίες με τις νέες τιμές στις μεταβλητές. Δεν μπορείτε να χρησιμοποιείτε μεταβλητές φλοιού, όταν ορίζετε άλλες μεταβλητές. Αυτό σημαίνει ότι εντολές όπως FOO="$BAR" (όπου $BAR είναι μια άλλη μεταβλητή) είναι απαγορευμένες.
Ορισμός των Μεταβλητών Τοπικά Καθορισμένες από το Χρήστη

Δεν είναι επιθυμητό πάντα να ορίζετε μια μεταβλητή καθολικά. Για παράδειγμα, πιθανόν να χρειαστεί να προσθέσετε τη διαδρομή /home/my_user/bin και τον τρέχον κατάλογο (τον κατάλογο στον οποίο βρίσκεστε) στη μεταβλητή PATH, αλλά δε θέλετε επίσης όλοι οι χρήστες του συστήματος να τα έχουν αυτά στις δικές τους PATH. Αν θέλετε να ορίσετε μια μεταβλητή τοπικά, θα πρέπει να χρησιμοποιήσετε τα αρχεία ~/.bashrc ή ~/.bash_profile:

(Μια άνω κάτω τελεία μη ακολουθούμενη από κατάλογο γίνεται αντιληπτό ως
ο τρέχων κατάλογος)
PATH="${PATH}:/home/my_user/bin:"

Όταν ξανασυνδεθείτε, η μεταβλητή σας PATH θα έχει ενημερωθεί.

Καθορισμένες για τη Συνεδρία

Μερικές φορές, ακόμα πιο αυστηροί ορισμοί είναι απαραίτητοι. Πιθανόν να χρειαστεί να χρησιμοποιήσετε εκτελέσιμα από ένα προσωρινό κατάλογο που δημιουργήσατε, χωρίς να χρησιμοποιείτε την πλήρη διαδρομή προς αυτά ή να επεξεργαστείτε το ~/.bashrc για το σύντομο διάστημα που θα τα χρειαστείτε.

Στην περίπτωση αυτή, μπορείτε να ορίσετε τη μεταβλητή PATH για την τρέχουσα συνεδρία σας χρησιμοποιώντας την εντολή export. Αν δεν αποσυνδεθείτε, η μεταβλητή PATH θα χρησιμοποιεί τις προσωρινές τιμές.

# export PATH="${PATH}:/home/my_user/tmp/usr/bin"