====== 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**: ''pwd'' zeigt 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-l'' funktioniert nicht, ''ls -l'' schon * **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 ===== * [[sammlung:cli_prompt_io_error|CLI Prompt: Eingabe, Ausgabe und Fehlerbehandlung]] * [[sammlung:bash_kommandos|Bash Kommandos]] * [[sammlung:bash_profile_bashrc|Bash Profile und Bashrc]] * [[sammlung:terminal|Terminal]] * [[sammlung:tastenkuerzel|Tastenkürzel]] ===== Weiterführende Informationen ===== man bash man readline help cd info coreutils ---- {{tag>cli topic basics}} ----