Inhaltsverzeichnis
Zusammenfassung
Unter Linux werden grafische Benutzeroberflächen immer wichtiger. Die Maus ist für die täglichen Aufgaben jedoch nicht immer am besten geeignet. Die Befehlszeile bietet hohe Flexibilität und Effizienz. Textbasierte Anwendungen spielen eine besonders große Rolle beim Steuern von Computern über langsame Netzwerkverbindungen oder bei der Ausführung von Aufgaben als root an der Befehlszeile in einem xterm. Die Bash-Shell ist der standardmäßige Befehlszeilen-Interpreter unter SUSE Linux.
Linux ist ein Mehrbenutzersystem und der Zugriff auf Dateien wird durch Benutzerberechtigungen gesteuert. Ein Verständnis des Berechtigungsprinzips ist immer hilfreich, unabhängig davon, ob Sie eine Befehlszeile oder eine grafische Benutzeroberfläche verwenden. Wenn Sie mit der Befehlszeile arbeiten, spielen mehrere Befehle eine wichtige Rolle. Der Texteditor vi wird häufig zum Konfigurieren eines Systems über die Befehlszeile verwendet. Er ist auch bei vielen Systemadministratoren und Entwicklern beliebt.
In der KDE-Kontrollleiste befindet sich ein Symbol, das einen Monitor mit einer Muschel darstellt. Wenn Sie auf dieses Symbol klicken, wird ein Terminalfenster geöffnet, in das Sie Befehle eingeben können. Die Konsole führt in der Regel Bash aus (Bourne again Shell), ein Programm, das ein Teil des GNU-Projekts ist. Klicken Sie auf dem GNOME-Desktop auf ein Symbol mit einem Computermonitor im oberen Feld, um ein Terminal zu starten, das in der Regel Bash ausführt.
Sobald Sie die Shell geöffnet haben, sehen Sie die Eingabeaufforderung (engl. prompt) in der ersten Zeile. In der Regel besteht diese aus dem Benutzernamen, dem Host-Namen und dem aktuellen Pfad — dies kann jedoch angepasst werden. Wenn sich der Cursor rechts von dieser Eingabeaufforderung befindet, können Sie Befehle direkt an das Computersystem senden.
Ein Befehl besteht aus mehreren Elementen. Das erste Element ist stets der eigentliche Befehl, gefolgt von Parametern oder Optionen. Befehle werden ausgeführt, wenn Sie die Eingabetaste drücken. Zuvor können Sie die Befehlszeile ganz einfach bearbeiten, Optionen hinzufügen oder Tippfehler korrigieren. Einer der am häufigsten verwendeten Befehle ist ls, der mit oder ohne Argumente verwendet werden kann. Durch Eingabe des Befehls ls ohne Zusatz wird der Inhalt des aktuellen Verzeichnisses angezeigt.
Optionen wird als Präfix ein Bindestrich vorangestellt. Der Befehl
ls -l z. B. zeigt den Inhalt desselben
Verzeichnisses mit allen Details an (im langen Listenformat). Neben jedem Dateinamen wird das Erstellungsdatum der Datei angezeigt, die Dateigröße in Byte und weitere Details, die später besprochen werden. Eine wichtige Option, die für viele Befehle existiert, ist --help. Durch Eingabe von ls --help werden alle Optionen für den Befehl ls angezeigt.
Die richtige „Schreibweise“ ist wichtig. Wenn ein Dateiname ein Leerzeichen enthält, fügen Sie entweder ein Escape-Zeichen in Form eines umgekehrten Schrägstrichs ein (\) oder schließen Sie den Dateinamen in einfachen oder doppelten Anführungszeichen ein. Anderenfalls interpretiert Bash einen Dateinamen wie Eigene Dokumente als den Namen von zwei Dateien oder Verzeichnissen. Der Unterschied zwischen einfachen und doppelten Anführungszeichen ist, dass bei doppelten Anführungszeichen eine Variablenerweiterung stattfindet. Einfache Anführungszeichen gewährleisten, dass die Zeichenfolge von der Shell buchstäblich interpretiert wird.
Um die Shell effizient zu nutzen, sind einige Kenntnisse der Datei- und Verzeichnisstruktur eines Linux-Systems hilfreich. Verzeichnisse sind elektronische Ordner, in denen Dateien, Programme und Unterverzeichnisse gespeichert sind. Das Verzeichnis der obersten Ebene in der Hierarchie ist das Root-Verzeichnis, auch / genannt. Von hier aus kann auf alle anderen Verzeichnisse zugegriffen werden.
Das Verzeichnis /home enthält die Verzeichnisse, in denen die einzelnen Benutzer ihre persönlichen Dateien speichern können. Abbildung 27.1, „Auszug aus einer Standardverzeichnisstruktur“ zeigt die standardmäßige Verzeichnisstruktur unter Linux an mit den Home-Verzeichnissen der Beispielbenutzer xyz, linux und tux. Die Verzeichnisstruktur eines Linux-Systems hat eine funktionelle Struktur, die dem Filesystem Hierarchy Standard (Dateisystem-Hierarchiestandard, FHS) entspricht. Die folgende Liste enthält eine kurze Beschreibung der Standardverzeichnisse unter Linux.
/Root-Verzeichnis, Startpunkt der Verzeichnisstruktur
/homePersönliche Verzeichnisse von Benutzern
/devGerätedateien, die Hardware-Komponenten darstellen
/etcWichtige Dateien für die Systemkonfiguration
/etc/init.dStartskripts
/usr/binProgramme, die für den allgemeinen Zugriff verfügbar sind.
/binProgramme, die am Anfang des Startvorgangs benötigt werden.
/usr/sbinProgramme, die für den Systemadministrator reserviert sind.
/sbinProgramme, die für den Systemadministrator reserviert und für den Start erforderlich sind.
/usr/includeHeader-Dateien für den C-Compiler
/usr/include/g++Header-Dateien für den C++-Compiler
/usr/share/docVerschiedene Dokumentationsdateien
/usr/share/manSystemhandbuchseiten (Manualpages)
/usr/srcQuellcode der Systemsoftware
/usr/src/linuxKernel-Quellcode
/tmp, /var/tmpTemporäre Dateien
/usrAlle Anwendungsprogramme
/varKonfigurationsdateien (wie solche, die über /usr verknüpft sind)
/var/logSystemprotokolldateien
/var/admSystemverwaltungsdaten
/libFreigegebene Bibliotheken (für dynamisch verknüpfte Programme)
/procProzessdateisystem
/sysSystemdateisystem, in dem alle Gerätedaten für den Kernel gesammelt werden.
/usr/localLokale, verteilungsunabhängige Erweiterungen
/optOptionale Software, größere Add-On-Programmpakete (wie KDE, GNOME, Netscape)
Es gibt zwei wichtige Funktionen der Shell, die Ihnen die Arbeit erheblich erleichtern können:
Um einen Befehl zu wiederholen, der bereits eingegeben wurde, drücken Sie , bis der vorherige Befehl an der Befehlseingabe angezeigt wird. Sie können sich durch eine Liste von zuvor eingegebenen Befehlen bewegen, indem Sie drücken. Um die Befehlszeile zu bearbeiten, verschieben Sie den Cursor an die gewünschte Position mit den Pfeiltasten und beginnen die Eingabe. Verwenden Sie Strg-R, um die Chronik zu durchsuchen.
Ergänzt einen Dateinamen zu seiner vollen Länge, nachdem die ersten Buchstaben eingegeben werden, sobald er eindeutig erkannt wird. Geben Sie hierzu die ersten Buchstaben ein und drücken Sie die Tab-Taste. Wenn es mehrere Dateinamen gibt, die mit denselben Buchstaben beginnen, können Sie eine Liste anzeigen, indem Sie die Tab-Taste zweimal drücken.
Da Sie nun wissen, wie ein Befehl aussieht, welche Verzeichnisse in SUSE Linux vorhanden sind und wie Sie mit Bash die Vorgänge beschleunigen können, können Sie Ihr Wissen mit einer kleinen Übung in die Praxis umsetzen.
Öffnen Sie eine Konsole auf dem KDE- oder GNOME-Desktop, indem Sie auf das Muschel-Symbol klicken.
Geben Sie den Befehl ls ein, um den Inhalt Ihres Home-Verzeichnisses anzuzeigen.
Verwenden Sie den Befehl mkdir (der für make directory (Verzeichnis erstellen) steht), um ein neues Unterverzeichnis mit dem Namen test zu erstellen, indem Sie mkdir test eingeben.
Starten Sie nun einen Editor, indem Sie die Alt-Taste-F2 drücken und kate für Kate in KDE und gedit für Gedit in GNOME eingeben. Geben Sie ein paar Buchstaben in den Editor ein und speichern Sie die Datei unter dem Namen Testdatei im Home-Verzeichnis. Linux unterscheidet zwischen Groß- und Kleinschreibung. Verwenden Sie in diesem Beispiel ein groß geschriebenes T.
Zeigen Sie den Inhalt Ihres Home-Verzeichnisses erneut an. Anstatt ls erneut einzugeben, drücken Sie einfach zweimal und der Befehl ls sollte erneut an der Eingabeaufforderung angezeigt werden. Drücken Sie die Eingabetaste, um den Befehl auszuführen. Das neu erzeugte Verzeichnis test sollte in blauen Buchstaben und Testdatei sollte in schwarzen Buchstaben angezeigt werden. So können Verzeichnisse und Dateien in einer Konsole unterschieden werden.
Verschieben Sie Testdatei in das Unterverzeichnis test mit dem Befehl mv. Um diesen Vorgang zu beschleunigen, verwenden Sie die Erweiterungsfunktion: geben Sie einfach mv T ein und drücken Sie die Tab-Taste. Solange keine andere Datei im Verzeichnis mit diesem Buchstaben beginnt, erweitert die Shell den Dateinamen und fügt die Zeichenfolge estdatei hinzu. Fügen Sie anderenfalls selbst einen Buchstaben oder zwei hinzu und testen Sie durch Drücken der Tab-Taste bei jeder Eingabe, ob die Shell den Namen nun erweitern kann. Geben Sie dann ein Leerzeichen und test nach dem erweiterten Dateinamen ein und drücken Sie die Eingabetaste, um den Befehl auszuführen.
Testdatei sollte sich zu diesem Zeitpunkt nicht mehr im Verzeichnis befinden. Prüfen Sie dies, indem Sie ls erneut eingeben.
Um zu überprüfen, ob die Datei erfolgreich verschoben wurde, wechseln Sie in das Verzeichnis test mit dem Befehl cd test. Geben Sie ls erneut ein. Testdatei sollte nun in der Liste aufgeführt sein. Wechseln Sie zurück in das Home-Verzeichnis an einen beliebigen Punkt, indem Sie lediglich cd eingeben.
Um eine Kopie der Datei zu erstellen, verwenden Sie cp. Geben Sie z. B. cp Testdatei Testbackup ein, um Testdatei in Testbackup zu kopieren. Der Befehl ls kann verwendet werden, um zu sehen, ob sich beide Dateien im Verzeichnis befinden.
Beim Arbeiten mit Dateien oder Verzeichnissen ist es wichtig, den richtigen Pfad anzugeben. Sie müssen jedoch nicht den gesamten (absoluten) Pfad aus dem Root-Verzeichnis zur jeweiligen Datei angeben. Sie können im aktuellen Verzeichnis starten. Adressieren Sie das Home-Verzeichnis direkt mit ~. Dies bedeutet, dass es zwei Methoden gibt, um die Datei Testdatei im Verzeichnis test aufzuführen: Sie können den relativen Pfad mit ls test eingeben oder den absoluten Pfad mit ls ~/test festlegen.
Um die Inhalte von Home-Verzeichnissen anderer Benutzer aufzulisten, geben Sie ls ~Benutzername ein. In der Beispielverzeichnisstruktur ist einer der Beispielsbenutzer tux. In diesem Fall würde ls ~tux den Inhalt des Home-Verzeichnisses von tux auflisten.
Das aktuelle Verzeichnis wird mit einem Punkt (.) angegeben. Die nächsthöhere Ebene in der Struktur wird durch zwei Punkte dargestellt (..). Indem Sie ls .. eingeben, wird der Inhalt des übergeordneten Verzeichnisses des aktuellen Verzeichnisses angezeigt. Der Befehl ls ../.. zeigt den Inhalt des Verzeichnisses an, das in der Hierarchie zwei Ebenen höher liegt.
Hier finden Sie ein weiteres Beispiel, wie Sie sich in den Verzeichnissen des SUSE Linux-Systems bewegen.
Wechseln Sie in das Home-Verzeichnis mit dem Befehl cd. Erstellen Sie dann darin ein Unterverzeichnis mit dem Namen test2, indem Sie mkdir test2 eingeben.
Wechseln Sie in das neue Verzeichnis mit cd test2 und
erstellen Sie darin ein Unterverzeichnis mit dem Namen
Unterverzeichnis. Um in das Verzeichnis zu wechseln öffnen, verwenden Sie die Erweiterungsfunktion: Geben Sie cd Un ein und drücken Sie die Tab-Taste. Die Shell erweitert den Rest des Verzeichnisnamens.
Versuchen Sie nun, die zuvor erzeugte Datei Testbackup zurück in das aktuelle Verzeichnis (Unterverzeichnis) zu verschieben, ohne das Verzeichnis erneut zu wechseln. Legen Sie hierzu den relativen Pfad zu dieser Datei fest: mv ../../test/Testbackup . (Beachten Sie den Punkt am Ende). Der Punkt am Ende des Befehls ist erforderlich, damit die Shell erkennt, dass das aktuelle Verzeichnis das Ziel ist, in das die Datei verschoben werden soll. ../../ bezieht sich in diesem Beispiel auf das Home-Verzeichnis.
Ein weiterer Pluspunkt der Shell sind Platzhalter für die Pfadnamenserweiterung. In Bash gibt es davon drei verschiedene Typen:
Entspricht genau einem zufälligen Zeichen
Entspricht einer beliebigen Anzahl an Zeichen
Entspricht einem der Zeichen aus der Gruppe, die in den eckigen Klammern angegeben wurden, die hier durch die Zeichenfolge set dargestellt werden. Als Teil von set können Sie auch Zeichenklassen mit der Syntax [:class:] festlegen, wobei class zu alnum, alpha, ascii usw. gehört.
Wenn Sie ! oder ^ am Beginn der Gruppe verwenden ([!set]) wird eine Übereinstimmung mit einem Zeichen gesucht, das keinem der Zeichen entspricht, die durch set festgelegt wurden.
Angenommen, das Verzeichnis test enthält die Dateien Testdatei, Testdatei1, Testdatei2 und Datendatei, dann führt der Befehl ls Testdatei? die Dateien Testdatei1 und Testdatei2 auf. Mit ls Test* enthält die Liste auch Testdatei. ls *dat* zeigt alle Beispieldateien an. Schließlich können Sie den Platzhalter set verwenden, um alle Beispieldateien zu adressieren, deren letztes Zeichen eine Ziffer ist: ls Testdatei[1-9] oder, wenn Sie Klassen verwenden, ls Testdatei[[:digit:]].
Von den vier Platzhaltertypen beinhaltet das Sternchen die meisten Zeichen. Es kann verwendet werden, um alle im Verzeichnis enthaltenen Dateien in ein anderes zu kopieren oder um alle Dateien mit einem Befehl zu löschen. Der Befehl rm *dat* würde z. B. alle Dateien im aktuellen Verzeichnis löschen, deren Namen die Zeichenfolge dat umfassen.
Linux umfasst zwei kleine Programme zum Anzeigen von Textanzeigen direkt in der Shell. Anstatt einen Editor zu starten, um eine Datei zu lesen wie Readme.txt, geben Sie einfach less Readme.txt ein, um den Text im Konsolenfenster anzuzeigen. Verwenden Sie die Leertaste, um die Seiten durchzublättern. Verwenden Sie Pfeil-Aufwärts und Pfeil-Abwärts, um sich im Text nach vorne oder hinten zu bewegen. Um less zu beenden, drücken Sie Q.
Statt less können Sie auch das ältere Programm "more" verwenden. Dies ist jedoch weniger praktisch, da Sie nicht zurückscrollen können.
Das Programm less hat seinen Namen von dem Konzept less is more (weniger ist mehr) und kann auch verwendet werden, um die Ausgabe von Befehlen auf bequem mitzuverfolgen. Wie dies funktioniert, wird in Abschnitt 27.1.7, „Pipe und Umleitung“ beschrieben.
In der Regel wird in der Shell als Standardausgabe der Bildschirm oder das Konsolenfenster verwendet, während die Standardeingabe über die Tastatur erfolgt. Um die Ausgabe eines Befehls an eine Anwendung wie less weiterzuleiten, verwenden Sie eine Pipeline.
Um die Dateien im Verzeichnis test anzuzeigen, geben Sie den Befehl ls test | less ein. Der Inhalt des Verzeichnisses test wird dann mit less angezeigt. Dies ist nur sinnvoll, wenn die normale Ausgabe mit ls zu lang wäre. Wenn Sie z. B. den Inhalt des Verzeichnisses dev mit ls /dev anzeigen, können Sie nur einen kleinen Teil des Fensters sehen. Die gesamte Liste können Sie mit ls /dev | less anzeigen.
Sie können auch die Ausgabe von Befehlen in einer Datei speichern.
Z. B. generiert echo "Test eins" > Inhalt
eine neue Datei mit dem Namen Inhalt, die die Wörter
Test eins enthält. Mit less Inhalt
können Sie sich die Datei anzeigen lassen.
Sie
können z. B. mit tr Zeichen aus einer
Standardeingabe ersetzen, die aus der Datei Inhalt
umgeleitet wurde und das Ergebnis in die Standardausgabe schreiben: ersetzen
Sie t durch x, indem Sie tr t x
< Inhalt aufrufen. Die Ausgabe von tr wird auf
dem Bildschirm angezeigt.
Wenn Sie die Ausgabe als Datei benötigen, leiten Sie die Ausgabe von
tr in eine Datei weiter. Um dies zu testen, wechseln Sie in
das Verzeichnis test und geben den Befehl tr t x < ../Inhalt > neu ein. Zeigen Sie neu mit less neu an.
Wie die Standardausgabe wird auch die Standardfehlerausgabe an die Konsole
gesendet. Um jedoch die Standardfehlerausgabe an eine Datei mit dem Namen
fehler zu senden, hängen Sie 2>
fehler an den entsprechenden Befehl an. Sowohl die Standardausgabe
als auch die Standardfehlerausgabe werden in einer Datei mit dem Namen
gesamtausgabe gespeichert, wenn Sie >&
gesamtausgabe anhängen. Um schließlich die Ausgabe eines
Befehls an eine bereits vorhandene Datei anzuhängen, muss
>> anstatt > auf den Befehl
folgen.
Da Sie nun bereits eine Reihe von Dateien und Verzeichnissen erzeugt haben,
möchten Sie vielleicht Archive erstellen und die Daten
komprimieren. Angenommen, Sie möchten das gesamte Verzeichnis
test in eine Datei packen, die Sie auf einem USB-Stick als
Sicherungskopie speichern oder per E-Mail versenden können. Verwenden Sie
hierzu den Befehl tar (für tape archiver
(Bandarchivierung)). Durch Eingabe von tar --help
können Sie alle Optionen für den Befehl tar
anzeigen. Die wichtigsten dieser Optionen werden im Folgenden erläutert:
(für create, erstellen) Ein neues Archiv erstellen.
(für table, Tabelle) Inhalt eines Archivs anzeigen.
(für extract, extrahieren) Das Archiv entpacken.
(für verbose, ausführlich) Alle Dateien auf dem Bildschirm anzeigen, während das Archiv erzeugt wird.
(für file, Datei) Wählen Sie einen Dateinamen für die Archivdatei. Beim Erstellen eines Archivs muss diese Option stets zuletzt angegeben werden.
Um das Verzeichnis test mit allen Dateien und
Unterverzeichnissen in ein Archiv mit dem Namen
testarchiv.tar zu packen, verwenden Sie die Optionen
-c und -f. Zu Testzwecken fügen Sie auch
-v hinzu, um den Fortschritt des Archivierens zu verfolgen,
obwohl diese Option nicht obligatorisch ist. Nachdem Sie cd
verwendet haben, um in das Home-Verzeichnis zu wechseln, in dem sich das
Verzeichnis test befindet, geben Sie tar -cvf
testarchiv.tar test ein. Zeigen Sie danach den Inhalt der Archivdatei
mit tar -tf testarchiv.tar an. Das Verzeichnis
test mit all seinen Dateien und Verzeichnissen befindet
sich immer noch unverändert auf der Festplatte. Um das Archiv zu
entpacken, geben Sie tar -xvf testarchiv.tar ein, aber
warten Sie damit noch einen Moment.
Für die Dateikomprimierung ist gzip die naheliegende
Wahl bzw. bzip2, wenn Sie ein besseres
Komprimierungsverhältnis erzielen wollen. Geben Sie einfach gzip testarchiv.tar (oder bzip2 testarchiv.tar ein; in diesem Beispiel wird jedoch gzip verwendet). Mit ls sehen Sie, dass die Datei testarchiv.tar nicht mehr vorhanden ist und dass die Datei testarchiv.tar.gz stattdessen erzeugt wurde. Diese Datei ist viel kleiner und daher besser geeignet für die Übertragung durch E-Mail oder für die Speicherung auf einem USB-Stick.
Entpacken Sie jetzt die Datei im zuvor erzeugten
test2-Verzeichnis. Geben Sie hierzu cp
testarchiv.tar.gz test2 ein, um die Datei in dieses Verzeichnis zu
kopieren. Wechseln Sie in das Verzeichnis mit cd test2. Ein
komprimiertes Archiv mit der Erweiterung .tar.gz kann
mit dem Befehl gunzip entzippt werden. Geben Sie gunzip testarchiv.tar.gz, ein.
Dadurch wird die Datei testarchiv.tar erzeugt, die mit
tar -xvf testarchiv.tar entpackt wird. Sie können ein
komprimiertes Archiv auch in einem Schritt mit tar -xvf
testarchiv.tar.gz entzippen und extrahieren (das Hinzufügen der Option -z ist nicht mehr erforderlich). Mit ls können Sie sehen, dass ein neues Verzeichnis test mit demselben Inhalt erzeugt wurde wie das Verzeichnis test im Home-Verzeichnis.
mtools ist ein Werkzeugsatz für die Arbeit mit MS-DOS-Dateisystemen. Die in mtools enthaltenen Befehle ermöglichen Ihnen die Adressierung des ersten Datenträgerlaufwerks als a:, wie unter MS-DOS und die Befehle entsprechen MS-DOS-Befehlen mit der Ausnahme, dass ihnen das Präfix m vorangestellt ist.
Zeigt den Inhalt des Datenträgers im Laufwerk a: an.
Kopiert die Datei Testdatei auf eine Diskette.
Löscht Testdatei in a:.
Formatiert die Diskette im MS-DOS-Format (mit dem Befehl fdformat).
Bewirkt, dass a: Ihr aktuelles Verzeichnis wird.
Erzeugt das Unterverzeichnis test auf einer Diskette.
Löscht das Unterverzeichnis test von der Diskette
Nach diesem Schnellkurs sind Sie mit den Grundlagen der Linux-Shell oder der Befehlszeile vertraut. Sie können das Home-Verzeichnis bereinigen, indem Sie die verschiedenen Testdateien und Verzeichnisse mit den Befehlen rm und rmdir löschen. Unter Abschnitt 27.3, „Wichtige Linux-Befehle“ finden Sie eine Liste der wichtigsten Befehle und eine kurze Beschreibung ihrer Funktionen.