Profildateien sind Konfigurationsdateien, die Einstellungen für die Shells vornehmen und Variablen, die für den Ablauf der Programme notwendig sind, setzen. Dabei muß zwischen globalen und benutzerspezifischen Profil-Dateien unterschieden werden. Darüberhinaus gibt es Profil-Dateien, die von allen verschiedenen Shells verwendet werden sowie Shell-spezifische Profildateien - und das jeweils als globale wie benutzerspezifische Variante. Also ein eher kompliziertes System, wo sich schnell Fehler einschleichen können
. Aber dem noch nicht genug, jenachdem wie man die Shell aufruft, gibt es Profildateien, die nicht eingelesen werden. Im nachfolgenden werden zuerst die Profildateien der wohl am meisten verwendeten Shell unter Linux besprochen, die bash.
Die globale Profil-Datei ist /etc/profile, die jedem Benutzer einen Satz an Konfigurationseinstellungen bereitstellt. Auf einem Gentoo-System enthält sie standardmäßig nicht viele Einstellungen, da für viele Variableneinstellungen (Pfad usw.) eine eigene Profildatei verwendet wird. Auf anderen Distributionen enthält sie häufig die verschiedensten Pfadeinstellungen, vom Suchpfad für ausführbare Dateien, Pfade für man- und info-Seiten, Javaeinstellungen, Spracheinstellungen usw. Bei einem Gentoo-System sind diese Einstellungen in der Profildatei /etc/profile.env untergebracht, die dynamisch über env-update aus den Dateien in /etc/env.d erzeugt wird. In diesem Verzeichnis sind die spezifische Einstellungen, je nach installierter Software, für das System hinterlegt. Die globale Profildatei /etc/profile includiert den Inhalt von /etc/profile.env und stellt sie somit zur Verfügung. Im weiteren Verlauf wird unter Gentoo, falls es sich die Shell bash handelt, die Bash-spezifische Konfigurationsdatei /etc/bash/bashrc in /etc/profile includiert. Sie enthält Konfigurationseinstellungen, die ggf. für andere Shells nicht zur Verfügung stehen.
Zusätzlich wird, falls vorhanden, noch die Datei /etc/bash_completion von /etc/bash/bashrc includiert.
Im Anschluß werden die benutzerspezifischen Konfigurationsdateien ~/.bash_profile, ~/.bash_login und ~/.profile eingelesen, in dieser Reihenfolge und nur dann, wenn sie vorhanden sind. Sie überschreiben oder erweitern jeweils die Einstellungen aus den globalen Einstellungen. Unter Gentoo includiert standardmäßig ~/.bash_profile die Datei ~/.bashrc, die anderen beiden Dateien ~/.bash_login und ~/.profile sind nicht vorhanden.
Wie man daran schon sieht, hängten die Konfigurationen auch z.B. von der verwendeten Distribution ab, wie sie dies implementiert haben. Leider macht hier jede Distribution ihr eigenes Süppchen, so daß man sich das entsprechende System daraufhin ersteinmal anschauen muß, wie dies dort implementiert wurde.
Dem nochnicht genug, jenachdem welcher Typ von Shell man aufruft, werden auch unterschiedliche Konfigurationsdateien gelesen. Ist die aufgerufene bash eine interaktive Login-Shell oder eine nicht-interaktive Login-Shell (d.h. mit der Option –login aufgerufen), wird die globale Profildatei /etc/profile (mit allen inkludierten gloablen Einstellungen), sowie die benutzerspezifischen Profildateien ~/.bash_profile, ~/.bash_login und ~/.profile aufgerufen. Dies kann durch die Option –noprofile verhindert werden.
Wird die bash als interaktive Shell, jedoch nicht als Login-Shell, aufgerufen, wird nur die benutzerspezifische Profildatei ~/.bashrc aufgerufen1). Über die Option –norc kann dies Verhalten deaktiviert werden, möchte man eine andere Profildatei laden, kann diese über –rcfile <file> angegeben werden.
Bei der Beendigung der bash als Login-Shell werden die Profildateien ~/.bash_logout und /etc/bash/bash_logout eingelesen und ausgeführt. Häufiger Verwendungszweck hierfür ist, den Bildschirm zu löschen, damit nachfolgende Benutzer nicht sehen, was man denn so gemacht hat. Jedoch kann man in diesen Dateien alles ausführen, was man möchte. Z.B. kann ein Benutzer in seiner benutzerspezifischen Datei ein Backup von Daten implementieren - so daß bei jedem Logout die Daten gesichert werden.
Noch eine weitere Besonderheit bei der bash und ihren Profildateien ist, daß sie sich beim Aufruf als sh (statt bash) anders verhält - so wie sich historische Versionen der sh verhalten haben, jedoch konform zum POSIX-Standard. In diesem Fall werden nur die Profildateien /etc/profile und ~/.profile in dieser Reihenfolge eingelesen.
In der globalen Profildatei wird häufig die Form
<variable> = <wert> export <variable>
verwendet. Hiermit wird zuerst einer Variablen ein Wert zugewiesen (möglich sind auch Substitutionsmechanismen) und anschließend die Variable als globale Variable exportiert. Häufiger finden Sie auch Programmierkonstrukte, um die Variablen speziell an Ihr System anpassen zu können. Z.B. wird der Variablen MANPATH zuerst ein Wert zugewiesen (eine Reihe von man-Verzeichnissen, einzelne Verzeichnisangaben werden durch einen Doppelpunkt getrennt) und anschließend eine for-Schleife durchlaufen, die weitere Verzeichnisse mit möglichen man-Seiten enthält und bei Existenz an die MANPATH-Variablen angehängt. Hiermit wird erreicht, daß spezielle Sprachversionen von man-Seiten verfügbar gemacht werden 2).
Die Variable PS1 ist für den normalen Prompt zuständig. Hier finden Sie bei manchen Distributionen ein ganzes Programmiersprachenkonstrukt, um den Prompt in Abhängigkeit der benutzten Shell sowie des Benutzers zu setzten. Für den Wert dieser Variablen ist eine Zeichenkette vorgesehen, die neben normalem Text die in Tabelle Zeichenkombinationen für den Prompt wiedergegebenen Zeichenkombinationen enthalten kann.
Die beiden nachfolgenden Beispiele zeigen eine .profile-Datei, die beim Login interpretiert wird sowie die Datei .bash_logout, die von der bash beim logout ausgeführt wird.
# .profile # Prompt setzen export PS1="\h:\w\$ " # Kurzbefehle definieren alias win=startx alias move=mv alias copy=cp # Loginmeldung ausgeben echo "Hallo $USER, es ist jetzt ` date +"%A %d %B, %k Uhr $M"` " # Größe des Heimatverzeichnis ausgeben echo "Dein Verzeichnis $HOME belegt ` du -sh` "
Diese .profile-Datei setzt zuerst einen benutzerspezifischen Prompt, danach werden Kurzbefehle (Alias-Namen) definiert, z.B. daß das Verschieben von Dateien auch über das Kommando move erfolgen kann. Zum Schluß wird eine Loginmeldung mit Datum und Uhrzeit ausgegeben sowie die Größe des Heimatverzeichnisses.
# .bash_logout # Bildschirm löschen tput clear # Sichern aller neuen oder geänderten Texte # vom Verzeichnis $HOME/text nach $HOME/text.bak cp -u $HOME/text/*.* $HOME/text.bak # Logoutmeldung ausgeben echo "Hallo $USER, es ist jetzt ` date +"%A %d %B, %k Uhr $M"` . Auf Wiedersehen!"
Durch diese .bash_logout wird beim logout nun zuerst der Bildschirm gelöscht, anschließend die veränderten Dateien des Verzeichnisses text unterhalb des Heimatverzeichnisses ins Verzeichnis text.bak gesichert. Anschließend wird eine Meldung ausgegeben.
Diese Konfigurationsdatei gibt an, welche Datenträger in das Dateisystem aufgenommen werden sollen (siehe hierzu auch Kapitel Einbinden von Dateisystemen). Entweder werden sie automatisch beim Systemstart eingebunden oder können bei Angabe der Option noauto bequem über mount name eingebunden werden. Die Syntax sieht folgendermaßen aus:
<Gerätedatei> <Mount-Point> <Dateisystem> <Optionen> <Dump-Nr> <Prüf-Nr>
Für die Gerätedatei muß der komplette Pfad angegeben werden (z.B. /dev/hda1) und der angegebene Mount-Point muß im Dateibaum als Verzeichnis vorhanden sein. Sollte dieses Verzeichnis nicht leer sein, werden die Daten im Verzeichnis überdeckt. Es besteht nur noch der Zugriff auf die eigentlichen Daten im eingebundenen Dateisystem. Wenn Verzeichnisse fremder Rechner via NFS eingebunden werden, lautet der Device-Name rechnername:/verzeichnis. Die möglichen Dateisysteme sind abhängig von der Kernelkonfiguration, es besteht nur die Unterstützung für die Dateisysteme, die im Kernel eingebunden oder als Modul verfügbar sind. Einige Dateisysteme sind in Tabelle Dateisystem für /etc/fstab und mount aufgeführt. Optionen sind vor allem für CD-ROM und Dateisysteme wie MS-DOS und OS/2 notwendig, die wichtigsten Optionen sind in Tabelle Tabelle: Die wichtigsten Optionen für /etc/fstab und mount wiedergegeben 3).
Die <Dump-Nr> enthält Informationen für das Programm dumpfs und wird zur Zeit ignoriert. <Prüf-Nr> gibt an, ob und wie die Dateisysteme auf Richtigkeit überprüft werden. Dabei sollte für das Wurzelverzeichnis 1 und für alle anderen veränderlichen Dateisystem 2 angegeben werden. Dateisysteme, die nicht überprüft werden sollen (z.B. CD-ROM, proc und swap), bekommen 0.
Das nachfolgende Listing zeigt eine etwas komplexere fstab-Datei. Neben den Linux-Partitionen, Swap-Partition und proc-Dateisystem wird beim Systemstart die Partition /dev/hda8 mit einem vfat-Dateisystem eingebunden. Die Gruppenzugehörigkeit wird auf Gruppe 100 gesetzt und der Besitzer aller Dateien und Verzeichnisse ist root (uid=0 ist auf jedem System der Benutzer root). Für den liberalen Zugriff werden die Dateirechte über umask=0002 auf Lesen, Schreiben und Ausführen für Besitzer und Gruppe gesetzt, alle anderen erhalten Lese- und Ausführrechte. Für das CD-ROM Laufwerk werden die Einträge vorbereitet, so daß jeder Benutzer mit (u)mount /cdrom das Laufwerk ein- und ausbinden kann. Beim Diskettenlaufwerk gibt es beim Dateisystemtyp eine Besonderheit, hier wird der Type auto eingestellt. Hier versucht Linux, den Dateisystemtyp selbstständig zu ermitteln, gerade bei DOS-Disketten mit langen Dateinamen schlägt dies jedoch fehl.
/dev/hda2 swap swap defaults 0 0 /dev/hda3 / ext2 defaults 1 1 /dev/hda5 /usr ext2 defaults 1 2 /dev/hda1 /boot ext2 defaults 1 2 /dev/hda7 /home ext2 defaults 1 2 /dev/hda8 /daten vfat gid=100,umask=0002,uid=0 0 0 /dev/hdb /cdrom iso9660 ro,noauto,user,block=2048 0 0 /dev/fd0 /floppy auto noauto,user 0 0 none /proc proc defaults 0 0
Linux speichert in der Datei /etc/mtab eine Liste aller Datenträger, die momentan eingebunden sind und ändert diese dynamisch mit jedem mount- und umount-Befehl.
~/.bash_profile inkludiertman <Befehl> zeigt normalerweise immer nur die zuerst gefundene man-Seite an. Möchten Sie, daß zuerst deutsche Seiten angezeigt werden, sollten Sie den Pfad zu diesen Seiten direkt an erster Stelle von MANPATH eintragen.man mount, weitere Informationen erhalten Sie auch mit man fstab