Aliase in der Shell: Effizienz steigern und Fehler vermeiden
Ein Alias ersetzt das erste Wort einer Kommandozeile, bevor die Shell sie ausführt. Der Artikel zeigt, wie Aliase in Bash und Zsh angelegt, in ~/.bashrc oder ~/.zshrc dauerhaft gespeichert und wieder entfernt werden, warum sie in Skripten ohne expand_aliases nicht greifen, keine Argumente annehmen und wann stattdessen eine Shell-Funktion die bessere Wahl ist.
Wer viel in der Shell arbeitet, tippt dieselben Befehle immer wieder. git status, ls -l, cd ... Ein Alias macht daraus eine Abkürzung und nimmt die Tippfehler gleich mit.
Dieser Artikel zeigt, wie du Aliase anlegst, dauerhaft speicherst und wieder loswirst. Er zeigt auch die beiden Stellen, an denen Aliase regelmäßig nicht das tun, was man erwartet: in Skripten und dann, wenn ein Argument mitten in den Befehl soll. Nachgestellt sind die Beispiele mit Bash 5.2.21 unter Ubuntu 24.04; die aktuelle Fassung ist Bash 5.3 vom 30. Juli 2025. In Zsh gilt bis auf die genannten Unterschiede dasselbe.
Was ist ein Alias in der Shell?
Ein Alias ist ein Kurzname für einen Befehl. Die Shell ersetzt ihn beim Einlesen der Zeile durch den hinterlegten Text und führt erst danach aus, was dabei herauskommt. Das Bash-Handbuch sagt es in einem Satz: „Aliases are expanded when a command is read, not when it is executed“. Aus diesem Satz folgt fast alles, was weiter unten noch kommt.
Ersetzt wird nur das erste Wort einer Kommandozeile. ll am Zeilenanfang wird expandiert, echo ll nicht. Was du hinten anhängst, bleibt unangetastet und landet hinter der Ersetzung.
Daraus folgt ein bekannter Stolperstein: sudo ll greift nicht, denn dort ist ll nicht das erste Wort. Das Handbuch nennt auch die Abhilfe: „If the last character of the alias value is a blank, then the shell checks the next command word following the alias for alias expansion.“ Ein alias sudo='sudo ' mit Leerzeichen am Ende macht sudo ll also doch möglich. Wie sudo überhaupt eingerichtet wird, steht in Sudo auf Debian installieren und nutzen.
Definition und Zweck
Der Zweck ist schlicht: weniger tippen, weniger vertippen. Statt ls -la genügt ll, statt git status genügt gs. Die Argumente wandern dabei mit. Aus ll /etc wird ls -la /etc. Ein Alias ist damit näher an einer Textersetzung als an einem eigenen Programm.
Vorteile der Verwendung von Aliases
Der Gewinn liegt an drei Stellen. Du tippst kürzer. Du vertippst dich seltener, weil die lange Form genau einmal geschrieben wurde und danach feststeht. Und die Zeile wird lesbarer, weil gs den Zweck schneller zeigt als eine Kette aus Optionen.
Das gilt nicht überall. Ein Alias, den nur du kennst, macht deine Zeile für alle anderen unlesbar, und auf einem fremden Server ist er ohnehin nicht da. In Dokumentation und in Skripten gehört deshalb die Langform hin.
Beispiele für nützliche Aliase
Gängig sind ll für ls -l und gs für git status. Interessanter sind die Aliase, die zu deiner eigenen Arbeit passen. Wer ständig im selben Projektordner landet, legt alias cdproj='cd ~/Projekte' an. Wer regelmäßig nachsieht, welche Dienste auf dem Rechner lauschen, kürzt den Aufruf aus Genutzte Ports in Linux anzeigen ab. Der Wert eines Alias hängt nicht an seiner Cleverness, sondern daran, wie oft du ihn tatsächlich benutzt.
Aliase im Linux- und Mac-Terminal anlegen
Ein Alias ist eine einzige Zeile. Sie wirkt sofort, aber zunächst nur in der Shell, in der du sie eingegeben hast. Damit sie den Tag überlebt, muss sie in eine Startdatei.
Syntax zum Erstellen eines Alias
Die Schreibweise ist in POSIX.1-2024 festgelegt, der Issue 8 der Base Specifications, und verhält sich in Bash und Zsh gleich:
alias name='Befehl'
name ist die Abkürzung, Befehl der Text, der dafür eingesetzt wird. Um das Gleichheitszeichen darf kein Leerzeichen stehen. Ein Beispiel:
alias ll='ls -l'
Die Anführungszeichen sind kein Ritual. Gebraucht werden sie, sobald der Befehl ein Leerzeichen oder ein Sonderzeichen enthält, denn sonst liest die Shell alles ab dem Leerzeichen als weiteres Argument von alias. alias ll=ls funktioniert deshalb auch ohne sie, alias ll=ls -l nicht.
Einfache Anführungszeichen sind die sichere Wahl. In doppelten wertet die Shell $ und Backticks bereits beim Anlegen aus, nicht erst beim Aufruf. Wer alias pwd2="echo $PWD" schreibt, friert damit das Verzeichnis von damals ein.
Drei Handgriffe lohnen sich direkt danach:
aliasohne Argument listet alles auf, was gerade gesetzt ist.type llsagt, obllein Alias, eine Funktion oder ein echtes Programm ist. Das ist der schnellste Weg, einen Namenskonflikt zu finden, bevor er dich in einem unpassenden Moment überrascht.Leerzeichen im Aliasnamen gehen nicht.
Temporäre und permanente Aliase
Ein Alias, den du in die laufende Shell tippst, überlebt das Fenster nicht. Beim nächsten Start ist er weg. Dauerhaft wird er erst in einer Startdatei, und welche das ist, hängt von der Shell ab.
Bash liest ~/.bashrc bei interaktiven Shells ohne Login. Startet dein Terminal dagegen eine Login-Shell, ist ~/.bash_profile die Datei, die gelesen wird; die üblichen Vorlagen laden von dort aus ~/.bashrc nach. Zsh liest ~/.zshrc. Auf dem Mac ist Zsh seit macOS 10.15 die Vorgabe für neu angelegte Benutzer (Apple-Support), dort ist ~/.zshrc also die richtige Adresse. Wer die Zeile in die falsche Datei schreibt, sucht danach lange nach einem Fehler, den es gar nicht gibt.
Nach dem Bearbeiten wird die Datei entweder durch ein neues Terminal oder von Hand eingelesen:
source ~/.bashrc
Danach steht der Alias in jeder neuen Sitzung bereit. Ein Nachteil bleibt: Die Startdatei wächst. Wer mehr als eine Handvoll Aliase sammelt, legt sie besser in eine eigene Datei und lädt sie von dort nach. Ubuntu bringt diesen Haken bereits mit; in /etc/skel/.bashrc unter Ubuntu 24.04 steht:
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Wo Aliase nicht greifen
Zwei Grenzen führen immer wieder zu Rückfragen. Beide stehen so im Bash-Handbuch, und beide folgen aus dem Satz vom Anfang.
In Skripten werden Aliase nicht ersetzt. „Aliases are not expanded when the shell is not interactive, unless the expand_aliases shell option is set using shopt“. Ein Skript, das ll aufruft, bricht deshalb mit command not found ab, obwohl der Alias in deiner .bashrc steht und im Terminal einwandfrei läuft. Einschalten lässt sich die Ersetzung so:
shopt -s expand_aliases
source ~/.bash_aliases
Die Reihenfolge ist dabei nicht egal. Weil Aliase beim Einlesen ersetzt werden, muss der Alias bekannt sein, bevor die Zeile gelesen wird, die ihn benutzt. „Alias setzen und in derselben Zeile aufrufen“ scheitert zuverlässig.
Argumente kann ein Alias nicht entgegennehmen. Das Handbuch ist eindeutig: „There is no mechanism for using arguments in the replacement text, as in csh. If arguments are needed, use a shell function instead.“ Angehängtes landet hinten, mittendrin geht nicht. Sobald ein Wert an eine feste Stelle muss, ist eine Funktion fällig.
Verwaltung und Anpassung von Aliasen
Aliase altern. Projekte wechseln, Werkzeuge werden ersetzt, und irgendwann steht in der .zshrc eine Abkürzung für einen Befehl, den es auf diesem Rechner nicht mehr gibt. Bearbeiten und Löschen gehen beide schnell.
Bearbeiten bestehender Aliase
Einen Alias bearbeitest du, indem du ihn neu definierst. Die alte Definition wird dabei kommentarlos überschrieben, eine Warnung gibt es nicht. Aus ll für ls -l wird so ll für ls -la:
alias ll='ls -la'
In der laufenden Sitzung gilt die neue Fassung sofort. Dauerhaft wird sie erst, wenn du auch die Zeile in der Startdatei änderst. Wer das vergisst, wundert sich beim nächsten Terminal über den alten Stand. Ein kurzer Kommentar über jeder Alias-Zeile in der Startdatei kostet wenig und beantwortet später die Frage, warum es diesen Alias überhaupt gibt.
Löschen von Aliasen
Ein einzelner Alias verschwindet mit unalias ll, alle auf einmal mit unalias -a. Beides wirkt nur in der laufenden Sitzung.
Steht der Alias zusätzlich in ~/.bashrc oder ~/.zshrc, ist er beim nächsten Start wieder da. Dort muss die Zeile gelöscht werden, sonst kommt sie zurück. Das ist kein Fehler, sondern genau der Unterschied zwischen temporär und permanent.
Best Practices für die Nutzung von Aliasen
Ein Alias, den du später selbst nicht mehr einordnen kannst, hat seinen Zweck verfehlt. Drei Gewohnheiten verhindern das.
Nützliche Namenskonventionen
Ein guter Aliasname ist kurz und trotzdem erkennbar. gs für git status ist beides, x7 ist nur kurz. Bewährt hat sich ein gemeinsamer Anfangsbuchstabe je Werkzeug: gs, gc und gp für Git, ds und dc für Docker. Das spart Tipparbeit und macht die Liste durchsuchbar, denn alias | grep "^alias g" zeigt danach alle Abkürzungen, die mit g anfangen.
Eine Warnung gehört dazu. Ein Alias darf denselben Namen tragen wie ein vorhandenes Programm und verdeckt es dann. Manchmal ist das gewollt, manchmal ein Unfall. type name vor dem Anlegen zeigt, ob der Name schon belegt ist.
Dokumentation der Aliase
Aliase sind Konfiguration, und Konfiguration ohne Kommentar ist nach einem halben Jahr fremder Code. Ein Satz über jeder Zeile genügt. Wer seine Aliase auf mehreren Rechnern benutzt, legt die Datei in ein Repository; dann ist auch nachvollziehbar, wann welche Abkürzung dazukam und warum. alias ohne Argument bleibt daneben der schnellste Überblick über das, was gerade wirklich gesetzt ist.
Funktionen statt Aliase
Sobald ein Argument an eine bestimmte Stelle muss, ist der Alias am Ende. Eine Funktion kann das, und sie steht in derselben Datei:
mkcd() {
mkdir -p "$1" && cd "$1"
}
Funktionen werden genauso geladen wie Aliase und kennen zusätzlich Parameter und Rückgabewerte. Anders als Aliase gelten sie auch in Skripten, ohne dass expand_aliases gesetzt sein muss. Die Faustregel: Wird nur ein Wort ersetzt, ist es ein Alias. Kommt Logik dazu, ist es eine Funktion.
Häufige Fehler bei der Verwendung von Aliasen
Drei Fehler tauchen immer wieder auf. Die ersten beiden merkst du früh. Der dritte fällt manchmal erst auf einem fremden Rechner auf, und das macht ihn unangenehm.
Falsche Syntax
Die Struktur name=Wert ist streng. Kein Leerzeichen um das Gleichheitszeichen, und Anführungszeichen, sobald der Wert selbst eines enthält:
alias name='Befehl'
Diese Zeile dagegen tut nicht, was sie soll:
alias ll=ls -l
Sie scheitert nicht still. Bash meldet alias: -l: not found, weil es -l als zweiten Namen liest, den es nachschlagen soll. Gleichzeitig legt es ll an, allerdings nur für ls ohne Option. Genau das macht den Fall tückisch: Es gibt eine Fehlermeldung, und trotzdem existiert hinterher ein Alias, nur der falsche.
Wir haben das für diesen Artikel nachgestellt. alias ll zeigt danach alias ll='ls', ohne -l. Ein Blick darauf nach jedem neuen Alias erspart die spätere Suche.
Übermäßiger Gebrauch von Aliasen
Eine lange Aliasliste benutzt sich nie ganz. Der ungenutzte Rest liegt in der Startdatei und stiftet beim nächsten Durchsehen Verwirrung. Lege einen Alias erst an, wenn dich der lange Befehl zum zweiten oder dritten Mal geärgert hat.
Dazu gehört das Aufräumen. Arbeitsabläufe ändern sich, und ein Alias für ein Werkzeug, das du nicht mehr benutzt, ist Ballast. Wer die Datei im Repository hat, sieht beim nächsten Durchsehen schnell, welche Zeilen seit Jahren unverändert und ungenutzt dort stehen.
Wenn ein Alias ein echtes Kommando verdeckt
Ein Alias darf heißen wie ein vorhandenes Programm. alias rm='rm -i' ist ein beliebtes Beispiel: Danach fragt rm vor jedem Löschen nach. Das ist bequem, bis du dich daran gewöhnst. Auf einem Server ohne diesen Alias fragt rm nämlich nicht, und die Gewohnheit arbeitet dann gegen dich.
Für den Einzelfall gibt es zwei Auswege, die den Alias nicht anfassen. Ein vorangestellter Backslash umgeht ihn: \rm datei ruft das echte rm auf. command rm datei tut dasselbe. Und type rm sagt dir vorher, woran du gerade bist.
Fazit
Ein Alias ist eine Zeile in einer Textdatei, mehr braucht es nicht. Die Shell ersetzt das erste Wort beim Einlesen und lässt den Rest in Ruhe. Daraus folgt alles Weitere: keine Argumente mittendrin, keine Wirkung in Skripten ohne expand_aliases, keine Überraschung bei angehängten Optionen.
Wer anfängt, nimmt sich zwei oder drei Befehle vor, die ihn am häufigsten stören, schreibt die Abkürzungen in ~/.bashrc oder ~/.zshrc und sieht nach ein paar Wochen nach, welche davon er wirklich benutzt. Was übrig bleibt, bleibt. Der Rest fliegt raus.
Zum Weiterlesen: die Alias-Seite des Bash-Handbuchs und die POSIX-Spezifikation zu alias als Primärquellen, dazu Ubuntuusers: alias, IBM: Creating a Command Alias, Pro-Linux: Der Shell-Befehl alias von 2001, Computerworld: How to Use Aliases in Linux Shell Commands von 2012 und IONOS: Linux Alias Befehl.