====== 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}}
----