Alle Unix processen bevatten een "omgeving". Dit is een lijst met variabelen waarin de naam en waarde staan, beide gewone strings die uit de meeste tekens kan zijn samengesteld. Alle Unix processen hebben een ouder proces - het proces dat dit kindproces aanmaakte. Kindprocessen erven de omgeving van de ouderprocessen. Ze kunnen een aantal wijzigingen in de omgeving aanbrengen voordat ze het doorgeven aan hun kindprocessen.
Een belangrijke omgevingsvariabele is PATH, een lijst met directory's gescheiden door dubbele punten (':'). Deze directory's worden doorzocht om commando's te kunnen vinden. Als je een commando `foo' probeert aan te roepen, worden alle directory's in PATH (in die volgorde) doorzocht voor een uitvoerbaar bestand met de naam 'foo' (één met x-bit aan). Als het bestand wordt gevonden, wordt het uitgevoerd.
In deze howto gebruik ik de term `commando' om te verwijzen naar uitvoerbare programma's, waarvan het de bedoeling is dat ze worden aangeroepen met verkorte namen, door gebruik te maken van het padmechanisme.
In Linux doorzoeken zelfs de low level besturingssysteem aanroepen (de exec familie van aanroepen) de directory's in het PATH variabele om processen te starten: je kunt het padmechanisme overal gebruiken daar waar je een commando probeert uit te voeren. Als de exec besturingssysteemaanroep een bestandsnaam krijgt die geen `/` bevat, bepaalt het de waarde van de PATH omgevingsvariabele. Zelfs als er geen variabele PATH in de omgeving voorkomt, worden tenminste de directory's /bin en /usr/bin doorzocht op passende commando's.
In sh gebruik je het export commando om de omgeving in te stellen, in csh gebruik je het setenv commando. Bijvoorbeeld:
sh:
PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:.
csh:
setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:.
C-programma's kunnen de setenv() bibliotheekaanroep gebruiken om de omgeving te wijzigen. Perl heeft z'n omgeving in een daarmee verbonden array %ENV, je kunt PATH instellen als in PATH $ENV{PATH}="/bin".
Het env commando is de basiswijze om de naar de huidige omgevingsvariabelen te vragen. Het kan ook worden gebruikt om wijzigingen aan te brengen.
Meer informatie over de basis omgevingsvariabelen kun je vinden in de manual pages van 'environ', 'execl', 'setenv', info file 'env' en in de shell-documentatie.
Als Linux opstart, is het initproces het eerste normale proces dat start. Het is een speciaal proces omdat het geen ouder heeft. Het is echter de stamvader van alle andere processen. De init omgeving zal als een omgeving van alle processen blijven als ze het niet expliciet wijzigen. De meeste processen doen dit echter wel.
Init start een groep processen. Het bestand /etc/inittab geeft de processen die het systeem start. Deze processen werken in de omgeving die direct van init is geërfd - - dit zijn typisch processen zoals `getty', het programma dat `login:' naar console schrijft. Als je hier PPP verbindingen start, moet je er aan denken dat je in de init omgeving werkt. De systeeminitialisatie is vaak een script dat hier is gestart. In Debian 1.3 is het initialisatiescript /etc/init.d/rc en het roept op zijn beurt andere initialisatiescripts aan.
Het systeem bevat veel draaiende servers (daemons) die wel of niet de standaardomgeving gebruiken. De meeste servers worden vanuit de initialisatiescripts gestart en hebben als gevolg daarvan de init omgeving.
Als een gebruiker op het systeem inlogt, wordt de omgeving beïnvloedt door de instellingen die in de programma's zijn gecompileerd, systeemomvattende initialisatiescripts en gebruikers-initialisatiescripts. Dit is nogal gecompliceerd en de huidige situatie is niet volledig bevredigend. Het is totaal anders als een gebruiker inlogt vanaf de tekstconsole, XDM of vanaf het netwerk.