Optimierung der Benutzerumgebung und Umgebungsvariablen

Wichtung: 3

Beschreibung: Die Kandidaten sollen in der Lage sein, globale und benutzerbezogene Profile zu verändern.

Wichtigste Wissensgebiete:
Umgebungsvariablen setzen.
Pflege der Skeleton-Verzeichnisse für neue Benutzerkonten.
Setzen des Suchpfades für Befehle auf die richtigen Verzeichnisse.

Liste wichtiger Dateien, Verzeichnisse und Anwendungen:
/etc/profile
/etc/skel
env
export
set
unset

Startdateien der Shell

Linux-Anwender können zwischen mehreren Shells auswählen. So gibt es neben der Bourne Again Shell (BASH) noch die Korn Shell und TC-Shell. Die meisten Linux-Anwender nutzen aber die BASH.

Nach dem Login wird automatisch die Shell gestartet, die dem Anwender zugeordnet wurde. Diese Shell arbeitet nun die Start- bzw. Konfigurationsdateien ab. Bei der Bash gibt es folgende Konfigurationsdateien:

Systemweit: /etc/profile
User: ~/.bash_profile
~/.bash_login
~/.profile

/etc/profile
In dieser Datei werden Einstellungen festgelegt, die für alle User gelten. Beispiel wichtiger Umgebungsvariablen:

PATH = Der Suchpfad für ausführbare Dateien.
MANPATH = Der Suchpfad für Handbücher
INFODIR bzw. INFOPATH = Der Pfad zu den Info-Seiten.
PAGER und EDITOR = Die Standardprogramme zum Ansehen und Editieren von Textdateien
PS1 und PS2 = Die Prompt-Einstellungen für den normalen und den Folgeprompt der Shell

AUßerdem können hier Variablen, Aliase, Funktionen und umask-Optionen (Festlegen der Zugriffsmodi neu erstellter Dateien) festgelegt werden. Beispiel:

// Auszug /etc/profile
PROFILEREAD=true
umask 022

# make path more comfortable
#
MACHINE=`test -x /bin/uname && /bin/uname --machine`
PATH=/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin
test "$UID" = 0 || PATH="$PATH:."
export PATH

# set some environment variables
#
PRINTER='lp'
export PRINTER

LESSCHARSET=utf8 COLLATE=utf8_general_ci
export LESSCHARSET

MANPATH=/usr/local/man:/usr/share/man:/usr/man:/usr/X11R6/man
export MANPATH

alias dir='ls -l'

# set prompt
#
set -p
if test "$UID" = 0 ; then
PS1="\h:\w # "
else
PS1="\u@\h:\w > "
fi

Interaktive und nicht-interaktive Shell

Immer wenn der User Kommandos in der Shell eingeben kann, handelt es sich um eine interaktive Shell. Eine interaktive Shell ist also dann vorhanden, wenn beispielsweise der Anwender XTerm öffnet, dieser sich am Linux-System anmeldet, eine Shell eine andere Shell mittels SU aufruft oder die Shell durch den Anwender direkt aufruft. Bei einer interaktiven Shell werden die Startdateien abgearbeitet.

Mit einer nicht-interaktiven Shell kommt der Anwender erst einmal nicht in Kontakt. Er hat keine Möglichkeit Kommandos einzugeben. Es handelt sich beispielsweise um eine nicht-interaktive Shell, wenn eine Shell eine Subshell aufruft, um ein Skript abzuarbeiten. Eine nicht-interaktive Shell arbeitet keine Startdateien ab.

export, set, unset - Grundlagen Umgebungsvariablen

Es entstehen nun Probleme bezüglich der Gültigkeit von Shellvariablen, da die Subshells nicht die Konfiguration der Login-Shell abarbeiten und die Subshells die Konfiguration der "Mutter-Shell" erhalten. Wenn wir eine Variable in der Shell 01 definieren, ist diese erst einmal nicht der Shell 02 bekannt:

  //SHELL 01
# Var1=Hallo
# echo $Var1
Hallo

//SHELL 02
$ echo $Var1

Damit eine Shell eine Variable an ihre Subshells weitergibt, muss die Variable exportiert werden. Das geschieht mit dem Shellbefehl export. Damit steht eine Variable allen weiteren Subshells zur Verfügung:

  //SHELL 01
# export Var1=Hallo
# echo $Var1
Hallo

//SHELL 02
# echo $Var1
Hallo

Achtung: Ändert man eine Variable, die zuvor exportiert wurde, so bezieht sich die Änderung nur auf die Subshell!

set = Zeigt ALLE definierten Variablen an.
unset PATH = Entfernt die Werte aus dem Umgebungsspeicher. Variable wird geleert.
env = Zeigt ALLE Umgebungsvariablen an.
pwd = Zeigt aktuelles Arbeitsverzeichnis an (print working directory)

/etc/skel - Benutzer-Template

Der Linux-Administrator kann Konfigurationsdateien, die er für die Anwender als sinnvoll erachtet, in das Verzeichnis /etc/skel kopieren. Die Daten werden dann automatisch in das Home-Laufwerk kopiert, wenn das useradd-Kommando mit der Option -m aufgerufen wurde.

# ls -a /etc/skel
.
..
.bash_history
.bashrc
.Xdefaults
.Xresources
.xinitrc
.xsession
...usw...

Der Befehl useradd -m testuser würde bewirken, dass automatisch das Homeverzeichnis /home/testuser inklusive der Dateien aus /etc/skel erstellt wird.