Shell-Wikibook/Grundlagen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
Höhe=24px
Achtung dieser Artikel ist noch in Arbeit und dient vorläufig nur als Vorlage. Dieser Beitrag zu Linux oder der Abschnitt ist in Bearbeitung. Weitere Informationen findest du hier. Der Ersteller arbeitet an dem Beitrag oder Abschnitt und entsorgt den Wartungsbaustein spätestens 3 Tage nach der letzten Bearbeitung. Änderungen außer Rechtschreibkorrekturen ohne Absprache mit dem Urspungsautor sind möglichst zu vermeiden, solange dieser Baustein noch innerhalb der genannten Frist aktiviert ist.
Linux - Shell    Eine Einführung    (WIKIBOOK)   :    Grundlagen,    Anwendung    und    Skripting
Shell - Eine Einführung: 1. Grundlagen - 2. Erste Schritte (1) - 3. Erste Schritte (2) - 4. Fortgeschritten - 5. Reguläre Ausdrücke - 6. Skripting



Was ist eine Shell?

Eine Shell ermöglicht die Kommunikation zwischen Mensch und Rechner. Als Shell wird das Programm bezeichnet, was in der Regel nach dem Anmelden eines Benutzers aufgerufen wird und ihm eine Kommandozeile zur Eingabe bereitstellt. Von dieser Kommandozeile aus können weitere Programme gestartet werden. Die Shell stellt also im Wesentlichen die Arbeitsumgebung bereit, mit der der Rechner bedient wird. Eingegebene Texteingaben werden dabei von der Shell interpretiert und ausgeführt. Man spricht daher bei der Shell auch von einem Kommandozeileninterpreter.

Verwirrung bei Begrifflichkeiten

In Zusammenhang mit dem Wort Shell hört man immer wieder auch Ausdrücke wie Terminal, oder Konsole. Viele Benutzer verwenden diese Begriffe oberflächlich als synonym zueinander, tatsächlich gibt es aber kleine, feine Unterschiede in den Begrifflichkeiten. Dennoch ist es nicht ganz einfach, eine klare Abgrenzung dieser Ausdrücke zu finden.


  • Terminal: Ein Terminal ist ein Computer, der über eine fixe Verkabelung den Zugriff auf einen entfernten Rechner erhält. Terminal-PCs wurden besonders in der Zeit der Zentralrechner eingesetzt. Sie besitzen keine eigene Intelligenz, alle Rechenaufgaben übernimmt der Zentralrechner, lediglich die Ausgabe erfolgt auf dem eigentlichen Terminal-Gerät.


  • Konsole: In ihrem ursprünglicher Definition war die Konsole ein Terminal, mit dem der Systemoperator die Systemfunktionen steuern konnte.


  • Terminalemulation: Spricht man von Terminalemulation so meint man eigentlich die heutzutage gängige Vorstellung eines Terminals, in der Form eines Texteingabefensters auf dem Bildschirm des PCs um ihn zu steuern. Anders als bei den früheren, beschränkten Terminalrechnern, übernimmt hier das Betriebsystem die Emulation des Terminals. Texteingaben innerhalb des emulierten Terminals, werden dabei an den Sytemprozess des Kommandozeileninterpreters (siehe Shell) gesendet.


Die Interpretation der Texteingaben (also das Programm der Shell) läuft also in der Regel innerhalb eines emulierten Terminals.

Wie erhält man Zugriff auf die Shell?

Auf einem Linux-System hat man mehrere Möglichkeiten Zugriff auf die Shell zu bekommen. Zum einen gibt es die Text-Terminals, die den Zugriff auf das System im Text-Modus ermöglichen, sowie X11-Programme z.B. für eine grafische Desktopumgebung wie KDE, oder GNOME. Bei Linux hat man stets Zugriff auf die Text-Terminals. Anders als es z.B. bei Windows 2000 / XP / Vista der fall ist, lässt sich ein Linux-System auch ohne grafisches Grundsystem reibungslos bedienen. Bei Servern ist das sogar meist die Regel, da auf diesen oftmals gar kein X-Server, der für die grafische Ausgabe zuständig ist, zur Verfügung steht. Moderne Shells haben zusätzlich den Anspruch neben dem interaktiven Benutzermodus für Texteingaben, auch ein Skriptingsystem zu bieten.


Zugriff über die Text-Terminals

Stets präsent sind die Text-Terminals, die mit TTY bezeichnet werden. Die Abkürzung TTY stammt von dem englischen Wort Teletype und steht eigentlich für eine ehemals häufig gebräuchliche Schnittstelle zwischen zwei elektronischen Geräten. Historisch bedingt wurde dieser Begriff nach Unix übernommen und ist auch in Unix-Abkömmlingen wie Linux noch immer präsent.

Über die Tastenkombination

STRG  ALT  F1

gelangt man in eine dieser TTY-Konsolen, in diesem Fall TTY1. Insgesamt z.B. stehen unter openSUSE sieben dieser Terminals zur Verfügung. Über die oben genannte Tastenkombination STRG ALT F1-F7, kann man zwischen den einzelnen Text-Terminals wechseln.

Hinweis: Betreibt man eine grafische Oberfläche (also einen X-Server), so befindet sich dieser unter openSUSE standardmäßig auf TTY7 Dieser Wert ist aber Variabel und kann umverlegt werden.


Zugriff über grafische Programme

Bildschirmfoto der KDE-Konsole
Bildschirmfoto des Gnome-Terminals
Bildschirmfoto von XTerm

Verwendet man Linux in einer grafischen Umgebung, so wirken die einzelnen TTYs oft einschränkend bzw. wenig komfortabel. Abhilfe verschaffen verschiedene X11-Programme, die den Funktionsumfang erheblich erweitern. So ist z.B. durch diese Programme Copy&Paste möglich, oder komfortabel hoch und runterscrollen.

KDE Konsole

KDE-Nutzern steht ein benutzerfreundliches und performantes Programm namens Konsole zur Verfügung. Wie eingangs erwähnt ist nun das Namenswirrwarr perfekt. KDE spricht von einer Konsole, während andere, vergleichbare Programme als Terminal bezeichnet werden. Unabhängig davon, ist die Konsole äußerst komfortabel. Das Programm unterstützt Tabs, Transparenz, verschiedenste Farbschema, alle gängigen Zeichensätze, unterschiedliche Schriten und verscheidene Ansichtsprofile.


Gnome-Terminal

Auch der Gnome-Desktop verfügt über ein eigenes Programm für Terminal-Sitzungen namens Gnome-Terminal. Das Programm orientiert sich sehr stark an Xterm (siehe unten).


Xterm

Xterm ist Bestandteil des X-Window-System und war lange Zeit das Standardterminal für Linuxsysteme mit grafischer Oberfläche, wurde aber in den großen Desktopumgeben KDE und Gnome von eigenen Programmen ersetzt

Was für Shells gibt es?

Wie so oft in der OpenSource-Community gibt es nicht nur ein einziges Shellprogramm, sondern viele Alternativen die in der Lage sind Texteingaben der Kommandozeile zu interpretieren.

Die alte Welt

Bourne-Shell

Zu den Dinosauriern unter den Shells gehört die Bourne Shell. Sie wurde bereits Ende der 70er Jahre für Unix-Systeme verwendet. Sie stellte einige wichtige Funktionen zur Verfügung, wie etwa Ein-Ausgabeumlenkung, Pipes oder eine Job-Kontrolle. Sie wird zwar zunehmend von neueren, modernenen Shells verdrängt, spielt aber dennoch in der Unix-Welt eine bedeutende Rolle. Ihre Syntax ist Grundlage der meisten modernen Shells. Skripts für die Bourne-Shell sind praktisch ohne Änderung auch auf diesen Shells lauffähig und sind nach wie vor äußerst verbreitet.

C-Shell

Die C-Shell wurde ebenfalls in den ersten Jahren der Unix/BSD-Geschichte entwickelt. Ihre Syntax ist näher an C orientiert. Sie kann als Interpreter einer eigenen Skriptsprache fungieren. Die C-Shell hat zusätzlich Funktionen für eine Kommando-Historie, Job-Kontrolle und interaktive Datei- und Benutzernamenerweiterung. Heutzutage wird sie kaum noch verwendet, sie wurde durch moderne Shells (siehe unten) abgelöst.


Die neue Welt

Korn Shell (ksh)

Die Korn Shell basiert auf der Bourne Shell, übernimmt allerdings einige Features der C-Shell. Sie ist Bestandteil des POSIX-Standards und Default-Shell vieler kommerzieller Unix-Systeme. Allerdings war diese Shell nicht immer freie Software. Aus diesem Grund entwickelte man die Public Domain Korn-Shell (pdksh) als freie Alternative. Die pdksh wurde zur Standardshell von OpenBSD. Im März 2000 wurde allerdings auch der Quelltext der Korn-Shell unter den Bedigungen der CPL veröffentlicht.


Bourne Again Shell (bash)

Die Bourne Again Shell ist die Standardshell der meisten Linux-Distributionen. Die Shell beherrscht die Features der Borune- Korn- und C-Shell. Auch die Bash ist POSIX-Standardkonform und baut auf der Syntax der Borune-Shell auf. Redet man im Linux-Bereich von einer Shell, so ist meist die Bash gemeint. Der auszuführende Pfad ist

bin/bash

Auf den folgenden Seiten werden wir uns intensiv mit der Bash beschäftigen.

Debian Almquist Shell (Dash)

Die Debian Almquist Shell wird besonders bei Debian basierten Distributionen verwendet. Unter Ubuntu ist sie seit der Version Edgy Eft die Standardshell für Shellskripte. Normale Benutzereingaben werden aber nach wie vor über die Bash abgewickelt.


Keine Angst vor dem Umgang mit der Shell

Nachdem wir uns zuerst einen Blick über die Begrifflichkeiten gemacht haben, kann nun das eigentliche Arbeiten mit der Shell beginnen. Vielen Einsteigern fällt die Arbeit mit der Shell anfangs schwer, obwohl sie ein äußerst elegantes Mittel ist um spezielle Aufgaben zu erledigen. Wichtig im Umgang mit der Konsole ist, dass man die Angst sein funktionierendes System zu beschädigen ablegen sollte. Im Gegensatz zu anderen Betriebssystemen ist Linux ein System, bei dem der Benutzer das System steuert und nicht umgekehrt. Das System, besonders die Shell, reagiert nur auf die vom Benutzer eingegebenen Eingaben. Wenn man nun nicht gerade dem System befiehlt sich selbst zu löschen (warum sollte man das tun), wird also stets die Anweisung ausgeführt, die man in der Kommandozeile eingegeben hat. Systemdateien / Systemeinstellungen können ohnehin durch die strenge Benutzerverwaltung unter Linux nur vom Root-Benutzer, also vom Administrator, durchgeführt werden. Dennoch sollte man sich darüber im klaren sein, dass anders als z.B. unter Microsoft Windows standardmäßig NICHT nachgefragt wird, ob eine Aktion durchgeführt werden soll. Gibt man eine der Kommandozeile den Befehl zum Löschen einer Datei an, so wird dieser nach dem Betätigen der Return-Taste auch gelöscht. Das System erwartet also klare Anweisungen. Ein getätigtes Eingabekommando wird also i.d.R. ohne Nachfrage ausgeführt.


Die erste Falle: Groß- und Kleinschreibung

Viele Benutzer sind es von anderen Betriebssystemen, wie z.B. Windows gewohnt, dass die Groß- und Kleinschreibung bei Texteingaben von Datei- und Pfadangaben keine Rolle spielt. Das ist bei Linux grundlegend anders.

Nehmen wir an es existiert ein Verzeichnis:

/home/norbert/Urlaubsfotos

Wie man sieht, ist das U in Urlaubsfotos großgeschrieben. In diesem Beispiel nehmen wir an Norbert will seine Urlaubsfotos von der Shell aus erreichen. Hierbei ist es wichtig, dass er auf den Großbuchstaben bei der Eingabe des Pfades achtet. Über den Befehl cd kann man auf der Shell in andere Verzeichnisse wechseln (dazu später mehr). Norbert weiß über das Groß- und Kleinschreibeverhalten der Shell aber noch nicht bescheid und gibt folgenden Befehl ein:

cd /home/norbert/urlaubsfotos

Die Bash versteht/kennt diesen Pfad aber nicht, daher wird folgende Fehlermeldung ausgegeben:

bash: cd: urlaubsfotos: Datei oder Verzeichnis nicht gefunden

Gott sei Dank kann sich Norbert erinnern, dass er beim Anlegen des Verzeichnisses ein großes U Verwendet hat.

Korrekterweise gelangt er dieses mal durch den Befehl

cd /home/norbert/Urlaubsfotos

in seine Urlaubsfotos.


Hinweis:Beim Arbeiten mit der Shell sollte man stets auf die korrekte Groß- und Kleinschreibung bei Pfaden und Dateiennamen achten.


Weiter geht's mit Erste Schritte


Shell - Eine Einführung: 1. Grundlagen - 2. Erste Schritte (1) - 3. Erste Schritte (2) - 4. Fortgeschritten - 5. Reguläre Ausdrücke - 6. Skripting