Arbeiten mit der Shell

In der Informatik bezeichnet man als Shell die Software, die den Benutzer in irgendeiner Form mit dem Computer verbindet. Zu den typischen Aufgaben gehören etwa die Bereitstellung von Kerneldiensten oder das Anbieten von Oberflächen für diverse Systemkomponenten. Der Begriff „Shell“ (englisch für „Hülle“ oder „Außenhaut“) stammt von Muschelschalen und soll entsprechend eine Oberfläche zwischen dem Anwender und dem Inneren (den Kernel-Komponenten) darstellen. Bei Betriebssystemen gibt es zwei Arten von Shells, die Kommandozeile (englisch Command-Line Interface CLI) und die grafischen Benutzeroberflächen (englisch Graphical User Interface GUI). Jedoch wird umgangssprachlich meist der Kommandozeileninterpreter als Shell bezeichnet.
Weitere Informationen unter: http://de.wikipedia.org/wiki/Unix-Shell

Dieses Kapitel soll Ihnen zeigen, wie man sich die tägliche Arbeit mit der bash (Bourne-Again-Shell) erleichtern kann.

die erste Zeile

Schon an der ersten Zeile der Shell können viele Informationen abgelesen werden

[root@serverlein ~]#
   |       |     | |->  Rechte (#=root, $=user)
   |       |     |--->  aktueller Pfad (~=Heimatordner) 
   |       |--------->  Servername
   |----------------->  Username

Die Kommando-History

Das einfachste Feature der bash, das Ihnen etwas Arbeit abnimmt, sollten Sie unbedingt kennen: die Kommando-History. Sie speichert die zuletzt eingegebenen Befehle. Sie können diese abrufen und brauchen sie nicht erneut einzugeben, um sie wieder aufzurufen. Zudem bietet die bash die Möglichkeit, diese Befehle zu editieren.
Eine Übersicht über die in der History enthaltenen Befehle liefert Ihnen ein bloßer Aufruf von history. Durch Angabe einer Nummer bekommen Sie die letzten n Einträge angezeigt.

history 10

Unerwünschte Einträge in der History können Sie über history -d <Nummer> aus der History-Liste löschen.

Nehmen wir einmal an, es wurde der Befehl find /usr/local/bin -name „Dateiname“ ausgeführt. Nun möchten Sie den gleichen Befehl mit einem anderen Dateinamen ausführen. Um nicht alles noch einmal eintippen zu müssen, können Sie durch die Cursor-Taste Nach oben den zuletzt eingegebenen Befehl in die Kommandozeile laden.

Durch erneutes Betätigen der Nach-oben-Taste lädt die bash wiederum den Befehl, der vor dem letzten aufgerufen wurde, in die Kommandozeile und so weiter – so einfach ist das. Mit der Nach-unten-Taste können Sie die History wieder vorwärts durchsuchen.

Strg + R

Bei diesem Verfahren wird Ihnen automatisch von der bash angezeigt, welcher Befehl ausgeführt werden würde, während Sie die Kommandozeile editieren:

`un': uname

Der in der Eingabe befindliche Befehl wird aus dem Inhalt der Bash-History logisch erweitert.

Automatische Vervollständigung von Dateinamen

Ein ähnlich praktisches Feature wie die Kommando-History stellt die automatische Vervollständigung von Dateinamen dar. Sie wird in der bash durch die Tab-Taste angesteuert. Da unter Unix auch Programme Dateien darstellen, funktioniert dieses Feature natürlich auch mit diesen.

Bei der Nutzung der Tab-Taste sind allerdings zwei Fälle zu unterscheiden:

Nur ein Kandidat

Für den ersten Fall erstellen wir ein Beispielverzeichnis, in dem wir eine Datei mit dem Namen abc.txt unterbringen. Listing 7.65 Beispielverzeichnis mit einer Datei erstellen

$ mkdir test
$ touch test/abc.txt
$ cd test

Verwenden wir nun ein Programm wie /bin/ls, dem wir diese Datei als Parameter übergeben, müssen wir, da es nur eine Datei im Verzeichnis gibt, bloß die Tab-Taste betätigen, und die bash setzt uns den Dateinamen automatisch an die gewünschte Position in der Eingabe.

Versuchen Sie es einmal selbst: Wechseln Sie in das neue Verzeichnis, geben Sie ls und ein Leerzeichen ein, und drücken Sie die Tab-Taste. Die bash sollte nun den Dateinamen abc.txt automatisch in die Befehlszeile schreiben.

Mehrere Kandidaten

Nun erstellen wir im Verzeichnis noch eine Datei mit dem Namen xyz.txt. Wenn Sie das letzte Beispiel unter den neuen Bedingungen wiederholen, wird es nicht ohne weiteres funktionieren. Die bash weiß nicht von selbst, welche der beiden Dateien sie als Parameter übergeben soll. Der Trick funktioniert nun so, dass so viele Zeichen des Dateinamens eingegeben werden, bis es nur noch einen Dateinamen gibt, auf den die ersten Zeichen zutreffen – in diesem Fall genügt der erste Buchstabe der Datei (entweder ein »a« oder ein »x«), da kein Dateiname gleiche Zeichen enthält. Wird dann erneut die Tab-Taste gedrückt, vervollständigt die bash den Dateinamen wieder automatisch.

Gleiche Anfangsbuchstaben

Doch die bash kann Ihnen noch ein Stück Arbeit abnehmen. Nehmen wir an, es seien zwei Dateien abc und abd in einem Verzeichnis vorhanden. Sofern es sowieso keine Wahl zwischen den Zeichen gibt, bringt eine Betätigung der Tab-Taste immer diese Zeichen auf den Monitor. Drücken Sie also in solch einem Verzeichnis die Tab-Taste, so schreibt die bash Ihnen die beiden ersten Zeichen (da diese sowieso gleich sind und von Ihnen eingegeben werden müssten) auf den Bildschirm. Sie müssen anschließend nur noch ein »c« bzw. »d« eingeben.

Für den Fall, dass im Verzeichnis noch die Datei xyz vorhanden ist, müsste der erste Buchstabe wieder eingegeben werden, da nun wieder zwei Fälle eintreten könnten.

Doppel-Tab

Wenn mehrere Dateien vorhanden sind, können Sie die Tab-Taste auch zweimal betätigen, um sich während der Befehlseingabe eine Übersicht über die Dateien im Verzeichnis zu verschaffen. Durch dieses doppelte Betätigen liefert Ihnen die bash immer die nach Ihrer bisherigen Eingabe noch möglichen Dateiauswahlen.

Das bedeutet im Beispiel: Hätten Sie wieder die drei Dateien xyz, abc und abd im Verzeichnis, so würde Ihnen die bash zunächst alle drei auflisten. Wenn Sie dann ein »a« eingeben und die Tab-Taste drücken, gibt Ihnen die bash das »b« (die einzig sinnvolle Möglichkeit) auf dem Bildschirm aus. Wenn Sie dann wieder doppelt die Tab-Taste betätigen, gibt Ihnen die bash nun die beiden noch möglichen Dateinamen abc und abd aus.

Weiterhin ist das Tab-Taste »intelligent«: Am Anfang einer Shelleingabe ist nur ein ausführbares Kommando sinnvoll – entsprechend werden auch nur ausführbare Dateien bzw. Shellbuiltins vervollständigt.

Weitere Informationen

Einführung in die Shell: http://www.fibel.org/linux/lfo-0.6.0/node39.html
Shellprogramierung: http://www.linux-services.org/shell/

100 wichtige Shellbefehle

Tabelle: Die 100 wichtigsten Linux‑(Red Hat)‑Shellbefehle für Systemadministratoren

Die folgende Übersicht enthält die 100 zentralen Shellbefehle, die ein Linux‑Systemadministrator unter Red Hat Enterprise Linux (RHEL) im täglichen Betrieb benötigt. Die Erklärungen sind bewusst kurz und praxisnah gehalten.

Nr.	Befehl	Kurzerklärung
1	ls	Listet Dateien und Verzeichnisse auf
2	cd	Wechselt das aktuelle Verzeichnis
3	pwd	Zeigt das aktuelle Arbeitsverzeichnis
4	cp	Kopiert Dateien oder Verzeichnisse
5	mv	Verschiebt oder benennt Dateien um
6	rm	Löscht Dateien oder Verzeichnisse
7	mkdir	Erstellt ein neues Verzeichnis
8	rmdir	Löscht ein leeres Verzeichnis
9	touch	Erstellt leere Dateien oder ändert Zeitstempel
10	stat	Zeigt detaillierte Dateiinformationen
11	file	Erkennt den Dateityp
12	chmod	Ändert Dateiberechtigungen
13	chown	Ändert Dateibesitzer
14	chgrp	Ändert die Gruppenzugehörigkeit
15	umask	Setzt Standardberechtigungen
16	find	Sucht Dateien nach Kriterien
17	locate	Schnelle Dateisuche über Index
18	which	Zeigt den Pfad eines Befehls
19	whereis	Findet Binär-, Quell- und Man-Dateien
20	tree	Zeigt Verzeichnisstruktur grafisch
21	cat	Gibt Dateiinhalte aus
22	less	Blättert durch Textdateien
23	more	Einfache Textanzeige seitenweise
24	head	Zeigt die ersten Zeilen einer Datei
25	tail	Zeigt die letzten Zeilen einer Datei
26	watch	Führt Befehle periodisch aus
27	grep	Durchsucht Text nach Mustern
28	awk	Textverarbeitung und -analyse
29	sed	Stream-Editor für Textmanipulation
30	cut	Extrahiert Spalten aus Text
31	sort	Sortiert Textzeilen
32	uniq	Entfernt doppelte Zeilen
33	wc	Zählt Zeilen, Wörter, Zeichen
34	diff	Vergleicht Dateien
35	patch	Wendet Dateiänderungen an
36	tar	Archiviert und extrahiert Dateien
37	gzip	Komprimiert Dateien
38	gunzip	Dekomprimiert gzip-Dateien
39	zip	Erstellt ZIP-Archive
40	unzip	Entpackt ZIP-Archive
41	df	Zeigt Festplattenbelegung
42	du	Ermittelt Speicherverbrauch
43	lsblk	Listet Blockgeräte
44	mount	Bindet Dateisysteme ein
45	umount	Hängt Dateisysteme aus
46	blkid	Zeigt Blockgeräte-IDs
47	free	Zeigt Speicherverbrauch
48	top	Echtzeit-Prozessübersicht
49	htop	Erweiterte Prozessübersicht
50	ps	Zeigt laufende Prozesse
51	uptime	Zeigt Laufzeit und Systemlast
52	vmstat	Speicher- und Prozessstatistik
53	iostat	I/O-Statistiken
54	kill	Beendet Prozesse per Signal
55	killall	Beendet Prozesse nach Namen
56	nice	Startet Prozesse mit Priorität
57	renice	Ändert Prozesspriorität
58	systemctl	Steuert systemd-Dienste
59	journalctl	Zeigt systemd-Logs
60	service	Legacy-Dienstverwaltung
61	chkconfig	Legacy-Runlevel-Konfiguration
62	crontab	Zeitgesteuerte Jobs verwalten
63	at	Einmalige zeitgesteuerte Jobs
64	useradd	Erstellt Benutzer
65	usermod	Ändert Benutzer
66	userdel	Löscht Benutzer
67	groupadd	Erstellt Gruppen
68	passwd	Ändert Benutzerpasswörter
69	id	Zeigt Benutzer-IDs
70	login	Benutzeranmeldung
71	logout	Benutzerabmeldung
72	su	Benutzerwechsel
73	sudo	Führt Befehle mit Root-Rechten aus
74	hostname	Zeigt oder setzt den Hostnamen
75	hostnamectl	Verwalten des Systemhostnamens
76	ip	Netzwerkinterfaces konfigurieren
77	ss	Socket- und Netzwerkstatus
78	ping	Prüft Netzwerkerreichbarkeit
79	traceroute	Verfolgt Netzwerkpfade
80	nmcli	NetworkManager CLI
81	curl	Datenübertragung per URL
82	wget	Dateien aus dem Netz laden
83	scp	Sichere Dateiübertragung
84	rsync	Effiziente Dateisynchronisation
85	ftp	Klassischer Dateiübertrag
86	sftp	Sichere Dateiübertragung
87	ssh	Remote-Zugriff auf Systeme
88	exit	Beendet Shell oder Sitzung
89	clear	Leert das Terminal
90	history	Zeigt Befehlsverlauf
91	alias	Erstellt Befehlsalias
92	unalias	Entfernt Alias
93	env	Zeigt Umgebungsvariablen
94	export	Setzt Umgebungsvariablen
95	source	Lädt Shell-Skripte
96	bash	Startet eine Bash-Shell
97	sh	Startet eine POSIX-Shell
98	reboot	Startet das System neu
99	shutdown	Fährt das System kontrolliert herunter
100	poweroff	Schaltet das System aus