Einführung in Linux

...

Die Shell (engl. Schale)

shell

Shells

Wechsel der Shell

Verlassen der Shell mit: exit

Standardshell

Die Standardshell des Users wird in /etc/passwd festgelegt.

Benutzer und Gruppen

Linux unterscheidet drei Arten von Zugriffsberechtigungen. Die des Besitzers (user), der Gruppe (group) und allen anderen (others).

User und Gruppen

Jeder User gehört mindestens einer Gruppe (Hauptgruppe) an. Kann aber zu mehreren Gruppen gehören.

Zu welcher Hauptgruppe der User gehört steht in /etc/passwd

Beispielzeile aus /etc/passwd:

gabi:x:500:100:Gabi Maier:/home/gabi:/bin/bash
gabi
login-Name
x
Eigentlich das Passwort des Users, steht aber mittlerweile verschlüsselt in /etc/shadow.
500
Interne Nummer (UID) des Users. (Intern arbeitet Linux nicht mit dem Namen eines Users sondern nur mit Nummern.)
100
Interne Nummer (GID) der Gruppe.(vgl. /etc/group )
Gabi Maier
Spezialfeld. Enthält bie SuSE Linux den vollen Namen des Users.
/home/gabi
Homeverzeichnis des Users.
/bin/bash
Programm, dass bei der Anmeldung des Users gestartet wird. In der Regel die Standard-Shell.

Beispielzeile aus /etc/group:

users:x:100:klaus, sabine
users
Name der Gruppe.
x
Spezialfeld. Meistens leer.
100
Interne Nummer (GID) der Gruppe.
klaus, sabine
Liste der Mitglieder der Gruppe.

Es wird unterschieden:

Jede Datei die ein User anlegt wird automatisch dem User und seiner primären Gruppe zugeordnet. Mit newgrp kann der User seine aktive Gruppe wechseln.

...

...

Ausgabevervielfachung mit tee

Beispiele:

ls -l | tee inhalt
ls -l | tee
Ausgabe von ls -l wird an das Programm tee weitergeleitet.
tee inhalt
tee gibt die Eingabe (hier die Ausgabe von ls -l) zweimal aus. Auf dem Bildschirm (Standardausgabe) und in die Datei inhalt.
ls -l | tee inhalt1 > inhalt2
Die Ausgabe von ls -l wird in die beiden Dateien inhalt1 und inhalt2 geschrieben.
ls -l | tee inhalt1 | sort +4 > inhalt2
Die Ausgabe von ls -l wird in die Dateie inhalt1 geschrieben und an das Programm sort weitergeleitet.
sort sortiert die Ausgabe von ls -l nach der fünften Spalte (Dateigröße). Das Ergebnis der Sortierung wird in der Datei inhalt2 gespeichert. und inhalt2 geschrieben.

Hintergrundprozesse

Beispiel:

find / -name '*.sh' &> ergebnis &
find / -name '*.sh'
Sucht vom Wurzelverzeichnis / ausgehend alle Dateien deren Namen mit sh endet.
&> ergebnis
Ergebnis der Suche wird inklusive Fehlermeldungen in die Datei ergebnis geschrieben.
&
Startet das Kommando als Hintergrundprozess.
Bildschirmausgabe:
[1] 334
[1]
Nummer des Hintergrundprozesses.
334
PID-Nummer zur Prozessidentifikation. (vgl. ps -ax und /proc )
Tip:
Mit Strg-z kann das Programm unterbrochen und anschließend mit bg als Hintergrundprozeß fortgesetzt werden.

Mehrere Kommandos

Beispiel:

find / -name '*.sh' &> ergebnis & ls
Das Kommando find / -name '*.sh' &> ergebnis wird als Hintergrundprozeß ausgeführt. Gleichzeitig wird das Kommando ls ausgeführt.

Beispiel:

ls; date
Die beiden Kommandos ls und date werden nacheinander ausgeführt.

Beispiel:

(ls; date) > inhalt
Durch das Klammern werden beide Kommandos zwangsweise in einr Shell ausgeführt und liefern so ein gemeinsames Ergebnis, dass in die Datei inhalt umgeleitet wird.

logische Abhängigkeiten zwischen zwei Kommandos

Tritt bei der Ausführung eines Kommandos ein Fehler auf, so erzeugt das Kommando einen Rückgabewert (exit status) der ungleich 0 ist. Erfolgt die Ausführung des Kommandos fehlerfrei wird eine 0 zurückgegeben.
Durch diese Eigenschaft von Linux ist es möglich die Ausführung von zwei Kommandos logisch miteinander zu verknüpfen.

Kommando_1 && Kommando_2
Kommando_2 wird nur fehlerfrei ausgeführt, wenn Kommando_1 ohne Fehler terminierte.
Kommando_1 || Komamndo_2
Kommando_2 wird nur ausgeführt, wenn Kommando_1 mit einem Fehler terminierte.

Beispiele:

(1)ls -nl --> erzeugt keinen Fehler
(2)ls -j --> erzeugt einen Fehler
ls -nl && ls -y
(1) und (2) werden ausgeführt
ls -y && ls -nl
nur (2) wird ausgeführt
ls -nl || ls -y
nur (1) wird ausgeführt
ls -y || ls -nl
(2) und (1) werden ausgeführt

Substitutionsmechanismen

Im Gegensatz zu DOS wird die Auswertung der Kommandozeile bei Linux nicht vom aufrufenden Programm sondern von der Bash vorgenommen.

Beispiel DOS:

dir *.txt
Das Kommando dir wertet *.txt aus.

Beispiel Linux:

ls *.txt
Die bash ermittelt aus *.txt ein Liste mit realen Dateinamen und gibt die an ls weiter.
ls wird also z. B. wie folgt aufgerufen:

ls apfel.txt birne.txt kirsche.txt

Vorteile:
Die Möglichkeiten der bash zur Bildung von Dateinamen: Tip:
Nach set-x wird jedes Kommando vor der Ausführung angezeigt.
(set - beendet die Anzeige)

Beispiele:

Zeichenkettenbildung mit geschweiften Klammern

Beispiele:

echo {a,b} {1,2,3}
a b 1 2 3
echo {a,b}{1,2,3}
a1 a2 a3 b1 b2 b3
echo {a,b,c}{e,f,g}.{txt,html}
ae.txt ae.html af.txt af.html ag.txt ag.html be.txt be.html bf.txt bf.html bg.txt bg.html ce.txt ce.html cf.txt cf.html cg.txt cg.html

Rechnen mit der bash

Beispiel:
echo $[2+3]
5
Mögliche Operatoren sind:
+plus==gleich
-minus!=ungleich
*mal<kleiner
/geteilt<=kleiner gleich
%modulo>größer
!nicht>=größer als
&&und>>shift right
||und<<shift left
Alle Berechnungen werden für 32-Bit Intergerzahlen ausgeführt.
(+/- 2.147.483.648)
Beispiele:
echo $[12<<1]
24
echo $[12>>1]
6

Kommandosubstitution

Beispiel:
ls -l $(find /usr -name '*README*' 2> /dev/null)
-r--r--r-- 1 root root  8240 Sep 23 2001 /usr/X11R6/lib/X11/doc/README
-r--r--r-- 1 root root  2542 Sep 23 2001 /usr/X11R6/lib/X11/doc/README.DECtga
-r--r--r-- 1 root root 13813 Sep 23 2001 /usr/X11R6/lib/X11/doc/README.DGA
-r--r--r-- 1 root root 47034 Sep 23 2001 /usr/X11R6/lib/X11/doc/README.DRI
-r--r--r-- 1 root root 21922 Sep 23 2001 /usr/X11R6/lib/X11/doc/README.DRIcomp
-r--r--r-- 1 root root  3262 Sep 23 2001 /usr/X11R6/lib/X11/doc/README.I128
-r--r--r-- 1 root root  4389 Sep 23 2001 /usr/X11R6/lib/X11/doc/README.SiS
...
Das Kommando in $(...) wird durch sein Ergebnis substituiert.
Anmerkung:
find /usr -name '*README*' 2> /dev/null | ls -l
Geht nicht, da ls keine Eingabe über die Standardeingabe erwartet.
Andere Lösung mit xargs

find /usr -name '*README*' 2> /dev/null | xargs ls -l

Behandlung von Sonderzeichen

Oder: Wie lösche ich die Datei ab* $huhu?
rm 'ab* $huhu'
Alle Zeichen zwischen den Hochkommas werden als Zeichenkette interpretiert.
Alternativ gehen auch "Gänsefüßchen".
echo "Das ist der Zugriffspfad: $PATH"
" "ist weniger restriktiv, hier wird zum Beispiel der Inhalt der Variablen $PATH ausgegeben.
Tipp:
Einzelne Sonderzeichen werden durch ein vorangestelltes \ als normales Zeichen interpretiert.
Beispiel:
rm abc\*ef\$ghi

Letzte Änderung: 05.06.2001 - (c) Dipl.-Gwl., Dipl.-Ing. (FH) H. Bäurle - Elektronikschule Tettnang