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:

Bash Tab vervollständigt eindeutige Treffer
cd /etc/ssh<Tab>

Wird dazu nichts Eindeutiges gefunden, passiert beim ersten Tab nichts. Zweimal Tab zeigt dann alle möglichen Treffer:

Bash Tab Tab listet alle Optionen
cd /etc/s<Tab><Tab>

Tab-Completion funktioniert nicht nur für Dateien und Befehle. Sie kennt unter anderem:

  • Befehlsnamen — alles, was im PATH liegt, wird vervollständigt
  • Dateien und Verzeichnisse — relative und absolute Pfade
  • Variablenecho $HO<Tab> ergänzt zu $HOME
  • Hostnamenssh user@<Tab> schlägt Einträge aus ~/.ssh/known_hosts und /etc/hosts vor
  • Optionen — mit installiertem bash-completion werden auch Befehlsoptionen vorgeschlagen, etwa git co<Tab> für commit, checkout usw.

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.

Bash Eigene Completion-Regeln auflisten
complete -p

Auf 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:

Bash Rückwärtssuche starten
Ctrl+R

Nach 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:

Bash Ctrl+S für die Shell freigeben
stty -ixon

Diese 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:

AusdruckBedeutung
!!Letzter Befehl — beliebt in Kombination mit sudo: sudo !!
!$Letztes Argument des letzten Befehls
!*Alle Argumente des letzten Befehls
!:0Befehlsname (ohne Argumente) des letzten Befehls
!42Befehl Nummer 42 aus der History
!sshLetzter Befehl, der mit ssh beginnt
!?text?Letzter Befehl, der text irgendwo enthält
^alt^neuQuick-Substitute: führt den letzten Befehl mit alt durch neu ersetzt erneut aus

Den Inhalt der History zeigt der Built-in:

Bash History anzeigen
history

Wie 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.

ShortcutWirkung
Ctrl+ACursor an den Anfang der Zeile
Ctrl+ECursor ans Ende der Zeile
Ctrl+BEin Zeichen zurück
Ctrl+FEin Zeichen vor
Alt+BEin Wort zurück
Alt+FEin Wort vor
Ctrl+UZeile vom Cursor bis zum Anfang löschen
Ctrl+KZeile vom Cursor bis zum Ende löschen
Ctrl+WWort links vom Cursor löschen
Alt+DWort rechts vom Cursor löschen
Ctrl+YZuletzt Gelöschtes wieder einfügen (Yank)
Ctrl+LBildschirm leeren (entspricht clear)
Ctrl+TZeichen vor und am Cursor tauschen
Alt+TWörter vor dem Cursor tauschen
Alt+UWort ab Cursor in Großbuchstaben
Alt+LWort ab Cursor in Kleinbuchstaben
Alt+CWort 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:

ShortcutWirkung
Ctrl+RRückwärtssuche in der History
Ctrl+SVorwärtssuche (nach stty -ixon)
Ctrl+GAktuelle Suche oder Eingabe abbrechen
Ctrl+CLaufenden Befehl abbrechen oder aktuelle Eingabe verwerfen
Ctrl+DEOF senden — in leerer Zeile beendet das die Shell
Ctrl+ZAktuellen 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.

Bash Vi-Modus für die laufende Session aktivieren
set -o vi

Dauerhaft setzt du das in der ~/.inputrc:

Bash ~/.inputrc – Vi-Modus dauerhaft
set editing-mode vi

Im 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.

Bash ~/.inputrc – sinnvolle Defaults
# 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 on

Nach Ä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.

ShortcutWirkung (in den meisten Linux-Terminals)
Strg+Shift+CMarkierten Text in die Zwischenablage kopieren
Strg+Shift+VAus der Zwischenablage einfügen
Strg+Shift+TNeuen Tab öffnen
Strg+Shift+NNeues Fenster öffnen
Strg+Shift+WTab schließen
Strg + + / Strg + -Schrift vergrößern oder verkleinern
F11Vollbild 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

/ Weiter

Zurück zu Grundlagen

Zur Übersicht