• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

.bashrc, .bash_profile und .bashrc - - 3 arten shell

El

Member
nach studium meines Buches und der man pages ist mir folgendes (vollkommen) unklar:
echo $PATH und alias ergeben einen output.
lt .meinem buch sind aliases und path im home in der .bashrc, bash_ profile oder in der .bashrc zu ändern.
ich finde lediglich die .bashrc und die ist größtenteils ausgerautet.
in der /etc/profile werde ich auch nicht fündig.
Wisst ihr:
-wo ich meine aliases und path' ändern kann?
-kann ich eine der genannten dateien einfach anlegen?
-was ist der unterschied (quelle = .bashrc) zwischen loginshell, interactive shell und normal shell?
 
A

Anonymous

Gast
Mal ein paar wichtige Textstellen dazu von http://www.lpi-test.de zitiert.

Login-Shell versus NoLogin-Shell

Unix unterscheidet beim Aufruf einer Shell, ob es sich um eine Login-Shell handelt, oder um eine No-Login-Shell. Der Unterschied ist einfach: Die Login-Shell ist die Shell, die beim Login vom login-Programm gestartet wurde. Jede weitere Shell, die von der Login-Shell aufgerufen wird ist eine No-Login-Shell.

Der Grund für diese Unterscheidung liegt in der Frage der Konfigurationsdateien, die später noch genauer dargestellt werden. Zunächst nur so viel: Die Login-Shell muß konfiguriert werden, sie erhält beim Start viele Variablen, die sie an spätere Shells weitervererbt.


Eine Shell, die wiederum von der Loginshell aufgerufen wird hat diese Konfiguration nicht nötig. Durch die Tatsache, daß Variablen an aufgerufene Shells weitergegeben werden können, erledigt sich das von selbst. Außerdem wäre es eine sehr zeitaufwendige Methode, wenn jede Subshell jedesmal alle Konfigurationsdateien abarbeiten müsste.


Die Frage, die sich grundsätzlich stellt ist ja auch die, wozu eine Shell denn überhaupt eine Subshell aufruft. Das kommt sehr viel häufiger vor, als auf den ersten Blick ersichtlich. Jedesmal, wenn die Shell ein Script abarbeitet, wird dazu von ihr eine Subshell aufgerufen. Wenn bei jedem Scriptaufruf dann alle Konfigurationsdateien abgearbeitet werden würden, wäre das eine echte Zeitfrage.


Auch in der graphischen Benutzeroberflache, die ja oft aus einer Shell heraus gestartet wird (startx) erscheinen wieder mehrere xterm-Fenster, in denen jeweils eine Shell läuft. All diese Shells sind keine Login-Shells.


Eine weitere Unterteilung der No-Login-Shells ist die Frage, ob es sich om eine interaktive Shell handelt, oder nicht. Diese Frage ist aber unerheblich, wenn es um die Konfiguration geht.

Grundsätzlich unterscheidet die Shell bei Konfigurationsdateien, zwischen Login-Shells und Nicht-Login-Shells. Nur bei Login-Shells werden alle Konfigurationsdateien abgearbeitet. Bei allen anderen Shells wird nur optional eine Datei abgearbeitet, die nicht von der Login-Shell benutzt wird. Konkret werden die folgenden Dateien in der angegebenen Reihenfolge und Abhängigkeit von der Login-Shell abgearbeitet:

Wenn die Datei /etc/profile existiert, wird sie abgearbeitet

Wenn im Heimatverzeichnis des Users die Datei .bash_profile existiert wird sie abgearbeitet.

Wenn diese Datei nicht existiert wird die Datei .bash_login im Heimatverzeichnis des Users gesucht und falls gefunden, abgearbeitet.

Wenn auch diese Datei nicht existiert, so wird im Heimatverzeichnis des Users die Datei .profile gesucht und falls gefunden abgearbeitet.

Diese Konstruktion ermöglicht es, sowohl die systemweiten Einstellungen vorzunehmen, als auch jedem User die Freiheit zu lassen, selbst Einstellungen vorzunehmen. Die /etc/profile-Datei kann nur vom Systemverwalter verändert werden, alle anderen Dateien befinden sich ja in den Heimatverzeichnissen der einzelnen User. Sie sind meist frei editierbar.

Eine einzige Datei wird von der Nicht-Login-Shell abgearbeitet, falls sie existiert - .bashrc im Heimatverzeichnis jedes Users.

Beim genauen Lesen wirst du sehen, es wir nur jeweils die erste gefundene Datei .bash_profile .bash_login .profile abgearbeitet.
Zur Gültigkeit von Aliasen gilt genau das selbe, wie zur Gültigkeit von Shellvariablen. Sie haben nur Gültigkeit in der Shell, in der sie definiert wurden. Im Gegensatz zu Variablen lassen sich Aliase aber nicht exportieren - zumindestens nicht bei modernen Shells. Wenn ein Alias auch innerhalb einer Subshell gelten soll, so muß er in einer Konfigurationsdatei definiert werden, die auch von einer No-Login-Shell abgearbeitet wird, also etwa ~/.bashrc.

Die Aliase die voreingestellt ( gilt für SuSE ) oder vom root für alle eingetragen werden stehen in der /etc/bash.bashrc diese Datei ist dazu da, die interaktiven Shells zu konfigurieren, also alle Shells in denen du einen Prompt zur Eingabeaufforderung erhältst.

Zur Konfiguration eigener Aliase gibt es obendrein noch im Homeverzeichnis die Datei .alias die wird bei interaktiven Shells ebenfalls durchlaufen, bzw. aus der /etc/bash.bashrc heraus gestartet, wenn sie existiert.

Code:
robi@linux:~> ls -al | grep alias
-rw-r--r--   1 rob   users      32 2005-07-17 19:16 .alias
robi@linux:~> more .alias
alias lsf='ls -l | grep -v ^d'

robi
 
Oben