LPIC102/105.1 Die Shell-Umgebung anpassen und verwenden: Unterschied zwischen den Versionen

Aus Foxwiki
TomUlbrich (Diskussion | Beiträge)
TomUlbrich (Diskussion | Beiträge)
Zeile 139: Zeile 139:


=Konfigurationsdateien der Bash=
=Konfigurationsdateien der Bash=
In den unterschiedlichen Linux-Distributionen kann es zu unterschiedlichen Konstrukten der Konfigurationsdateien kommen. Konfigurationsdateien, die für alle Anwender Gültigkeit haben, befinden sich im Verzeichnis /etc und beginnen niemals mit einem Punkt. Die individuellen Konfigurationsdateien für den jeweiligen User befinden sich im entsprechenden Heimatverzeichnis und beginnen immer mit einem Punkt. Eine Datei /etc/.bashrc kommt als Konfigurationsdatei genauso wenig in Frage wie eine Datei mit der Bezeichnung /home/udo/profiles.
*In den unterschiedlichen Linux-Distributionen kann es zu unterschiedlichen Konstrukten der Konfigurationsdateien kommen
*Konfigurationsdateien, die für alle Anwender Gültigkeit haben, befinden sich im Verzeichnis /etc und beginnen niemals mit einem Punkt  
*individuelle Konfigurationsdateien für den jeweiligen User befinden sich im entsprechenden Heimatverzeichnis und beginnen immer mit einem Punkt


==Systemweite Konfigurationsdateien==
==Systemweite Konfigurationsdateien==

Version vom 19. Juli 2019, 01:16 Uhr

Was ist eine Shell

  • ein textbasiertes Programm, dass als Schnittstelle zwischen Benutzer und Computer fungiert
  • Benutzer kann durch die Shell mit dem Kernel kommunizieren
  • der englische Begriff Kernel zu Deutsch Kern heißt und eine Shell eine Schale ist, wird wohl sehr schnell klar, wie diese beiden Fachbegriffe entstanden sind und wo eine solche Shell im System-Gefüge angesiedelt ist
  • Umgebung für die Ausführung von Skripten und Programmen
  • man kann sie im weitesten Sinne auch noch als Programmierumgebung betrachten
  • Die am weitesten verbreitete Shell ist die "bash" (Bourne Again Shell)
  • "sh" ist der Vorfahre der Bash

Umgebungsvariablen und Shellvariablen

  • Inhalte von Variablen sorgen dafür, dass laufende Programme und Skripte sich selbst mit kleinen Informationen versorgen können, ohne dass der Benutzer diese jedes Mal explizit angeben muss
  • es wird unterschieden zwischen Umgebungsvariablen und Shellvariablen
  • unterscheiden sich darin, durch welche Konfigurationsdateien sie deklariert werden, wann sie durch welches Programm ausgewertet werden und durch ihren Wirkungsbereich

Umgebungsvariablen

  • gelten für alle Shells, die ein Benutzer verwendet
  • Inhalte dieser Variablen werden außerdem vererbt (beim Aufruf einer Subshell wird ein automatischer Export der Variablen in diese Subshell stattfinden)
  • es werden Großbuchstaben verwendet

Shellvariablen

  • müssen in jeder Shell, die durch den Benutzer oder ein Skript gestartet wird, neu deklariert werden
  • es findet standardmäßig keine Vererbung statt
  • sie werden kleingeschrieben

Variablen

  • Die Bash unterscheidet zwischen Groß- und Kleinschreibweise
  • Die Konventionen bezüglich der Schreibweisen bei Umgebungs- oder Shellvariablen werden von einigen Distributionen nicht eingehalten

Variablen deklarieren

Die Deklaration und Abfrage einer Shellvariable erfolgt recht einfach:

user@tom:~$ a=5
user@tom:~$ b=6
user@tom:~$ let c=$a+$b
user@tom:~$ echo $c=$a+$b
11=5+6
  • die Variablen a und b mit den Werten 5 und 6 gefüllt
  • dritte Zeile sorgt, dass Variable c das Ergebnis der Summe aus $a und $b wird
  • letzte Zeile gibt die komplette Operation aus
  • Inhalte einer Variablen bleiben innerhalb einer Shell erhalten => die Variable kann wiederholt abgerufen oder verwendet werden
user@tom:~$ echo $c
11

Variablen exportieren

  • wird eine Subshell aufgerufen, steht diese Variable nicht mehr zur Verfügung, weil es sich nicht um eine Umgebungsvariable handelt
  • es ist aber möglich, eine Variable für eine Subshell verfügbar zu machen, indem man diese exportiert
  • Ein solcher Export erfolgt nur an untergeordnete, jedoch nie an übergeordnete Shells
  • Export bewirkt nicht, dass aus einer Shellvariable eine Umgebungsvariable wird

Der Exportbefehl kann auf zwei Arten durchgeführt werden:

user@tom:~$ export c
user@tom:~$ sh
sh-3.00# echo $c
11
  • In der ersten Variante wurde die Variable c aus dem vorangegangenen Beispiel exportiert und anschließend wurde mit sh eine neue Subshell geöffnet und dann mit echo $c auf dem Bildschirm ausgegeben

Die zweite Methode sieht folgendermaßen aus:

user@tom:~$ export z=1000
user@tom:~$ sh
sh-3.00# echo $z
1000
  • die Deklaration der Variablen und der Export sind mit einem Befehl durchgeführt worden
  • mit echo $z wird demonstriert, dass der Inhalt der Variablen in der Ziel-Shell angekommen ist

Variablen einsehen

  • mit dem Befehl set ohne Angabe von Parametern kann man nachsehen, welche Umgebungs- und Shellvariablen die aktuelle Shell gerade verwendet
  • die Ausgabe an less weitergebn, damit Sie den Inhalt in Ruhe untersuchen können

Eine gekürzte Ausgabe könnte Folgendes enthalten:

user@tom:~$ set | less
a=5
b=6
BASH=/bin/bash
c=11
HISTSIZE=1000
HOME=/root
HOSTNAME=archangel
MANPATH=/usr/share/man:/usr/local/man:/usr/X11R6/man:/opt/gnome/share/man
PAGER=less
PATH=/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/usr/
X11R
  • Umgebungsvariablen können mit dem Kommando env eingesehen werden
  • es ist ratsam, die Ausgabe mit less zu betrachten

Variablen löschen

  • Variablen werden mit dem Befehl unset gelöscht

Um die Variablen aus den vorherigen Beispielen zu entfernen, geben Sie Folgendes ein:

user@tom:~$ unset a
user@tom:~$ unset b
user@tom:~$ unset c

Zur Überprüfung:

user@tom:~$ set | less
BASH=/bin/bash
HISTSIZE=1000
...
  • Die Variablen a, b und c wurden gelöscht
  • Alternativ ist eine Neuanmeldung möglich, denn es handelt sich um Shellvariablen, die bei Abmeldung nicht erhalten bleiben

Aliase und Funktionen

Aliase

  • Für Befehle in Kombination mit bestimmten Parametern oder langen Befehlen die häufiger verwendet werden ist es empfehlenswert ein Alias anzulegen
  • es ist möglich, mehrere Kommandos in einem einzigen Alias zu kombinieren, indem Diese durch Semikolons ";" voneinander getrennt werden

Hier ein Beispiel:

user@tom:~$ alias frei="free; df"
user@tom:~$ frei
              total        used        free      shared  buff/cache   available
Mem:        3870884     1001952     1608764      124880     1260168     2512240
Swap:       7811068           0     7811068
Dateisystem    1K-Blöcke Benutzt Verfügbar Verw% Eingehängt auf
udev             1924160       0   1924160    0% /dev
tmpfs             387092    5896    381196    2% /run
/dev/sda2       38186548 7072220  29144820   20% /
tmpfs            1935440   11096   1924344    1% /dev/shm
tmpfs               5120       4      5116    1% /run/lock
tmpfs            1935440       0   1935440    0% /sys/fs/cgroup
tmpfs             387088       0    387088    0% /run/user/113
tmpfs             387088      12    387076    1% /run/user/1000
  • es wird mit einem einzigen Befehl die Festplatten- und Speicherbelegung überprüft, allerdings geht die Definition der Aliase bei einer Neuanmeldung am System verloren

Funktionen

  • Einschränkungen des Alias ist, dass der Übergabewerte ($1, $2 usw.) nur einmal ausgewertet werden kann, bei einer Funktion gibt es diese Einschränkung nicht
  • eine Funktion ist ein Unterprogramm, das man für wiederkehrende Aufgaben verwenden kann
  • kann in einer Shell sowohl von einem Benutzer als auch von einem Skript aufgerufen werden

Der Aufbau einer Funktion sieht immer so aus:

function Funktionsname() 
{ 
Befehl 1 
Befehl 2 
... 
Befehl n 
}
  • "function" kann auch einfach weggelassen werden, weil die Bash an den beiden Klammern erkennt, dass es sich um eine Funktion handelt

Das Beispiel demonstriert, dass es mit einer Funktion sogar möglich ist, Rechenoperationen auszuführen:

user@tom:~$ function addiere () 
> { 
> let summe=$1+$2 
> echo -e "Die Summe ist $summe" 
> } 
user@tom:~$ addiere 3 4 
Die Summe ist 7
  • eine Funktion namens addiere wurde erstellt
  • Die geschweiften Klammern sorgen dafür, dass diese mehrzeilige Anweisung als ein einziger Befehl interpretiert wird
  • "let summe=$1+$2" sorgt dafür, dass der Variable "summe" die Summe aus den beiden Übergabevariablen $1 und $2 übergeben wird
  • In der nächsten Zeile erfolgt die Ausgabe
  • Es ist auch möglich, eine Funktion in einer einzigen Zeile zu erstellen:
user@tom:~$ function addiere { let summe=$1+$2; echo "Die Summe ist $summe"; }
  • die beiden Leerzeichen innerhalb der geschweiften Klammern sind notwendig und dienen nicht nur der Übersichtlichkeit

builtin

  • vor der Vergabe der Bezeichnung für Ihre Funktionen und Aliase überprüfen, ob es bereits ein Kommando mit diesem Namen gibt

Wenn man eine Funktion oder einen Alias erstellen möchte, welches namentlich mit einem existierenden Kommando übereinstimmt, müssten Sie ansonsten zum Aufruf des ursprünglichen Kommandos den kompletten Pfad zu diesem Kommando angeben. Bei einer Übereinstimmung des Namens mit einem Shellinternen Befehl verwenden Sie vorab das Kommando builtin. Wenn Sie z. B. für den echo-Befehl standardmäßig die Maskierung durch die Verwendung eines Backslashs aktivieren wollen, können Sie diesen Alias einrichten: archangel:/ # alias echo='echo -e' Benötigen Sie echo dann ausnahmsweise doch im Originalzustand, erfolgt der Aufruf durch: archangel:/ # builtin echo

Konfigurationsdateien der Bash

  • In den unterschiedlichen Linux-Distributionen kann es zu unterschiedlichen Konstrukten der Konfigurationsdateien kommen
  • Konfigurationsdateien, die für alle Anwender Gültigkeit haben, befinden sich im Verzeichnis /etc und beginnen niemals mit einem Punkt
  • individuelle Konfigurationsdateien für den jeweiligen User befinden sich im entsprechenden Heimatverzeichnis und beginnen immer mit einem Punkt

Systemweite Konfigurationsdateien

Die systemweiten Konfigurationsdateien sind für jeden Benutzer gültig, der sich am System anmeldet. Die beiden gängigsten sind folgende:

  • /etc/profile ist die erste Konfigurationsdatei, die bei der Anmeldung (Login- Shell) eines Benutzers eingelesen wird
    • enthält erste Umgebungsvariablen und die erste PATH-Anweisun
    • Änderungen in dieser Datei erfordern eine neue Anmeldung des Benutzers
  • /etc/bash.bashrc enthält systemweite Einstellungen, Aliase und Funktionen
    • wird beim Start jeder Shell neu eingelesen und erfordert deshalb nach Änderung keine Neuanmeldung des Benutzers

Konfigurationsdateien für den Benutzer

Die folgenden Dateien befinden sich im Heimatverzeichnis eines jeden Benutzers und dürfen auch durch seinen Besitzer modifiziert werden:

  • ~/.bash_profile wird (falls vorhanden) nur bei einer Neuanmeldung eingelesen und sofort nach /etc/profile ausgeführt
    • beinhaltet zusätzliche Pfadanweisungen, den zu verwendenden Standardeditor und benutzerspezifische Umgebungsvariablen
  • ~/.bash_login ist eine Alternative zu .bash_profile
    • wird auch nur dann abgearbeitet, wenn die Datei .bash_profile nicht existiert
    • diese Datei wird nur während der Anmeldung verwendet
    • Inhalt und der Verwendungszweck entsprechen der .bash_profile
  • ~/.profile ist die ursprüngliche Konfigurationsdatei der Bash
    • wird nur während der Anmeldung (für die Login-Shell) eingelesen, aber nur wenn weder eine .bash_profile- noch eine .bash_login-Datei im Verzeichnis des Benutzers existieren
    • Inhalt und Verwendungszweck entsprechen der .bash_profile und .bash_login
  • ~/.bashrc ist die andere, ursprüngliche Konfigurationsdatei der Bash
    • wird in jedem Fall eingelesen, und zwar auch beim Aufruf einer neuen Shell
    • nach Änderungen in dieser Datei ist keine Neuanmeldung des Benutzers erforderlich
    • beinhaltet im Wesentlichen Aliase und Funktionen.
  • ~/.bash_logout ist eine optionale Datei
    • wird ausgeführt wenn der Benutzer sich abmeldet

Konfiguration "on the fly" einlesen

  • wurden neue Variablen in den Konfigurationsdateien deklariert, können diese sofort wirksam gemacht werden, indem man das Shell-interne Kommando source verwendet
user@tom:~$ source /etc/profile

Skeleton-Verzeichnis /etc/skel

  • eine Vorlage für das Heimatverzeichnis eines neuen Benutzers
  • beim Erstellen eines neuen Benutzerkontos mit useradd -m "username" wird, ein Verzeichnis namens /home/"username" erstellt
  • der Inhalt des Skeleton-Verzeichnisses wird dann in das Verzeichnis /home/"username" kopiert
  • die Berechtigungen werden für das Verzeichnis und dessen Inhalt auf den neuen Benutzer abgestimmt
  • Speicherort ist normalerweise /etc/skel