Grundlagen des Linux Terminals - AlmaBonn/programming GitHub Wiki
Hier stellen wir einige Grundlagen zur Verwendung des Terminals vor.
Erste Erklärung
Ein Terminal ist das interaktive Textfenster, das man direkt nach dem Einloggen
sieht. Möglicherweise sieht man nach dem Einloggen auch zunächst einen leeren
Desktop, dann kann man über das Kontextmenü oder ein Symbol ein Terminal
starten. Das Terminal an sich ist ein Programm, das Eingaben (durch die
Tastatur) und Ausgaben (zum Bildschirm) eines zweiten Programms durch das
Betriebssystem leitet (und bei manchen Anwendungen auch über das Netzwerk, so
daß Computer aus der Ferne gesteuert werden können). In unserem Fall ist das
zweite Programm eine sogenannte "Shell," meistens die bash. Mit dieser
interagieren wir in der Praxis des Programmierens fast ausschließlich.
Die Shell erwartet Eingaben des Nutzers (also Ihre) über die Tastatur. Wenn
man also ein oder mehrere Worte tippt und dann die Entertaste drückt (die große
mit dem eckigen Pfeil nach links), interpretiert die Shell das erste Wort als
Programm und die weiteren als Argumente, die diesem Programm übergeben werden
sollen. Argumente haben oft die spezielle Form -a oder --bcd und werden
vom Programm als spezielle Schalter interpretiert. Jedes Programm macht das
anders; idealerweise steht die Konvention auf seiner man-Page (s. u.). Die
Shell sucht dann das Programm dieses Namens im Dateisystem und führt es aus.
-
Wenn man wissen möchte, wo im Dateisystem die Shell ein bestimmtes Programm findet, tippt man z. B.
which python. -
Ein wichtiges Programm ist zum Beispiel
man. Es greift auf eine Datenbank an Hilfen zu den meisten Programmen zu und zeigt diese an. Das gesuchte Programm ist als Argument anzugeben. Probieren Sie also einmalman man, oderman bash. Man verläßt den Hilfeviewer mit der Tasteq. -
Ein weiteres Programm ist
echo. Es gibt alle Argumente auf den Bildschirm aus, probieren Sieecho abc. -
Ein Pager zeigt eine Datei am Bildschirm an und ermöglicht das Scrollen und Suchen darin. Ein beliebter Pager ist
less, der z. B. implizit vonmanaufgerufen wird. Probieren Sie einmalfind . find /usr/share/doc | lessNavigieren Sie per Tastatur und quittieren sie den Pager wieder mit
q.
Die Shell versteht tatsächlich eine ganze Programmiersprache, da ist ein Programmaufruf nur ein Spezialfall. Variablen werden ohne Leerzeichen gesetzt. Leerzeichen können mit Anführungszeichen zum Teil eines Wortes gemacht werden. Ein Kommando in backtics wird ausgeführt und dessen Ergebnis an Ort und Stelle eingesetzt. Versuchen Sie, die Ergebnisse folgender Sitzung zu verstehen:
ABC="eine Variable mit Leerzeichen"
echo $ABC
echo "$ABC"
DEF=`echo $ABC`
echo $DEF
echo "$DEF"
GHI=`echo "$ABC"`
echo $GHI
echo "$GHI"
Der Kern der Erkenntnis ist der, daß "a b c" ein einzelnes Wort bleibt und daher auch ein einzelnes Argument. Die Leerzeichen zwischen Worten werden als Trenner registriert und dann sofort vergessen.
Die Shell kann weiterhin die Ausgabe eines Programms direkt als Eingabe eines zweiten verwenden. Der Aufruf 'wc -w' zählt beispielsweise Worte, was macht also:
echo $ABC | wc -w
Dies soll nur der Anfang sein. Es gibt sehr viele sehr gute Dokumente zur Unix-Shell. Eine gute Übersicht zu diesem Thema gibt es auch in den Abschnitten 1-4 sowie der Sektion Wichtige Tipps für den Anfang in dieser Anleitung.
Erste Schritte
Ordnerstruktur
-
Öffnen Sie ein Terminal mit der Tastenkombination
Strg + Alt + T, über ein Icon oder über die Suchfunktion des Anwendungsmenüs. -
Zunächst können Sie zur Orientierung als ersten Befehl
lsin das Terminal eingeben und mit Enter bestätigen. Dieser Befehl listet alle Dateien auf, die sich im aktuellen Ordner befinden. Wann immer Sie auf einen Befehl stoßen, dessen Funktionsweise Sie nicht kennen, können Sie sich mit dem Befehl
maneine Übersicht angeben lassen. In diesem Fall geben Sie alsoman lsein. Unter anderem listet
manalle Parameter auf, mit denen manlskonfigurieren kann. Zum Beispiel gibt es die Option die Dateien nach ihrem letzten Änderungsdatum zu sortieren. Nebenmanist auch die help-Option nützlich, die Sie mitBEFEHL --help, also zum Beispiells --helpaufrufen können. Der Buchstabeqschließt den Hilfeviewer. Eine gängige Konfiguration vonlssind die Optionenls -l -a -Fdie oft mit
llzu einem eigenen Befehl definiert werden. Dieser Befehl liefert eine Liste, die neben den Dateinamen auch das Datum der letzten Änderung, die Dateigröße und die Zugriffsrechte anzeigt. Für weitere Informationen zu Zugriffsrechten verweisen wir auf diese Anleitung.
Wer mag, definiert sich eigene Befehle mit z. B.
alias lt="ls -ltr"Der Befehl
aliasist kein Programm, sondern in die bash eingebaut. Dies läßt sich nachlesen, indem nachman bashmit/aliasund Enter eine Suche gestartet wird. Durch folgende und vorherige Fundstellen iteriert man mitnundN. -
Mit dem Befehl
pwdwird der absolute Pfad des Ordners ausgegeben, in welchem Sie sich aktuell befinden.
-
Um den Ordner zu wechseln gibt es den
cdBefehl. Wählen Sie einen der Ordner, der Ihnen mitlsangezeigt wird (Ordner-Namen enden im Unterschied zu Dateinamen in einem/), z.B.Downloads. Um nun in den Downloads-Ordner zu wechseln kann der Befehlcd Downloadsverwendet werden. Die geänderte Position spiegelt sich auch darin wieder, dass
pwdnun eine andere Ausgabe liefert. Um zum Ursprungsordner zurückzukehren können Sie nun den Befehlcd ..verwenden. Die Punkte sind unter Unix keine Syntax sondern echte Dateien (in diesem Fall Verzeichnisse),
.ist das aktuelle und..das nächsthöhere. -
Erstellen Sie als nächstes einen neuen Ordner namens example-directory mit
mkdir example-directoryWechseln Sie mit
cdin den Ordner. -
Legen Sie in dem Ordner eine neue Datei namens example-file.txt an. Dafür öffnen Sie diese einfach mit einem Texteditor, zum Beispiel mit
nano example-file.txtoder
vim example-file.txtZum Bearbeiten verweisen wir auf die Nano-Anleitung und die vim-Anleitung sowie den Kommandozeilenbefehl
vimtutor. Währendvimder umfassendere Editor ist, istnanoeinsteigerfreundlicher. Die anfängliche Mühe beim Lernen eines Editors amortisiert sich bei regelmäßiger Nutzung innerhalb von Tagen. Wenn Sie invimper Tastenkombination und auswendig ein beliebiges Rechteck markieren, löschen und einfügen können, haben Sie es geschafft.Wenn es nur um das Anzeigen von (Text-)Dateien geht, können Sie auch einen sogenannten Pager statt eine Editor verwenden. Ein solches Programm ist zum Beispiel
less. Es hat den Vorteil, dass große Dateien nicht komplett in den Speicher geladen werden. Sie finden perman lessoder in dieser deutschen Erklärung mehr Informationen zuless. -
Benennen Sie die Datei nun in file-with-a-new-name.txt um. Dafür verwenden Sie
mv example-file.txt file-with-a-new-name.txtMit dem gleichen Befehl können Sie auch Ordner umbenennen oder sogar an andere Stellen verschieben.
-
Löschen Sie die Datei mit dem Befehl
rm file-with-a-new-name.txt
[!CAUTION] Der im folgenden beschriebene Befehl zum Löschen von Ordnern sollte nur in Kombination mit einem validen Ordner-Namen und mit Vorsicht genutzt werden. Der Befehl
rm -rf /kann zum Beispiel je nach vorhandenen Berechtigungen unwiderruflich das gesamte Dateisystem löschen.
Anschließend können Sie wieder in den Ursprungsordner zurückkehren und auch den neu erstellten Ordner example-directory mit
rm -r example-directory
löschen.
-
Wenn wir Dateien suchen, können wir den Befehl
findverwenden. Wir legen uns hierfür einen kleinen Übungsordner an:mkdir -p find-playground/{docs,logs} touch find-playground/docs/readme.txt \ find-playground/docs/todo.txt \ find-playground/logs/app.logwobei
-pes uns ermöglicht das Eltern-Verzeichnis automatisch mitzuerstellen – nutzen Siemkdir --help, um mehr über die Option-pzu erfahren. Außerdem ist{docs,logs}eine sogenannte brace expression. Sie lässt die Shell zwei Aufrufe mitfind-playground/docsundfind-playground/logserzeugen. Den Befehltouchnutzen wir hier, um leere Dateien zu erstellen. Schauen Sie sich den Befehl gerne mitman touchgenauer an.Nun können wir
findin unserem Übungsordner verwenden.a) Alle
.txt-Dateien unterhalb vonfind-playgroundauflisten:find find-playground -type f -name "*.txt"wobei
-type fnur nötig ist, wenn Sie die Ergebnisse auf reguläre Dateien beschränken möchte. Das heißt zum Beispiele keine Verlinkungen (symlink) oder Verzeichnisse in den Suchresultaten zu haben. Wenn Sie mehr Suchresultate nicht stören oder Sie sich sicher sind, mit dem Suchmuster nur reguläre Dateien zu finden, ist die Option nicht nötig. In unserem Beispiel macht diese Option keinen Unterschied.b) Dateien der letzten 5 Minuten finden:
find find-playground -type f -mmin -5c) Aufräumen:
rm -r find-playgroundEs gibt noch deutlich mehr Optionen und Funktionalitäten von
find. Hierfür können Sie sichman findoder auch diese deutsche Erklärung anschauen.
Tips und Tricks
-
Um lange Befehle nicht mehrmals eingeben zu müssen, kann man mit den Pfeiltasten auch die zuletzt genutzten Befehle durchsuchen (Pfeiltaste nach oben für den nächstälteren und nach unten für den nächstjüngeren Befehl) und erneut mit Enter bestätigen.
Für Befehle, die schon etwas länger zurückliegen, bietet sich die Rückwärtssuche mit
Strg + Ran. -
Um lange Namen, zum Beispiel von Ordnern oder Dateien, nicht aufwendig und vor allem fehlerfrei abtippen zu müssen, kann die Autovervollständigung mit
Tabverwendet werden, siehe Anleitung. Gibt es also in einem Ordner nur den Unterordner Downloads und den Unterordner Programme, reicht statt der Eingabecd Downloadsauch die Eingabecd Dgefolgt vonTab, da sich der restliche Name eindeutig erschließt.Ist es bei der Eingabe nicht eindeutig, welcher Ordner gemeint ist listet
Tab Taballe Ordner auf, die in Frage kommen (ähnlich zumlsBefehl). -
Um im Terminal langes hochscrollen zu vermeiden, können Sie auch mit der Tastenkombination
Shift + PageUpsukzessive durch den Terminalverlauf durchgehen. Ähnlich praktische Befehle gibt es für den Texteditorvim. Mitzzzentriert man das Fenster um die aktuelle Zeile. Analog sorgenzb/ztdafür, dass das Fenster so verschoben wird, dass die aktuelle Zeile am unteren/oberen Ende des Fensters gezeigt wird. -
Mit der Maus kann man beliebigen Text markieren und direkt am Ort des Mauszeigers mit der Mitteltaste pasten. Ein Umständliches
Ctrl-Vetc. ist nicht nötig, funktioniert aber mit separatem Textpuffer auch. Wenn der Editor dies blockiert, kann man das freischalten, invimz. B. mit:set mouse=.
Die Manual Page
Wir schauen uns nun die manual page des Programms ls etwas genauer an, um an einem
Beispiel zu sehen, wie wir passende Optionen finden und verstehen können.
Rufen Sie man ls auf. Das erste Ziel ist es nun, Programmoptionen zu finden,
die eine umgekehrte Sortierung nach Zeitstempel (Änderungsdatum) bieten.
Nutzen Sie hierfür die Möglichkeit, in der manual page nach der Zeichenfolge
by time zu suchen, indem Sie
/time
eingeben und mit Enter bestätigen. Hierbei hat / die Funktion, in den
Suchmodus zu kommen. Die folgenden/verherigen Suchtreffer springen Sie mit den Tasten n
und N an. Sie können auch direkt nach /by time suchen.
Wenn Sie die Option für das Sortieren nach den Zeitstempeln gefunden haben, können Sie nun per
/reverse
nach der Option suchen, um die Sortierungsreihenfolge umzukehren.
Probieren Sie den gefundenen Befehl einmal aus. In welcher Reihenfolge zeigt
ls die Resultate ohne die übergebenen Optionen an? Sie können für diese Frage
auch wieder auf man ls nachschauen.
Mithilfe der manual page von ls können Sie nun auch herausfinden, was jeweils
die einzelnen Optionen in dem oben erwähnten ls -l -a -F bedeuten.