Inhaltsverzeichnis
Linux-Kommandozeile
Die Kommandozeile (Terminal, Shell, CLI) ist das textbasierte Interface zur Steuerung von Linux-Systemen. Das Verständnis ihres Aufbaus ist grundlegend für die effektive Arbeit mit Linux.
Der Shell-Prompt
Der Prompt ist die Eingabeaufforderung der Shell und zeigt an, dass das System auf Eingaben wartet.
Typischer Aufbau
user@hostname:~/dokumente$
| Element | Bedeutung | Beispiel |
|---|---|---|
user | Angemeldeter Benutzername | root, admin, max |
@ | Trennsymbol | @ |
hostname | Name des Computers | server1, laptop, webserver |
: | Trennsymbol | : |
~/dokumente | Aktuelles Arbeitsverzeichnis | /, /var/www, ~ |
$ | Benutzer-Typ (User) | $ |
# | Benutzer-Typ (Root) | # |
Praktische Beispiele
# Normaler Benutzer im Home-Verzeichnis max@laptop:~$ # Normaler Benutzer in /var/log max@laptop:/var/log$ # Root-Benutzer im Home-Verzeichnis root@server:/root# # Root-Benutzer in /etc root@server:/etc# # Benutzer in tiefem Verzeichnis user@host:/usr/local/share/applications$ # Minimaler Prompt (nur Symbol) $ # Nur Verzeichnis ~/projects$
Prompt-Symbole und ihre Bedeutung
| Symbol | Bedeutung | Warnung |
|---|---|---|
$ | Normaler Benutzer | Standard-Rechte |
# | Root-Benutzer | Vorsicht! Volle Admin-Rechte |
~ | Home-Verzeichnis | /home/benutzername |
/ | Root-Verzeichnis | Wurzel des Dateisystems |
Wichtig: Das #-Symbol bedeutet, dass Sie als Root arbeiten und jeden Befehl ohne Rückfrage ausführen können - höchste Vorsicht!
Arbeitsverzeichnis im Prompt
Pfad-Darstellung
# Tilde (~) steht für das Home-Verzeichnis user@host:~$ # Ist in /home/user/ # Absoluter Pfad user@host:/var/www/html$ # Unterverzeichnis im Home user@host:~/projekte/python$ # Root-Verzeichnis user@host:/$
Pfad-Abkürzungen
| Symbol | Bedeutung | Expandiert zu |
|---|---|---|
~ | Home des aktuellen Users | /home/username |
~username | Home eines anderen Users | /home/username |
. | Aktuelles Verzeichnis | (aktueller Pfad) |
.. | Übergeordnetes Verzeichnis | (eine Ebene höher) |
/ | Root-Verzeichnis | / |
- | Vorheriges Verzeichnis | (letzter Pfad) |
Verzeichnis wechseln
# Ins Home-Verzeichnis cd ~ cd # Auch ohne ~ # Ein Verzeichnis hoch cd .. # Zwei Verzeichnisse hoch cd ../.. # Absoluter Pfad cd /var/log # Relativer Pfad cd dokumente/projekt1 # Zum vorherigen Verzeichnis cd - # Aktuelles Verzeichnis anzeigen pwd
Aufbau eines Kommandos
Ein vollständiger Befehl besteht aus mehreren Komponenten:
Grundstruktur
kommando [optionen] [argumente]
ls -la /home/user │ │ └─ Argument (Pfad) │ └─ Optionen (Flags) └─ Kommando
Komponenten im Detail
1. Kommando
Das Programm, das ausgeführt werden soll.
ls # Verzeichnis auflisten cd # Verzeichnis wechseln cat # Dateiinhalt anzeigen cp # Kopieren mv # Verschieben/Umbenennen rm # Löschen
2. Optionen (Flags)
Modifizieren das Verhalten des Kommandos.
# Kurze Form (ein Buchstabe) ls -l # Lange Listenform ls -a # Alle Dateien (auch versteckte) ls -h # Human-readable (lesbare Größen) # Kombiniert ls -lah # Alle drei Optionen zusammen # Lange Form (Wörter) ls --all # Entspricht -a ls --human-readable # Entspricht -h # Mit Wert tar -f datei.tar # -f erwartet Dateinamen grep -n "text" datei # -n für Zeilennummern
3. Argumente
Angaben, mit denen das Kommando arbeiten soll (Dateien, Verzeichnisse, Text).
cat datei.txt # datei.txt ist das Argument cp quelle.txt ziel.txt # Zwei Argumente mkdir neuer_ordner # neuer_ordner ist das Argument rm -rf /tmp/alt/* # /tmp/alt/* ist das Argument
Vollständige Beispiele
# Einfach: Nur Kommando pwd date uptime # Kommando + Argument cd /var/log cat datei.txt mkdir projektordner # Kommando + Option ls -l ps -a df -h # Kommando + Option + Argument ls -l /home cat -n datei.txt rm -r ordner/ # Kommando + mehrere Optionen + mehrere Argumente cp -rv /quelle/* /ziel/ tar -czvf backup.tar.gz /home /etc /var find /home -name "*.txt" -type f
Sonderzeichen in der Kommandozeile
Wichtige Sonderzeichen
| Zeichen | Name | Bedeutung | Beispiel |
|---|---|---|---|
$ | Dollar | Variablen, Prompt | echo $HOME |
# | Hash | Root-Prompt, Kommentar | # Dies ist ein Kommentar |
* | Stern | Wildcard (beliebig viele Zeichen) | ls *.txt |
? | Fragezeichen | Wildcard (ein Zeichen) | ls file?.txt |
~ | Tilde | Home-Verzeichnis | cd ~ |
. | Punkt | Aktuelles Verzeichnis, versteckte Dateien | .bashrc |
.. | Doppelpunkt | Übergeordnetes Verzeichnis | cd .. |
/ | Slash | Verzeichnistrenner, Root | /home/user |
\ | Backslash | Escape-Zeichen | echo \$HOME |
│ | Pipe | Ausgabe weiterleiten | ls │ grep txt |
> | Größer | Ausgabe umleiten | echo „test“ > datei.txt |
< | Kleiner | Eingabe umleiten | wc < datei.txt |
& | Ampersand | Im Hintergrund ausführen | command & |
; | Semikolon | Befehle trennen | cd /tmp; ls |
&& | Doppel-Ampersand | UND-Verknüpfung | mkdir dir && cd dir |
││ | Doppel-Pipe | ODER-Verknüpfung | command ││ echo „Fehler“ |
Wildcards (Platzhalter)
# Stern (*) - Beliebig viele Zeichen
ls *.txt # Alle .txt Dateien
rm /tmp/* # Alles in /tmp
cp *.jpg backup/ # Alle JPG-Dateien
# Fragezeichen (?) - Genau ein Zeichen
ls file?.txt # file1.txt, fileA.txt, aber nicht file10.txt
cp dokument?.pdf /backup/
# Eckige Klammern [] - Zeichen aus Liste
ls [abc]* # Dateien die mit a, b oder c beginnen
ls file[0-9].txt # file0.txt bis file9.txt
ls *[A-Z].txt # Dateien die mit Großbuchstaben enden
# Geschweifte Klammern {} - Alternativen
cp datei.{txt,pdf,doc} backup/
mkdir -p projekt/{src,bin,doc,test}
Mehrzeilige Befehle
Fortsetzungszeichen (Backslash)
# Langer Befehl auf mehrere Zeilen verteilen cp -r \ /sehr/langer/pfad/zu/quelle/* \ /sehr/langer/pfad/zu/ziel/ # Übersichtlicher bei vielen Optionen docker run \ --name container1 \ -p 8080:80 \ -v /host/path:/container/path \ -d \ nginx:latest
Der Prompt ändert sich zu > für Fortsetzungszeilen:
user@host:~$ echo "Dies ist ein \ > sehr langer \ > Text"
Befehlsketten
# Sequenziell (immer ausführen) command1 ; command2 ; command3 # Nur bei Erfolg (AND) command1 && command2 && command3 # Bei Fehler Alternative (OR) command1 || command2 # Kombiniert mkdir projekt && cd projekt && echo "Bereit" # Im Hintergrund command1 & command2 & wait # Auf beide warten
Prompt-Anpassung
Der Prompt kann individuell konfiguriert werden über die Variable PS1.
Standard-Prompt anzeigen
echo $PS1 # Typische Ausgabe: \u@\h:\w\$
Prompt-Variablen
| Variable | Bedeutung |
|---|---|
\u | Benutzername |
\h | Hostname (kurz) |
\H | Hostname (voll) |
\w | Aktueller Pfad (voll) |
\W | Aktueller Pfad (nur letzter Teil) |
\$ | $ für User, # für Root |
\t | Uhrzeit (HH:MM:SS) |
\d | Datum |
\n | Neue Zeile |
Prompt temporär ändern
# Einfacher Prompt PS1="$ " # Mit Benutzer PS1="\u $ " # Standard-Form PS1="\u@\h:\w\$ " # Mit Zeit PS1="[\t] \u@\h:\w\$ " # Zweizeilig PS1="\u@\h:\w\n\$ " # Farben (Grün für User) PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "
Prompt permanent ändern
In der Datei ~/.bashrc:
# Bearbeiten nano ~/.bashrc # Am Ende hinzufügen PS1="\u@\h:\w\$ " # Aktivieren source ~/.bashrc
Spezielle Prompt-Situationen
Verschiedene Prompt-Zustände
# Normaler Prompt user@host:~$ # Fortsetzungszeile (mehrzeiliger Befehl) user@host:~$ echo "Start > Fortsetzung > Ende" # Root-Shell root@host:~# # Subshell user@host:~$ bash user@host:~$ # Vi-Modus (wenn aktiviert) user@host:~$ # Einfüge-Modus user@host:~: # Kommando-Modus # Python-Interpreter user@host:~$ python3 >>> # MySQL-Konsole user@host:~$ mysql mysql>
Besondere Umgebungen
# SSH-Verbindung (oft anderer Hostname) user@remoteserver:~$ # Docker-Container root@containerid:/# # Chroot-Umgebung (chroot)root@host:/# # Screen/Tmux Session [0] user@host:~$ # Git-Branch im Prompt (mit Plugin) user@host:~/projekt (main)$
Best Practices
- Prompt beachten: Prüfen Sie immer
$vs#- Root-Rechte mit Vorsicht! - Aktuelles Verzeichnis:
pwdzeigt immer den vollständigen Pfad - Tab-Vervollständigung: Nutzen Sie TAB zur automatischen Vervollständigung
- Befehlshistorie: Pfeiltaste hoch/runter für vorherige Befehle
- Leerzeichen wichtig:
ls-lfunktioniert nicht,ls -lschon - Groß-/Kleinschreibung: Linux unterscheidet!
File.txt≠file.txt - Root sparsam nutzen: Nur wenn wirklich nötig mit
#-Prompt arbeiten
Häufige Prompt-Probleme
Problem: Kein Prompt sichtbar
# PS1 wurde gelöscht export PS1="\u@\h:\w\$ " # Oder Terminal neu starten exit
Problem: Falscher Pfad im Prompt
# Aktuellen Pfad prüfen pwd # Shell neu laden exec bash
Problem: Prompt zeigt falschen User
# Aktuellen User prüfen whoami id # Überprüfen ob in Subshell echo $SHLVL # > 1 bedeutet Subshell
Tastaturkürzel im Terminal
| Tastenkürzel | Aktion |
|---|---|
Strg + C | Laufenden Befehl abbrechen |
Strg + D | EOF senden, Terminal beenden |
Strg + L | Bildschirm löschen (wie clear) |
Strg + A | Zum Zeilenanfang |
Strg + E | Zum Zeilenende |
Strg + U | Zeile bis Cursor löschen |
Strg + K | Ab Cursor bis Zeilenende löschen |
Strg + W | Wort vor Cursor löschen |
Strg + R | Befehlshistorie durchsuchen |
Tab | Automatische Vervollständigung |
↑ / ↓ | Durch Befehlshistorie navigieren |
Siehe auch
Weiterführende Informationen
man bash man readline help cd info coreutils
