Wer im Terminal flüssig arbeiten will, kommt um Tastenkürzel nicht herum. Sekunden, die du beim Tippen sparst, summieren sich über den Tag zu Stunden — und die Shell ist voll von kleinen Helfern, die dir genau das ermöglichen. Hinter den meisten Editing-Funktionen steckt Readline, die GNU-Library, die Bash, Zsh und viele andere Programme nutzen, um Eingaben komfortabel entgegenzunehmen.
Warum Shortcuts wichtig sind
Jede Shell-Eingabe ist im Grunde ein kleiner Editor. Statt eine fehlerhafte Zeile mit der Backspace-Taste Zeichen für Zeichen zurückzuverfolgen, kannst du mit einem einzigen Tastendruck an den Anfang springen, ein Wort löschen oder den letzten Befehl aus der History holen. Das ist nicht nur schneller — es macht das Arbeiten im Terminal deutlich angenehmer.
Die meisten dieser Funktionen kommen von GNU Readline. Readline ist die Library, die Bash, Zsh, der Python-Interpreter, psql, sqlite3 und viele weitere interaktive Programme zur Eingabeverarbeitung verwenden. Wer die Readline-Shortcuts kennt, profitiert deshalb nicht nur in der Shell, sondern überall, wo eine REPL läuft.
Die folgenden Abschnitte sind nach Aufgaben sortiert: Vervollständigung, History, Cursor-Bewegung, Suche und Edit-Modi. Du musst nicht alles auf einmal lernen — drei oder vier Shortcuts pro Woche reichen, um nach kurzer Zeit deutlich produktiver zu werden.
Tab-Completion
Die wichtigste Taste der Shell ist Tab. Sie vervollständigt eingegebene Befehle, Dateinamen, Pfade und vieles mehr — und erspart dir damit nicht nur Tipparbeit, sondern auch Tippfehler.
Einmal Tab vervollständigt einen eindeutigen Treffer direkt:
cd /etc/ssh<Tab>Wird dazu nichts Eindeutiges gefunden, passiert beim ersten Tab nichts. Zweimal Tab zeigt dann alle möglichen Treffer:
cd /etc/s<Tab><Tab>Tab-Completion funktioniert nicht nur für Dateien und Befehle. Sie kennt unter anderem:
- Befehlsnamen — alles, was im
PATHliegt, wird vervollständigt - Dateien und Verzeichnisse — relative und absolute Pfade
- Variablen —
echo $HO<Tab>ergänzt zu$HOME - Hostnamen —
ssh user@<Tab>schlägt Einträge aus~/.ssh/known_hostsund/etc/hostsvor - Optionen — mit installiertem
bash-completionwerden auch Befehlsoptionen vorgeschlagen, etwagit co<Tab>fürcommit,checkoutusw.
Hinter den Kulissen arbeitet die programmable completion. Über die Built-ins complete und compgen lassen sich eigene Vervollständigungsregeln definieren. Pakete wie bash-completion (Debian, Ubuntu, Fedora) bringen fertige Definitionen für hunderte Programme mit — von git über systemctl bis docker.
complete -pAuf den meisten Distributionen ist bash-completion standardmäßig installiert. Falls nicht, lohnt sich die Installation: sudo apt install bash-completion (Debian/Ubuntu) oder sudo dnf install bash-completion (Fedora).
History — die Suchmaschine deines Terminals
Jeder Befehl, den du eingibst, landet in der Shell-History. Standardmäßig speichert Bash die letzten 500 Einträge in ~/.bash_history, Zsh entsprechend in ~/.zsh_history. Wer die History nicht nur als Archiv, sondern als aktives Werkzeug nutzt, spart sich enorm viel Tipparbeit.
Mit Pfeil hoch und Pfeil runter scrollst du durch die letzten Befehle — schnell, aber unspezifisch. Effizienter ist die Rückwärtssuche:
Ctrl+RNach Ctrl+R tippst du einen Teil des gesuchten Befehls. Die Shell zeigt den jüngsten Treffer. Mehrfach Ctrl+R drücken springt zu älteren Treffern. Mit Enter führst du den Treffer aus, mit Pfeil rechts oder Esc übernimmst du ihn zur weiteren Bearbeitung. Ctrl+G bricht die Suche ab.
Die Vorwärtssuche Ctrl+S ist standardmäßig blockiert, weil das Terminal Ctrl+S als Software-Flow-Control (XOFF) interpretiert. Mit folgender Zeile schaltest du das ab:
stty -ixonDiese Zeile gehört in die ~/.bashrc, wenn die Einstellung dauerhaft sein soll.
Bash kennt darüber hinaus die sogenannten History-Expansions, die mit einem Ausrufezeichen beginnen:
| Ausdruck | Bedeutung |
|---|---|
!! | Letzter Befehl — beliebt in Kombination mit sudo: sudo !! |
!$ | Letztes Argument des letzten Befehls |
!* | Alle Argumente des letzten Befehls |
!:0 | Befehlsname (ohne Argumente) des letzten Befehls |
!42 | Befehl Nummer 42 aus der History |
!ssh | Letzter Befehl, der mit ssh beginnt |
!?text? | Letzter Befehl, der text irgendwo enthält |
^alt^neu | Quick-Substitute: führt den letzten Befehl mit alt durch neu ersetzt erneut aus |
Den Inhalt der History zeigt der Built-in:
historyWie viele Einträge gespeichert werden, steuert die Variable HISTSIZE (im RAM) bzw. HISTFILESIZE (auf der Platte). Mit HISTCONTROL=ignoredups:ignorespace werden Duplikate und Zeilen, die mit einem Leerzeichen beginnen, nicht aufgenommen — praktisch, um sensible Befehle wie Passwörter aus der History herauszuhalten.
Cursor-Bewegung und Zeilen-Edit
Die folgenden Shortcuts gelten im Standard-Modus (Emacs) der Readline. Sie funktionieren in jeder Shell, die Readline einbindet — also auch im Python-REPL, in psql oder node.
| Shortcut | Wirkung |
|---|---|
Ctrl+A | Cursor an den Anfang der Zeile |
Ctrl+E | Cursor ans Ende der Zeile |
Ctrl+B | Ein Zeichen zurück |
Ctrl+F | Ein Zeichen vor |
Alt+B | Ein Wort zurück |
Alt+F | Ein Wort vor |
Ctrl+U | Zeile vom Cursor bis zum Anfang löschen |
Ctrl+K | Zeile vom Cursor bis zum Ende löschen |
Ctrl+W | Wort links vom Cursor löschen |
Alt+D | Wort rechts vom Cursor löschen |
Ctrl+Y | Zuletzt Gelöschtes wieder einfügen (Yank) |
Ctrl+L | Bildschirm leeren (entspricht clear) |
Ctrl+T | Zeichen vor und am Cursor tauschen |
Alt+T | Wörter vor dem Cursor tauschen |
Alt+U | Wort ab Cursor in Großbuchstaben |
Alt+L | Wort ab Cursor in Kleinbuchstaben |
Alt+C | Wort ab Cursor mit Großbuchstaben am Anfang |
Besonders nützlich ist das Zusammenspiel von Ctrl+U, Ctrl+K und Ctrl+Y: Mit Ctrl+U löschst du den Anfang einer Zeile, tippst etwas anderes und holst dir den gelöschten Teil mit Ctrl+Y an einer anderen Stelle wieder zurück. So funktioniert ein Mini-Clipboard direkt in der Shell.
Auf macOS ist die Alt-Taste (Option) je nach Terminal-Emulator nicht standardmäßig als Meta-Taste gemappt. In iTerm2 lässt sich das unter Profile → Keys → „Left Option Key: Esc+" aktivieren. Im Apple Terminal entsprechend unter Einstellungen → Profile → Tastatur → „Use Option as Meta key".
Suchen, Abbrechen, Beenden
Neben der History-Suche gibt es eine Reihe von Tasten, die Eingaben oder laufende Prozesse steuern:
| Shortcut | Wirkung |
|---|---|
Ctrl+R | Rückwärtssuche in der History |
Ctrl+S | Vorwärtssuche (nach stty -ixon) |
Ctrl+G | Aktuelle Suche oder Eingabe abbrechen |
Ctrl+C | Laufenden Befehl abbrechen oder aktuelle Eingabe verwerfen |
Ctrl+D | EOF senden — in leerer Zeile beendet das die Shell |
Ctrl+Z | Aktuellen Job suspendieren (anhalten) |
Ctrl+Z hält ein laufendes Programm an, ohne es zu beenden. Mit fg holst du den Job in den Vordergrund zurück, mit bg läuft er im Hintergrund weiter. Eine Übersicht aller angehaltenen oder im Hintergrund laufenden Jobs liefert jobs. Diese Job-Control ist besonders praktisch, wenn du kurz aus einem Editor wie vim oder less heraus schauen willst, ohne ihn zu schließen.
Ctrl+C und Ctrl+D werden gerne verwechselt: Ctrl+C schickt ein Signal (SIGINT) und beendet das laufende Programm, während Ctrl+D lediglich das Eingabe-Ende signalisiert. Programme wie cat ohne Datei-Argument enden mit Ctrl+D regulär, aber bei einem laufenden ping muss es Ctrl+C sein.
Readline-Modi: Emacs vs. Vi
Readline kennt zwei Edit-Modi. Standardmäßig ist der Emacs-Modus aktiv — alle bisher gezeigten Shortcuts beziehen sich darauf. Wer aus dem Vim-Lager kommt, fühlt sich aber im Vi-Modus schneller zuhause.
set -o viDauerhaft setzt du das in der ~/.inputrc:
set editing-mode viIm Vi-Modus startet jede neue Eingabe im Insert-Mode. Mit Esc wechselst du in den Normal-Mode und kannst dort mit h, j, k, l navigieren, mit dw Wörter löschen, mit cc die Zeile ändern und so weiter — analog zu Vim. Mit i oder a geht es zurück in den Insert-Mode.
Zurück zum Emacs-Modus geht es mit set -o emacs bzw. dem Eintrag set editing-mode emacs in der ~/.inputrc.
~/.inputrc — Readline anpassen
Die Datei ~/.inputrc (systemweit /etc/inputrc) konfiguriert Readline. Hier definierst du eigene Tastenbindungen, schaltest case-insensitive Completion ein oder veränderst das Verhalten der Pfeiltasten.
# Pfeil hoch/runter durchsucht die History anhand des bereits Getippten
"\e[A": history-search-backward
"\e[B": history-search-forward
# Tab-Completion ohne Beachtung der Groß- und Kleinschreibung
set completion-ignore-case on
# Mehrdeutige Treffer beim ersten Tab anzeigen
set show-all-if-ambiguous on
# Farbige Markierung der Treffer im Completion-Menü
set colored-stats on
# Symbol-Suffixe wie / oder * an Treffer anhängen (analog ls -F)
set visible-stats onNach Änderungen liest die laufende Shell die Datei nicht automatisch neu. Mit Ctrl+X Ctrl+R lässt sich das während einer Session erzwingen, ansonsten reicht ein neues Terminal-Fenster.
Eine vollständige Liste aller Readline-Befehle und -Variablen findest du in der Bash-Manpage unter dem Abschnitt READLINE oder im offiziellen GNU-Readline-Handbuch.
Terminal-Emulator-Shortcuts
Wichtig zur Abgrenzung: Die folgenden Tastenkürzel kommen nicht von der Shell oder Readline, sondern vom Terminal-Emulator selbst. Sie funktionieren unabhängig davon, welches Programm gerade im Terminal läuft, sind dafür aber nicht überall einheitlich.
| Shortcut | Wirkung (in den meisten Linux-Terminals) |
|---|---|
Strg+Shift+C | Markierten Text in die Zwischenablage kopieren |
Strg+Shift+V | Aus der Zwischenablage einfügen |
Strg+Shift+T | Neuen Tab öffnen |
Strg+Shift+N | Neues Fenster öffnen |
Strg+Shift+W | Tab schließen |
Strg + + / Strg + - | Schrift vergrößern oder verkleinern |
F11 | Vollbild umschalten |
Auf macOS gelten stattdessen die üblichen Cmd-Kürzel: Cmd+C, Cmd+V, Cmd+T, Cmd+N. Welche Shortcuts in deinem Terminal greifen, lässt sich in den Einstellungen des Emulators (GNOME Terminal, Konsole, Alacritty, iTerm2, Windows Terminal) nachschlagen und in der Regel anpassen.
Pro-Tipps und versteckte Perlen
Alt+. holt das letzte Argument
Wer mkdir /tmp/projekt-x && cd !$ schreibt, kennt !$. Schneller geht es mit Alt+. (oder Esc .): Diese Tastenkombination fügt das letzte Argument des vorherigen Befehls an der Cursor-Position ein. Mehrfach gedrückt geht sie weiter zurück in der History. Ein Klassiker ist die Kombination mkdir lange-pfad-name gefolgt von cd Alt+. — schneller als jede Variable.
Ctrl+X Ctrl+E öffnet die Zeile im $EDITOR
Lange oder verschachtelte Befehle bearbeitet man besser im richtigen Editor. Ctrl+X Ctrl+E öffnet die aktuelle Eingabezeile in dem Editor, der in $EDITOR oder $VISUAL definiert ist. Beim Speichern und Verlassen des Editors wird der bearbeitete Befehl in der Shell ausgeführt. Besonders nützlich für mehrzeilige Heredocs oder komplexe awk-Aufrufe.
cd - springt zum vorherigen Verzeichnis
cd - wechselt in das zuletzt verlassene Verzeichnis und gibt dessen Pfad aus. Damit pendelst du komfortabel zwischen zwei Orten, ohne Pfade tippen zu müssen. Wer mehr braucht, nutzt pushd und popd für einen ganzen Verzeichnis-Stack — siehe Bash-Manpage.
!?suchmuster? findet History-Einträge nach Inhalt
Während !ssh den letzten Befehl liefert, der mit ssh beginnt, findet !?ssh? den letzten Befehl, der ssh irgendwo enthält. Praktisch, wenn man weiß, dass irgendwo eine bestimmte IP oder ein Hostname stand, der genaue Befehlsname aber entfallen ist.
bind -p zeigt alle aktiven Readline-Bindings
Wer wissen will, welche Taste welche Aktion auslöst, ruft bind -p auf. Die Ausgabe ist lang, lässt sich aber mit grep filtern: bind -p | grep history listet alle History-bezogenen Bindings. Mit bind -P gibt es eine etwas lesbarere Variante mit Beschreibungen.
HISTIGNORE hält die History sauber
Befehle wie ls, pwd oder clear verstopfen die History, ohne nützlich zu sein. Mit HISTIGNORE='ls:pwd:clear:history:exit' werden sie gar nicht erst gespeichert. In Kombination mit HISTCONTROL=ignoreboth (Duplikate und Zeilen mit führendem Leerzeichen ignorieren) bekommst du eine History, in der nur noch wirklich Relevantes steht.
Ctrl+X Ctrl+U macht Änderungen rückgängig
Innerhalb einer Eingabezeile lassen sich Bearbeitungen mit Ctrl+_ oder Ctrl+X Ctrl+U schrittweise zurücknehmen — eine Art Undo direkt in der Shell. Praktisch, wenn man versehentlich Ctrl+U gedrückt und damit die halbe Zeile gelöscht hat.
Weiterführende Ressourcen
Externe Quellen
- Bash-Manpage – READLINE-Sektion (man7.org) — Offizielle Referenz aller Readline-Befehle und -Variablen
- GNU Readline Manual — Vollständige Dokumentation der Command Line Editing Library
- Arch Wiki: Readline — Praxisnahe Tipps zu inputrc, Modi und Bindings
- Bash-Manpage – HISTORY-Sektion (man7.org) — Vollständige Dokumentation zu History-Expansion und -Variablen
Verwandte Artikel
- Linux Shell — Bash, Zsh und Grundlagen der Kommandozeile
- Linux Manpages — Hilfe direkt im Terminal
- Linux Variablen — Shell- und Umgebungsvariablen
- Terminal: Erste Schritte — Einstieg in die Kommandozeile
- Linux Globbing — Muster für Dateinamen