Linux
Befehle für DevOps — von den Grundlagen bis Kubernetes.
Beispiele für Bash unter Linux. Ersetze Platzhalter wie FILE, USER und NAMESPACE durch deine Werte. Manche Werkzeuge müssen zuerst installiert werden; apt und dnf gehören zu unterschiedlichen Distributionen. Die Zeilen sind einzelne Beispiele, kein Skript zum vollständigen Ausführen.
433 Befehlsbeispiele
Keine passenden Befehle. Versuche einen anderen Suchbegriff oder wähle alle Themen.
Hilfe und Befehle finden
| Befehl | Erklärung |
|---|---|
man COMMAND | Öffnet die Handbuchseite mit Optionen und Beispielen zum Befehl. Suche mit /TEXT, springe mit n zum nächsten Treffer und beende die Ansicht mit q. |
man -k KEYWORD | Durchsucht Namen und Kurzbeschreibungen der Handbuchseiten nach einem Stichwort; hilfreich, wenn du die Aufgabe, aber den passenden Befehl noch nicht kennst. |
help cd | Zeigt die Bash-Hilfe für den eingebauten Befehl cd. Solche Builtins laufen direkt in der Shell und können sich von gleichnamigen externen Programmen unterscheiden. |
COMMAND --help | Zeigt bei Befehlen mit --help-Unterstützung eine kurze Anleitung mit verfügbaren Optionen und Argumenten. |
type -a COMMAND | Zeigt, wie Bash einen Befehlsnamen auflöst: als Alias, Funktion, Builtin oder ausführbare Datei. -a listet alle Treffer statt nur des ersten auf. |
command -v COMMAND | Zeigt, was Bash für diesen Namen ausführen würde, und liefert einen Status ungleich null, falls nichts gefunden wird. So prüfst du, ob ein benötigtes Werkzeug verfügbar ist. |
Dateien, Verzeichnisse und Links
| Befehl | Erklärung |
|---|---|
touch FILE | Erstellt eine leere Datei, falls sie fehlt; andernfalls werden Zugriffs- und Änderungszeit aktualisiert, ohne den Inhalt zu verändern. |
mkdir -p DIRECTORY/SUBDIRECTORY | Erstellt das Verzeichnis und alle fehlenden übergeordneten Verzeichnisse. Mit -p werden bereits vorhandene Verzeichnisse akzeptiert. |
cp -i SOURCE DESTINATION | Kopiert eine Datei und fragt vor dem Überschreiben eines vorhandenen Ziels nach. Ist DESTINATION ein Verzeichnis, behält die Kopie darin den ursprünglichen Dateinamen. |
cp -a SOURCE_DIRECTORY DESTINATION | Kopiert einen Verzeichnisbaum und erhält Links sowie möglichst viele Metadaten; vorhandene Dateien können überschrieben werden. In einem vorhandenen Zielverzeichnis wird das Quellverzeichnis angelegt, ein neues Ziel wird zum Namen der Kopie. |
mv -i SOURCE DESTINATION | Verschiebt eine Datei oder ein Verzeichnis beziehungsweise benennt sie um und fragt vor dem Ersetzen eines vorhandenen Ziels nach. Innerhalb eines Dateisystems ändert sich meist nur der Pfad, ohne den Inhalt zu kopieren. |
rm -i FILE | Löscht eine Datei nach Bestätigung, ohne sie in einen Papierkorb zu verschieben. Ist FILE ein symbolischer Link, wird der Link selbst entfernt. |
rm -rI DIRECTORY | Löscht ein Verzeichnis einschließlich seines Inhalts rekursiv. Das große -I von GNU rm fragt vor dieser rekursiven Löschung einmal nach, das kleine -i bei einzelnen Löschvorgängen. |
rmdir DIRECTORY | Entfernt ein leeres Verzeichnis und schlägt fehl, wenn noch Dateien oder Unterverzeichnisse vorhanden sind. So bleiben etwaige Inhalte erhalten. |
file FILE | Untersucht Inhalt und Metadaten einer Datei, um ihren Typ zu erkennen, etwa Text, Programmdatei oder komprimierte Daten. Das Ergebnis beruht nicht nur auf der Dateiendung. |
stat FILE | Zeigt detaillierte Metadaten wie Größe, Rechte, Eigentümer, Inode und Zeitstempel. Modification time beschreibt Inhaltsänderungen, change time Änderungen am Inode und nicht die Erstellung. |
ln FILE HARD_LINK | Erstellt auf demselben Dateisystem einen weiteren Namen für dieselben Dateidaten. Änderungen sind unter beiden Namen sichtbar; das Entfernen eines Namens lässt den anderen bestehen. |
ln -s TARGET SYMBOLIC_LINK | Erstellt einen symbolischen Link, der einen Pfad zu einer Datei oder einem Verzeichnis speichert und Dateisystemgrenzen überschreiten kann. Relative Ziele beziehen sich auf das Verzeichnis des Links; fehlt das Ziel, ist der Link ungültig. |
readlink SYMBOLIC_LINK | Zeigt den im symbolischen Link gespeicherten Zielpfad. Dieser kann relativ sein und beweist nicht, dass das Ziel aktuell existiert. |
realpath PATH | Zeigt einen normalisierten absoluten Pfad und löst symbolische Links sowie Bestandteile wie . und .. auf. So erkennst du, wohin ein Pfad tatsächlich führt. |
Dateiinhalte lesen
| Befehl | Erklärung |
|---|---|
cat FILE | Schreibt die gesamte Datei auf die Standardausgabe. Bei mehreren Dateinamen gibt cat deren Inhalte nacheinander in der angegebenen Reihenfolge aus. |
less FILE | Öffnet eine Datei zum seitenweisen Lesen, ohne sie zu bearbeiten. Suche mit /TEXT, gehe mit n weiter und beende die Ansicht mit q. |
head -n 20 FILE | Zeigt die ersten 20 Zeilen; -n legt die Zeilenzahl fest. Praktisch für Kopfzeilen oder den Anfang einer umfangreichen Ausgabe. |
tail -n 50 FILE | Zeigt die letzten 50 Zeilen. Mit zusätzlichem -F wird eine Logdatei anhand ihres Namens weiterverfolgt, auch wenn sie bei einer Rotation ersetzt wird. |
Dateien bearbeiten und Terminalsitzungen erhalten
| Befehl | Erklärung |
|---|---|
nano FILE | Öffnet eine Datei im Editor nano, in dem du sofort tippen kannst. Speichere mit Strg+O und Enter und beende mit Strg+X; beim Speichern werden deine Änderungen in die Datei geschrieben. |
vim FILE | Öffnet eine Datei in Vim; mit i wechselst du zum Bearbeiten in den Einfügemodus, mit Esc zurück in den Normalmodus. :wq speichert und beendet, :q! verwirft ungespeicherte Änderungen und beendet; bestätige den Befehl jeweils mit Enter. |
tmux new -s SESSION | Startet eine benannte tmux-Sitzung, deren Terminalprogramme nach dem Trennen oder einem Verbindungsabbruch des Clients weiterlaufen können. Die Sitzung läuft auf diesem Rechner und überlebt dessen Neustart nicht. |
tmux detach | Trennt den aktuellen tmux-Client, während die Sitzung und ihre Programme weiterlaufen. Das voreingestellte Tastenkürzel innerhalb von tmux ist Strg+B, gefolgt von d. |
tmux attach -t SESSION | Verbindet dich wieder mit einer vorhandenen benannten Sitzung auf diesem Rechner. tmux ls zeigt verfügbare Sitzungen, aus denen du das Ziel mit -t auswählst. |
Dateien und Text finden
| Befehl | Erklärung |
|---|---|
find DIRECTORY -type f -name '*.log' | Sucht rekursiv nach regulären Dateien mit der Endung .log. Die Anführungszeichen verhindern eine vorzeitige Platzhalterauflösung durch Bash; -iname ignoriert Groß- und Kleinschreibung. |
find DIRECTORY -type f -mtime -1 | Findet reguläre Dateien, deren Inhalt in den letzten 24 Stunden geändert wurde. -mtime zählt vergangene 24-Stunden-Zeiträume, keine Kalendertage. |
find DIRECTORY -type f -name '*.conf' -exec grep -nH -- 'PATTERN' {} + | Durchsucht passende Konfigurationsdateien und zeigt Dateinamen sowie Zeilennummern. {} übergibt Dateinamen direkt an grep, während + mehrere bündelt und Namen mit Leerzeichen korrekt erhält. |
grep -n -- 'PATTERN' FILE | Zeigt Zeilen, die zu einem einfachen regulären Ausdruck passen, einschließlich Zeilennummern. -- beendet die Optionsauswertung, damit ein Muster mit Bindestrich am Anfang als Daten gilt. |
grep -rIn -- 'PATTERN' DIRECTORY | Durchsucht Textdateien rekursiv: -r steigt in Unterverzeichnisse ab, -I überspringt Binärdateien und -n zeigt Zeilennummern. Anders als -R folgt -r keinen symbolischen Links, die es im Verzeichnisbaum findet. |
grep -F -- 'TEXT' FILE | Sucht nach wörtlichem Text statt nach einem regulären Ausdruck. Zeichen wie Punkte und Klammern behalten ihre normale Bedeutung, etwa bei exakten Ausschnitten aus Logs oder Konfigurationen. |
grep -E -- 'error|warning' FILE | Findet mit einem erweiterten regulären Ausdruck Zeilen mit error oder warning. -E aktiviert Operatoren wie | für Alternativen und + für eine oder mehrere Wiederholungen. |
grep -vE -- '^[[:space:]]*(#|$)' FILE | Zeigt Zeilen, die weder leer noch mit # beginnende Kommentare sind; führende Leerzeichen sind erlaubt. -v kehrt die Trefferwahl um und entfernt keine Kommentare am Zeilenende. |
grep -n -B 2 -A 3 -- 'PATTERN' FILE | Zeigt jeden Treffer mit zwei Zeilen davor und drei danach. -B steht für davor, -A für danach und -C verwendet dieselbe Anzahl auf beiden Seiten. |
rg -n 'PATTERN' DIRECTORY | Durchsucht Dateiinhalte rekursiv mit ripgrep und zeigt Zeilennummern. Ignore-Dateien werden normalerweise beachtet, versteckte und binäre Dateien ausgelassen; rg muss gegebenenfalls installiert werden. |
find DIRECTORY -type f -name '*.log' -print0 | xargs -0 -r wc -l | Übergibt gefundene Dateinamen auch mit Leerzeichen oder Zeilenumbrüchen sicher an wc. GNU xargs -r verhindert den Aufruf ohne Treffer. |
Text verarbeiten und zusammenfassen
| Befehl | Erklärung |
|---|---|
sort -n FILE | Sortiert Zeilen nach ihrem führenden Zahlenwert statt alphabetisch, sodass 2 vor 10 steht. -r kehrt die Reihenfolge um; die Eingabedatei bleibt unverändert. |
sort FILE | uniq -c | sort -nr | Zählt identische Zeilen und zeigt die häufigsten zuerst. uniq fasst nur benachbarte Duplikate zusammen, deshalb ist bei unsortierter Eingabe das erste sort nötig. |
cut -d ':' -f 1 FILE | Liest aus jeder durch Doppelpunkte getrennten Zeile das erste Feld. -d legt das Trennzeichen fest, -f die Felder; cut versteht keine CSV-Regeln für zitierte Werte. |
awk -F ':' '{print $1, $3}' FILE | Zeigt aus jeder Zeile das erste und dritte durch Doppelpunkte getrennte Feld. Einfache Anführungszeichen schützen $1 und $3 vor der Variablenauflösung durch Bash. |
sed -n '10,20p' FILE | Zeigt nur die Zeilen 10 bis 20. -n unterdrückt die normale Ausgabe von sed, p gibt den gewählten Bereich ausdrücklich aus. |
sed 's/OLD/NEW/g' FILE | Gibt eine Version aus, in der jeder Treffer des regulären Ausdrucks OLD durch NEW ersetzt wird; g erfasst alle Treffer pro Zeile. Die Quelldatei bleibt unverändert, Sonderzeichen in Suchmuster oder Ersatztext müssen maskiert werden. |
wc -l FILE | Zählt Zeilenumbruchzeichen, normalerweise entsprechend der Anzahl der Textzeilen. -w zählt Wörter, -c Bytes und -m Zeichen. |
LC_ALL=C tr '[:lower:]' '[:upper:]' < FILE | Wandelt kleine ASCII-Buchstaben in Großbuchstaben um, ohne FILE zu ändern; LC_ALL=C aktiviert für diesen Befehl die C-Locale. GNU tr unterstützt keine vollständige Unicode-Umwandlung der Groß- und Kleinschreibung. |
diff -u OLD_FILE NEW_FILE | Vergleicht zwei Textdateien im Unified-Diff-Format. Exit-Status 1 bedeutet Unterschiede und keinen fehlgeschlagenen Vergleich. |
base64 FILE | Kodiert Dateibytes als druckbaren Base64-Text. Das ist Kodierung, keine Verschlüsselung; GNU base64 bricht Zeilen um, sofern -w 0 fehlt. |
base64 --decode FILE | Dekodiert Base64-Text zu den ursprünglichen Bytes auf der Standardausgabe. Leite binäre Ausgabe in eine Datei statt ins Terminal um. |
Mit JSON und YAML arbeiten
| Befehl | Erklärung |
|---|---|
jq '.' FILE.json | Liest JSON und gibt es mit übersichtlicher Einrückung aus; ungültiges JSON führt zu einem Fehler. jq arbeitet mit der JSON-Struktur statt mit Textzeilen. |
jq -r '.metadata.name' FILE.json | Liest den verschachtelten Wert metadata.name. -r gibt Zeichenketten ohne JSON-Anführungszeichen aus, sodass sie als Eingabe für andere Befehle dienen können. |
jq '.items[] | select(.enabled == true)' FILE.json | Geht das Array items durch und zeigt nur Objekte, deren Feld enabled den Wert true hat. Diese Pipe gehört zum jq-Ausdruck, deshalb bleibt der gesamte Filter in einfachen Anführungszeichen. |
jq --arg name 'NAME' '.items[] | select(.name == $name)' FILE.json | Übergibt eine Zeichenkette an einen jq-Filter, ohne daraus Filtercode zusammenzusetzen. --arg erzeugt eine String-Variable; --argjson erwartet einen bereits gültigen JSON-Wert. |
yq eval '.metadata.name' FILE.yaml | Liest ein YAML-Feld mit Mike Farahs yq v4, einem eigenständigen Werkzeug mit jq-ähnlichen Ausdrücken. Andere Programme namens yq besitzen abweichende Optionen und Verhaltensweisen. |
yq eval -i '.spec.replicas = 3' FILE.yaml | Setzt mit Mike Farahs yq v4 den YAML-Wert spec.replicas auf 3. -i schreibt das Ergebnis in dieselbe Datei zurück; ohne -i wird es zur Vorschau auf der Standardausgabe angezeigt. |
Datenströme, Pipes und Umleitungen
| Befehl | Erklärung |
|---|---|
COMMAND > FILE | Leitet die Standardausgabe (Datenstrom 1) in eine Datei um und erstellt oder leert sie vor dem Start des Befehls. Fehlermeldungen erscheinen weiterhin im Terminal. |
COMMAND >> FILE | Hängt die Standardausgabe an das Dateiende an, statt den vorhandenen Inhalt zu ersetzen. Fehlt die Datei, wird sie erstellt. |
COMMAND 2> ERRORS.log | Leitet die Standardfehlerausgabe (Datenstrom 2) in eine Datei um und ersetzt deren bisherigen Inhalt. Die normale Ausgabe erscheint weiterhin im Terminal. |
COMMAND > OUTPUT.log 2>&1 | Schreibt Standardausgabe und Standardfehlerausgabe in dieselbe Datei. Die Reihenfolge zählt: 2>&1 übernimmt das Ziel der Standardausgabe, nachdem > sie umgeleitet hat. |
COMMAND < FILE | Verwendet eine Datei als Standardeingabe (Datenstrom 0) statt der Tastatur. Der Befehl muss das Lesen aus diesem Datenstrom unterstützen. |
grep -F -- 'TEXT' FILE | wc -l | Verbindet die Standardausgabe von grep mit der Standardeingabe von wc und zählt passende Zeilen. Eine normale Pipe überträgt nur die Standardausgabe und schließt Fehlermeldungen daher nicht ein. |
COMMAND | tee -a OUTPUT.log | Zeigt die Standardausgabe im Terminal und hängt eine Kopie an eine Datei an. Ohne -a ersetzt tee den Dateiinhalt; Fehler von COMMAND laufen an dieser Pipe vorbei. |
printf '%s\n' 'TEXT' | sudo tee FILE > /dev/null | Schreibt Text mit Administratorrechten in eine Datei, ersetzt deren Inhalt und blendet die zusätzliche Ausgabe von tee aus. sudo steuert hier den Dateizugriff von tee; bei sudo COMMAND > FILE würde weiterhin die aktuelle Shell FILE öffnen. |
Rechte, Benutzer und Gruppen
| Befehl | Erklärung |
|---|---|
id | Zeigt deine Benutzer-ID, primäre Gruppen-ID und zusätzlichen Gruppen. Mit einem Benutzernamen untersuchst du ein anderes Konto statt der Identität der aktuellen Sitzung. |
getent passwd USER | Sucht ein Konto über die konfigurierten Identitätsquellen des Systems, etwa lokale Dateien oder einen Verzeichnisdienst. Angezeigt werden unter anderem UID, Home-Verzeichnis und Login-Shell, aber kein Passwort. |
chmod u+x SCRIPT | Ergänzt das Ausführungsrecht für den Eigentümer der Datei und erhält die übrigen Rechte. u steht für Eigentümer, g für Gruppe und o für andere. |
chmod 640 FILE | Setzt Lesen/Schreiben für den Eigentümer, nur Lesen für die Gruppe und keine Rechte für andere. Jede Ziffer addiert Lesen (4), Schreiben (2) und Ausführen (1), in der Reihenfolge Eigentümer, Gruppe, andere. |
chmod 750 DIRECTORY | Gibt dem Eigentümer vollen Verzeichniszugriff, der Gruppe Rechte zum Auflisten und Betreten und anderen keinen Zugriff. Bei Verzeichnissen listet r Namen auf, x erlaubt das Betreten und w zusammen mit x das Anlegen oder Entfernen von Einträgen. |
sudo chown USER:GROUP FILE | Ändert Eigentümer und Gruppe einer Datei. Ohne -R betrifft dies nur den angegebenen Pfad, nicht den Inhalt eines Verzeichnisses. |
chgrp GROUP FILE | Ändert ausschließlich die Gruppe der Datei. Der Eigentümer darf normalerweise eine seiner eigenen Gruppen wählen; andere Änderungen erfordern Administratorrechte. |
umask 077 | Entzieht Gruppe und anderen die Rechte für anschließend von dieser Shell und ihren Kindprozessen erstellte Dateien und Verzeichnisse. Typische Ergebnisse sind 600 für Dateien und 700 für Verzeichnisse; bestehende Pfade bleiben unverändert. |
sudo COMMAND | Führt einen Befehl als root aus, sofern deine sudo-Regeln es erlauben. root ist das Administratorkonto; sudo kann zur Autorisierung dein eigenes Passwort anfordern. |
sudo -u USER COMMAND | Führt einen Befehl gemäß den sudo-Regeln als angegebenes Konto statt als root aus. Nützlich zum Prüfen der Dateizugriffe eines Dienstkontos oder zum Ausführen seiner Wartungsbefehle. |
sudo useradd -m -s /bin/bash USER | Erstellt ein lokales Konto, mit -m dessen Home-Verzeichnis und mit -s Bash als Login-Shell. Ein Passwort oder eine andere Anmeldemethode richtest du separat ein. |
sudo passwd USER | Setzt oder ändert das Passwort eines Kontos über eine interaktive Eingabe. Ohne Benutzernamen und ohne sudo ändert passwd dein eigenes Passwort. |
sudo groupadd GROUP | Erstellt eine lokale Gruppe, um mehreren Konten gemeinsame Rechte zu geben. Das Anlegen der Gruppe fügt ihr noch keine Benutzer hinzu. |
sudo usermod -aG GROUP USER | Fügt ein Konto einer zusätzlichen Gruppe hinzu; -a ergänzt, während -G allein die Liste der zusätzlichen Gruppen ersetzt. Die neue Mitgliedschaft wird in einer neuen Anmeldesitzung wirksam. |
getfacl FILE | Liest die Zugriffsliste einer Datei mit zusätzlichen Benutzer- oder Gruppenrechten über die klassischen Besitzer-/Gruppen-/Sonstigen-Bits hinaus. ACL-Werkzeuge und Dateisystemunterstützung sind nötig. |
setfacl -m u:USER:r FILE | Gewährt einem bestimmten Benutzer Leserechte über die Datei-ACL. Der Aufrufer muss Eigentümer oder entsprechend berechtigt sein; übergeordnete Verzeichnisse müssen weiterhin durchquerbar sein. |
Bash-Variablen und Skripte
| Befehl | Erklärung |
|---|---|
label='VALUE'; printf '%s\n' "$label" | Weist einer Shell-Variablen ohne Leerzeichen um = einen Wert zu und gibt ihn aus. Doppelte Anführungszeichen erhalten Leerzeichen und verhindern die Platzhalterauflösung im eingesetzten Wert. |
printf '%s\n' '$label' "$label" | Gibt zuerst den wörtlichen Text $label und dann den Variablenwert aus. Einfache Anführungszeichen verhindern Ersetzungen, doppelte erlauben Variablen- und Befehlsersetzungen und halten jedes Ergebnis zusammen. |
export APP_ENV='development' | Stellt APP_ENV in der Umgebung von Programmen bereit, die diese Shell startet. Eine normale Zuweisung exportiert eine neue Variable noch nicht an Kindprogramme. |
current_dir=$(pwd) | Führt pwd aus und speichert dessen Standardausgabe in einer Variablen; die Befehlsersetzung entfernt abschließende Zeilenumbrüche. Verwende später "$current_dir", um Leerzeichen zu erhalten. |
count=3; printf '%s\n' "$((count + 1))" | Berechnet einen ganzzahligen Ausdruck in Bash und gibt 4 aus. $((...)) berechnet eine Zahl, während $(...) die Ausgabe eines Befehls erfasst. |
printf '%s\n' "${APP_ENV:-development}" | Verwendet development, wenn APP_ENV nicht gesetzt oder leer ist, ohne diesen Standardwert zuzuweisen. Durch den Doppelpunkt gelten auch leere Werte als fehlend. |
read -r -p 'Name: ' name | Fragt eine Eingabezeile ab und speichert sie in name. -r erhält Backslashes wörtlich, statt sie als Maskierungszeichen zu behandeln. |
if [[ -f FILE ]]; then printf '%s\n' 'File exists'; fi | Führt den Block nur aus, wenn FILE existiert und eine reguläre Datei ist. Bash unterstützt in [[...]] etwa -d für Verzeichnisse und -r für Lesbarkeit; Leerzeichen neben den Klammern sind erforderlich. |
mkdir -p DIRECTORY && cd DIRECTORY | Führt cd nur aus, wenn mkdir mit Status 0 erfolgreich endet. && verknüpft Befehle, deren nächster Schritt vom Erfolg des vorherigen abhängt. |
COMMAND || printf '%s\n' 'Command failed' >&2 | Gibt nur bei einem Status ungleich null von COMMAND eine Meldung auf der Standardfehlerausgabe aus. Der Gesamtstatus entspricht danach printf; soll auch das Skript fehlschlagen, ist ein ausdrückliches exit nötig. |
for item in 'FILE_ONE' 'FILE_TWO'; do printf '%s\n' "$item"; done | Führt den Schleifenblock für jeden angegebenen Wert einmal aus. Anführungszeichen um die Werte und "$item" halten Dateinamen mit Leerzeichen zusammen. |
while IFS= read -r line || [[ -n $line ]]; do printf '%s\n' "$line"; done < FILE | Liest eine Datei zeilenweise und erhält Leerzeichen sowie Backslashes. Der zusätzliche Test verarbeitet auch eine letzte Zeile ohne abschließenden Zeilenumbruch. |
greet() { printf 'Hello, %s\n' "$1"; }; greet 'NAME' | Definiert eine wiederverwendbare Shell-Funktion und ruft sie mit einem Argument auf. In einer Funktion ist $1 das erste Argument; "$@" steht für alle Argumente als einzelne Werte. |
bash SCRIPT.sh ARGUMENT | Führt ein Skript in einem neuen Bash-Prozess aus; ARGUMENT steht darin als $1 bereit. Das Skript benötigt Leserechte, bei diesem Aufruf aber kein gesetztes Ausführungsrecht. |
source FILE.sh | Führt Shell-Code in der aktuellen Shell aus, sodass Variablen-, Funktions- und Verzeichnisänderungen erhalten bleiben. Verwende es für Dateien, deren Code in deiner aktuellen Sitzung laufen soll. |
COMMAND; status=$?; printf 'Exit status: %s\n' "$status" | Speichert den Rückgabestatus eines Befehls sofort: 0 bedeutet normalerweise Erfolg, andere Werte sind befehlsspezifisch. Jeder weitere Befehl ersetzt $?, deshalb wird der Wert zuerst gesichert. |
exit 1 | Beendet das aktuelle Skript oder die Shell mit Fehlerstatus 1; exit 0 meldet Erfolg. In einem interaktiven Terminal wird damit die aktuelle Shell-Sitzung beendet. |
set -o pipefail | Lässt eine Pipeline mit dem letzten von null abweichenden Status fehlschlagen, sobald eine Stufe scheitert; normalerweise zählt nur der letzte Befehl. Das beendet allein noch kein Skript; prüfe oder behandle den Status ausdrücklich. |
printenv PATH | Zeigt die Umgebungsvariable PATH: eine durch Doppelpunkte getrennte Liste von Verzeichnissen, in denen externe Befehle gesucht werden. |
env APP_ENV=test COMMAND | Führt einen Befehl mit einem abweichenden Umgebungswert aus, ohne die Umgebung der aufrufenden Shell zu ändern. |
unset APP_ENV | Entfernt eine Shellvariable und ihren exportierten Wert aus der aktuellen Shell. Bereits laufende Kindprozesse behalten ihre eigene Umgebung. |
alias ll='ls -lah' | Definiert einen Kurzbefehl in der aktuellen interaktiven Bash-Sitzung. In ~/.bashrc eingetragen gilt er auch für künftige interaktive Bash-Sitzungen. |
history 20 | Zeigt die letzten 20 Einträge der aktuellen Bash-Befehlshistorie. Zugangsdaten in Befehlen können dort erhalten bleiben; nutze dafür Eingabeaufforderungen oder Dateien. |
bash -n SCRIPT.sh | Prüft die Bash-Syntax eines Skripts, ohne seine Befehle auszuführen. Nicht alle Logik- oder Laufzeitfehler werden dadurch gefunden. |
bash -x SCRIPT.sh | Führt ein Skript aus und zeigt zur Fehlersuche Befehle nach der Expansion. Dabei können geheime Werte in der Ablaufspur sichtbar werden. |
shellcheck SCRIPT.sh | Prüft ein Shellskript statisch auf typische Fehler wie unsichere Anführungszeichen oder falsche Variablennutzung. ShellCheck ist separat nötig und führt das Skript nicht aus. |
Bash-Jobsteuerung
| Befehl | Erklärung |
|---|---|
COMMAND & | Startet einen Befehl im Hintergrund, sodass die Shell sofort einen weiteren Befehl annehmen kann. Ohne Umleitung erscheint seine Ausgabe weiterhin im Terminal; $! enthält die Prozess-ID des zuletzt gestarteten Hintergrundbefehls. |
jobs -l | Zeigt Jobs der aktuellen Shell mit ihrem Zustand und ihren Prozess-IDs. Jobnummern wie [1] gelten nur in dieser Shell und unterscheiden sich von den systemweiten Prozess-IDs. |
fg %1 | Holt Job 1 in den Vordergrund und setzt ihn fort, falls er angehalten wurde. In einer interaktiven Shell hält Strg+Z einen Vordergrundjob normalerweise an, sodass du ihn mit jobs, bg oder fg steuern kannst. |
bg %1 | Setzt einen angehaltenen Job im Hintergrund fort. Befehle, die Terminaleingaben benötigen, können erneut anhalten, bis sie in den Vordergrund geholt werden. |
wait "$!" | Wartet auf den zuletzt gestarteten Hintergrundbefehl und liefert dessen Rückgabestatus. Verwende es nach dem Start eines Hintergrundbefehls; wait ohne Argumente wartet auf alle aktiven Kindjobs. |
Archive, Komprimierung und Prüfsummen
| Befehl | Erklärung |
|---|---|
tar -czf ARCHIVE.tar.gz DIRECTORY | Erstellt ein gzip-komprimiertes Archiv eines Verzeichnisses: -c erstellt, -z komprimiert und -f benennt die Archivdatei. Ein vorhandenes Archiv dieses Namens wird ersetzt; das Quellverzeichnis bleibt erhalten. |
tar -tzf ARCHIVE.tar.gz | Listet Archiveinträge auf, ohne sie zu entpacken. -t zeigt den Inhalt; zusätzliches -v ergänzt Details wie gespeicherte Rechte und Größen. |
tar -xzf ARCHIVE.tar.gz -C DIRECTORY | Entpackt ein Archiv in ein vorhandenes Verzeichnis; -x steht für Entpacken und -C wählt das Ziel. Gleichnamige Dateien können ersetzt werden; ein leeres Ziel hält die entpackten Inhalte getrennt. |
gzip -k FILE | Komprimiert eine Datei zu FILE.gz und erhält dank -k das Original. gzip komprimiert Dateidaten; tar bündelt mehrere Dateien zu einem Archiv. |
gunzip -k FILE.gz | Dekomprimiert eine gzip-Datei und erhält die komprimierte Eingabe. Beim Ergebnis entfällt normalerweise die Endung .gz. |
sha256sum FILE | Berechnet eine SHA-256-Prüfsumme des Dateiinhalts, um Änderungen zu erkennen oder einen Download mit einer vertrauenswürdig veröffentlichten Prüfsumme zu vergleichen. Der Hash allein sagt nicht, wer die Datei erstellt hat. |
sha256sum -c CHECKSUMS.sha256 | Prüft Dateien anhand einer Liste aus Prüfsummen und Dateinamen und meldet OK oder eine Abweichung. Relative Dateinamen in der Liste beziehen sich auf dein aktuelles Verzeichnis. |
zip -r ARCHIVE.zip DIRECTORY | Erstellt oder aktualisiert ein ZIP-Archiv aus einem Verzeichnisbaum. ZIP eignet sich zum Dateiaustausch mit Systemen, die üblicherweise kein tar nutzen. |
unzip ARCHIVE.zip -d DIRECTORY | Entpackt ein ZIP-Archiv in ein gewähltes Verzeichnis. Bei bestehenden Dateien wird standardmäßig nachgefragt; unzip -l zeigt vorab die Namen. |
Systeminformationen und Herunterfahren
| Befehl | Erklärung |
|---|---|
uname -a | Zeigt Kernelversion, Rechnerarchitektur und Hostnamen an. |
hostnamectl | Zeigt Hostnamen, Betriebssystem und Angaben zur Virtualisierung auf einem systemd-System an. |
lscpu | Zeigt CPU-Architektur, logische Prozessoren, Kerne und Sockel an. |
free -h | Zeigt RAM- und Swap-Nutzung in lesbaren Einheiten an. Die Spalte available schätzt den Speicher für neue Anwendungen. |
uptime | Zeigt Laufzeit und Lastmittelwerte der letzten 1, 5 und 15 Minuten an. Die Last umfasst ausführbare Tasks und Tasks in nicht unterbrechbarem Schlaf. |
timedatectl | Zeigt Systemzeit, Zeitzone und Status der Zeitsynchronisierung unter systemd an. |
sudo reboot | Startet den Rechner sofort über die Systemverwaltung neu. Laufende Dienste werden beendet und Remote-Sitzungen getrennt. |
sudo shutdown -h +10 | Plant das Herunterfahren in zehn Minuten und benachrichtigt angemeldete Benutzer. Speichere deine Arbeit vor dem Ausschalten. |
sudo shutdown -c | Bricht ein geplantes Herunterfahren ab, bevor es beginnt. |
date -u +'%Y-%m-%dT%H:%M:%SZ' | Zeigt den aktuellen UTC-Zeitstempel in einem einheitlichen Format, hilfreich beim Vergleich von Logs verschiedener Zeitzonen. |
cat /etc/os-release | Zeigt Linux-Distribution und Version, bevor du distributionsspezifische Paket- oder Konfigurationsbefehle auswählst. |
sysctl net.ipv4.ip_forward | Liest die IPv4-Weiterleitungseinstellung des Kernels. Der Lesezugriff ändert nichts; dauerhafte Anpassungen gehören in die sysctl-Konfiguration. |
Prozesse, Signale und Leistung
| Befehl | Erklärung |
|---|---|
ps aux | Listet Prozesse mit Besitzer, CPU- und Speichernutzung, Status und Befehlszeile auf. |
ps -eo pid,ppid,user,%cpu,%mem,stat,cmd --sort=-%cpu | Listet Prozesse nach CPU-Nutzung sortiert auf, einschließlich der ID des Elternprozesses. Der CPU-Prozentwert ist über die Prozesslaufzeit gemittelt. |
pgrep -af 'PATTERN' | Sucht Prozesse, deren vollständige Befehlszeile zum regulären Ausdruck passt, und zeigt IDs und Befehle an. |
top | Beobachtet Prozesse, CPU-Nutzung und Speicher interaktiv. Mit q beendest du die Anzeige. |
kill -TERM PID | Fordert einen eigenen Prozess zum geordneten Beenden auf. Verwende seine numerische Prozess-ID; bei fremden Prozessen ist meist sudo nötig. |
kill -KILL PID | Beendet einen eigenen Prozess sofort ohne Aufräumen. Nutze dies nur, wenn geordnetes Beenden scheitert; ungespeicherte Arbeit kann verloren gehen. |
kill -STOP PID | Pausiert einen eigenen Prozess, ohne ihn zu beenden. Seine Ressourcen bleiben belegt und Clients können in Zeitüberschreitungen laufen. |
kill -CONT PID | Setzt einen angehaltenen eigenen Prozess fort. |
nice -n 10 COMMAND | Startet einen Befehl mit einem höheren Nice-Wert, wodurch er bei CPU-Konkurrenz eine niedrigere Priorität erhält. |
renice 10 -p PID | Setzt den Nice-Wert eines laufenden Prozesses auf 10. Ohne erhöhte Rechte kannst du normalerweise nur die Priorität eigener Prozesse senken. |
vmstat 1 5 | Erfasst Speicher, Swap-Aktivität, CPU und ausführbare Tasks fünfmal. Der erste CPU- und I/O-Bericht fasst die Zeit seit dem Start zusammen, weitere Berichte jeweils eine Sekunde. |
iostat -xz 1 5 | Zeigt erweiterte Datenträger-I/O-Statistiken im Sekundentakt und blendet inaktive Geräte aus. Benötigt das Paket sysstat; der erste Bericht umfasst die Zeit seit dem Start. |
sudo lsof -p PID | Listet Dateien, Sockets und andere offene Handles eines Prozesses auf. Benötigt lsof; erhöhte Rechte erlauben die Prüfung fremder Prozesse. |
htop | Zeigt Prozesse in einer interaktiven Ansicht zum Scrollen und Filtern. F10 oder q beendet sie; das Paket htop ist nötig. |
watch -n 2 'df -h' | Wiederholt alle zwei Sekunden die Speicherplatzprüfung und aktualisiert die Anzeige. Ctrl+C beendet sie, ohne Dateisysteme zu verändern. |
time COMMAND | Misst Laufzeit sowie CPU-Zeit in Benutzer- und Kernelcode eines Befehls. Das Bash-Schlüsselwort time kann auch eine Pipeline messen. |
timeout --kill-after=5s 30s COMMAND | Fordert nach 30 Sekunden das Ende eines Befehls an und erzwingt es gegebenenfalls fünf Sekunden später. GNU timeout liefert beim Zeitlimit normalerweise Status 124. |
ulimit -n | Zeigt das weiche Limit offener Dateideskriptoren der aktuellen Shell, das neue Kindprozesse erben. Ein systemd-Dienst kann ein anderes Limit haben. |
sudo strace -f -p PID | Verfolgt Systemaufrufe eines laufenden Prozesses und neu erzeugter Kindprozesse, etwa bei blockierter E/A oder fehlenden Dateien. strace ist nötig; die Analyse verursacht Zusatzlast und kann sensible Daten zeigen. |
Dienste mit systemd
| Befehl | Erklärung |
|---|---|
systemctl status SERVICE.service | Zeigt den aktuellen Dienststatus und die letzten Logeinträge an. |
systemctl --failed | Listet systemd-Units auf, die aktuell als fehlgeschlagen gelten. |
systemctl list-unit-files --type=service | Listet installierte Service-Unit-Dateien und ihren Aktivierungsstatus auf. |
systemctl cat SERVICE.service | Liest die Unit-Datei eines Dienstes und ihre Konfigurationsergänzungen vom Datenträger. |
sudo systemctl start SERVICE.service | Startet einen Dienst sofort, ohne seine Startkonfiguration zu ändern. |
sudo systemctl stop SERVICE.service | Stoppt einen Dienst sofort und unterbricht seine Arbeit sowie verbundene Clients. |
sudo systemctl restart SERVICE.service | Stoppt und startet einen Dienst und unterbricht kurz seine Verfügbarkeit. |
sudo systemctl reload SERVICE.service | Fordert einen laufenden Dienst zum Neuladen seiner Konfiguration auf; der Dienst muss dies unterstützen. |
sudo systemctl enable --now SERVICE.service | Konfiguriert die automatische Aktivierung eines Dienstes und startet ihn sofort. |
sudo systemctl disable --now SERVICE.service | Entfernt automatische Aktivierungsverknüpfungen und stoppt den Dienst; Abhängigkeiten können ihn weiterhin starten. |
sudo systemctl daemon-reload | Lädt systemd-Unit-Definitionen nach Dateiänderungen neu; Dienste laufen weiter. |
Logs und geplante Aufgaben
| Befehl | Erklärung |
|---|---|
sudo journalctl -u SERVICE.service -n 100 --no-pager | Gibt die letzten 100 Journal-Einträge eines Dienstes aus. Erhöhte Rechte machen auch Systemlogs sichtbar, die deinem Benutzer sonst verborgen bleiben. |
sudo journalctl -f -u SERVICE.service | Zeigt neue Journal-Einträge eines Dienstes fortlaufend an. Mit Strg+C beendest du die Anzeige. |
sudo journalctl -b -1 | Liest die Logs des vorherigen Systemstarts, sofern das Journal sie über Neustarts hinweg gespeichert hat. |
sudo journalctl --since '1 hour ago' -p warning | Zeigt Warnungen und schwerwiegendere Journal-Einträge der letzten Stunde an. |
sudo dmesg --human | Liest den Kernel-Meldungspuffer in lesbarem Format, etwa zur Suche nach Hardware- und Treiberfehlern. |
systemctl list-timers --all | Listet geladene systemd-Timer einschließlich inaktiver Timer mit nächster und letzter Ausführung auf. |
crontab -l | Zeigt die wiederkehrenden Cron-Jobs deines Benutzers an. Benötigt cron oder einen kompatiblen Scheduler. |
crontab -e | Bearbeitet wiederkehrende Cron-Jobs deines Benutzers. Jede Zeile enthält Minute, Stunde, Monatstag, Monat, Wochentag und Befehl; nutze absolute Pfade, da cron eine minimale Umgebung verwendet. |
sudo systemd-run --on-active=10m /ABSOLUTE/PATH/TO/COMMAND | Plant die einmalige Ausführung eines Befehls als root in etwa zehn Minuten über einen temporären systemd-Timer. Der Timer übersteht keinen Neustart. |
Pakete: APT auf Debian und Ubuntu
| Befehl | Erklärung |
|---|---|
sudo apt update | Aktualisiert Paketinformationen aus den konfigurierten Repositories. Installierte Pakete bleiben unverändert. |
apt list --upgradable | Listet installierte Pakete auf, für die die heruntergeladenen Paketinformationen neuere Versionen enthalten. |
sudo apt upgrade | Installiert verfügbare Paketaktualisierungen, ohne installierte Pakete zu entfernen. Prüfe die vorgeschlagenen Änderungen; aktualisierte Dienste können neu starten. |
apt search TERM | Durchsucht Paketnamen und Beschreibungen in den lokalen Repository-Metadaten. |
apt show PACKAGE | Zeigt Beschreibung, Version, Abhängigkeiten und weitere Metadaten eines Pakets an. |
sudo apt install PACKAGE | Installiert ein Paket mit Abhängigkeiten oder aktualisiert ein bereits installiertes Paket. Die Einrichtung kann Dienste starten. |
sudo apt remove PACKAGE | Entfernt ein Paket und behält normalerweise seine Systemkonfiguration. Prüfe abhängige Pakete, die ebenfalls entfernt werden sollen. |
sudo apt purge PACKAGE | Entfernt ein Paket und seine verwaltete Systemkonfiguration. Dateien in den Home-Verzeichnissen bleiben erhalten. |
sudo apt autoremove | Entfernt automatisch installierte Pakete, die nicht mehr als Abhängigkeiten benötigt werden. Prüfe die Liste vor der Bestätigung. |
Pakete: DNF auf Fedora und der RHEL-Familie
| Befehl | Erklärung |
|---|---|
dnf check-update | Prüft verfügbare Paketaktualisierungen mit DNF 4. Status 100 zeigt verfügbare Updates an; Pakete werden nicht aktualisiert. |
dnf5 check-upgrade | Prüft verfügbare Paketaktualisierungen mit DNF 5. Status 100 zeigt verfügbare Updates an; Pakete werden nicht aktualisiert. |
dnf search TERM | Durchsucht Paketnamen und Kurzbeschreibungen in aktivierten Repositories. |
dnf info PACKAGE | Zeigt Paketversionen, Beschreibungen und Repository-Informationen an. |
sudo dnf install PACKAGE | Installiert ein Paket und seine Abhängigkeiten aus aktivierten Repositories. Prüfe die Transaktion vor der Bestätigung. |
sudo dnf upgrade | Aktualisiert installierte Pakete und löst ihre Abhängigkeiten auf. Aktualisierte Dienste benötigen eventuell einen Neustart; ein neuer Kernel wird nach dem Systemneustart wirksam. |
sudo dnf remove PACKAGE | Entfernt ein Paket und davon abhängige Pakete. Prüfe die Liste, da auch weitere Software entfernt werden kann. |
rpm -qf /PATH/TO/FILE | Ermittelt das installierte RPM-Paket, zu dem eine Datei gehört. |
Datenträger, Dateisysteme und Mounts
| Befehl | Erklärung |
|---|---|
df -h | Zeigt belegten und verfügbaren Platz eingehängter Dateisysteme in lesbaren Einheiten an. |
df -i | Zeigt die Inode-Nutzung an. Einem Dateisystem können Inodes ausgehen, obwohl noch Speicherplatz frei ist. |
lsblk -f | Zeigt Blockgeräte mit Dateisystemtypen, Labels, UUIDs und Einhängepunkten an. |
sudo blkid | Liest Dateisystemkennungen von Blockgeräten aus, etwa für dauerhafte Mounts anhand einer UUID. |
findmnt --target /PATH | Ermittelt das eingehängte Dateisystem eines Pfads und zeigt Quelle sowie Mount-Optionen an. |
sudo fdisk -l | Listet Datenträger und Partitionstabellen auf, ohne sie zu verändern. |
sudo mount /dev/DEVICE /MOUNTPOINT | Hängt ein bestehendes Dateisystem bis zum Aushängen oder Neustart in ein vorhandenes Verzeichnis ein. Bereits dort liegende Dateien sind währenddessen verdeckt. |
sudo umount /MOUNTPOINT | Hängt ein Dateisystem vor dem Trennen oder Prüfen aus. Schließe zuvor Dateien und verlasse Verzeichnisse auf diesem Mount. |
sudo mkfs.ext4 /dev/DEVICE | Erstellt ein ext4-Dateisystem auf dem gewählten ausgehängten Gerät und zerstört dessen bisherige Dateisystemdaten. Prüfe das Gerät zuerst mit lsblk. |
sudo e2fsck -f /dev/DEVICE | Prüft ein ext2-, ext3- oder ext4-Dateisystem und fragt vor Reparaturen nach. Das Dateisystem muss ausgehängt sein; Reparaturen verändern es. |
sudo resize2fs /dev/DEVICE | Vergrößert ein ext-Dateisystem auf seine bereits vergrößerte Partition oder sein logisches Volume. Wachstum im eingehängten Zustand benötigt Unterstützung durch Dateisystem und Kernel. |
sudo xfs_growfs /MOUNTPOINT | Vergrößert ein eingehängtes XFS-Dateisystem nach dem Vergrößern der Partition oder des logischen Volumes. Dieser Befehl verkleinert XFS nicht. |
du -sh DIRECTORY | Schätzt den belegten Speicher eines Verzeichnisbaums einschließlich versteckter Einträge. -s zeigt nur die Summe, -h verwendet lesbare Einheiten. |
du -xhd 1 DIRECTORY | sort -h | Vergleicht Verzeichnisgrößen eine Ebene unterhalb eines Pfads und sortiert nach Größe. GNU du -x bleibt im selben Dateisystem und überspringt andere eingehängte Dateisysteme. |
sudo lsof +L1 | Findet offene Dateien, deren Verzeichniseinträge gelöscht wurden. Ihr Speicher kann belegt bleiben, bis der letzte offene Dateideskriptor geschlossen wird. |
findmnt --verify --verbose | Prüft /etc/fstab auf Syntax- und Nutzbarkeitsprobleme, ohne die Einträge einzuhängen. Hilfreich vor einem Neustart mit geänderter Mount-Konfiguration. |
Logische Volumes und Swap
| Befehl | Erklärung |
|---|---|
sudo pvs | Listet physische LVM-Volumes und ihre Volume-Gruppen auf. Benötigt die LVM-Werkzeuge. |
sudo vgs | Zeigt LVM-Volume-Gruppen, Gesamtkapazität und freien Platz für logische Volumes an. |
sudo lvs -o +devices | Listet logische Volumes und die zugrunde liegenden physischen Geräte auf. |
sudo pvcreate /dev/DEVICE | Initialisiert ein unbenutztes Gerät als physisches LVM-Volume. Dies schreibt Metadaten und kann vorhandene Daten zerstören; prüfe zuerst das Ziel. |
sudo vgcreate VG_NAME /dev/DEVICE | Erstellt eine Volume-Gruppe aus einem vorbereiteten physischen LVM-Volume, das keiner anderen Gruppe angehört. |
sudo lvcreate -L 10G -n LV_NAME VG_NAME | Reserviert ein logisches Volume mit 10 GiB aus freiem Platz einer Volume-Gruppe. Erstelle vor dem Einhängen ein Dateisystem auf dem neuen Volume. |
sudo lvextend -L +10G -r /dev/VG_NAME/LV_NAME | Erweitert ein logisches Volume um 10 GiB und passt ein unterstütztes Dateisystem an. Die Volume-Gruppe benötigt freien Platz; prüfe danach beide Größen, da die Dateisystemanpassung separat scheitern kann. |
swapon --show | Listet aktive Swap-Geräte und -Dateien mit Größe, Nutzung und Priorität auf. |
sudo mkswap /dev/DEVICE | Formatiert eine unbenutzte Partition oder ein logisches Volume als Swap und zerstört bisherige Inhalte. Der Bereich wird vorbereitet, aber noch nicht aktiviert. |
sudo swapon /dev/DEVICE | Aktiviert ein vorbereitetes Swap-Gerät für diesen Systemstart. Für dauerhafte Aktivierung ist ein passender Eintrag in /etc/fstab nötig. |
sudo swapoff /dev/DEVICE | Deaktiviert ein Swap-Gerät und verschiebt seine belegten Speicherseiten. Genügend RAM oder anderer Swap-Speicher ist nötig; bei hohem Speicherdruck kann dies scheitern. |
Netzwerk, Routen, DNS und Ports
| Befehl | Erklärung |
|---|---|
ip -br address | Zeigt Netzwerkschnittstellen sowie zugewiesene IPv4- und IPv6-Adressen in einer kompakten Tabelle an. |
ip -s link | Zeigt Schnittstellenstatus und Paketzähler einschließlich Fehlern und verworfenen Paketen an. |
ip route | Zeigt die Haupt-Routingtabelle für IPv4 einschließlich Standardgateway an. |
ip route get IP_ADDRESS | Fragt den Kernel, welche Route, Schnittstelle und Quelladresse er für ein Ziel verwenden würde. |
ip neigh | Zeigt benachbarte Hosts und zwischengespeicherte Link-Layer-Adressen an, darunter IPv4-ARP- und IPv6-Nachbareinträge. |
sudo ip link set dev INTERFACE up | Aktiviert eine Netzwerkschnittstelle administrativ. Dies weist keine IP-Adresse zu und ist keine dauerhafte Netzwerkkonfiguration. |
sudo ip address add IP_ADDRESS/PREFIX dev INTERFACE | Fügt einer Schnittstelle zur Laufzeit eine Adresse mit Netzpräfixlänge hinzu. Wähle eine unbenutzte Adresse; ein Netzwerkmanager kann diese Einstellung später ersetzen. |
sudo ip address del IP_ADDRESS/PREFIX dev INTERFACE | Entfernt eine Schnittstellenadresse zur Laufzeit. Verbindungen über diese Adresse können sofort abbrechen. |
sudo ip route add NETWORK/PREFIX via GATEWAY dev INTERFACE | Fügt eine Laufzeitroute über ein auf der Schnittstelle erreichbares Gateway hinzu. Die Route beeinflusst Verkehr zum Ziel und wird nicht dauerhaft gespeichert. |
sudo ip route del NETWORK/PREFIX via GATEWAY dev INTERFACE | Entfernt die passende Laufzeitroute. Verkehr, der sie benötigt, erreicht sein Ziel möglicherweise nicht mehr. |
ping -c 4 HOST | Sendet vier ICMP-Echo-Anfragen zur Prüfung von Erreichbarkeit und Laufzeit. Fehlende Antworten können auch durch ICMP-Filter entstehen. |
tracepath HOST | Verfolgt Netzwerkstationen und ermittelt die Pfad-MTU ohne root. Benötigt tracepath; Router antworten möglicherweise nicht. |
sudo ss -lntup | Zeigt lauschende TCP- und UDP-Sockets mit numerischen Adressen und zugehörigen Prozessen an. Erhöhte Rechte zeigen auch fremde Prozesse. |
ss -tn state established | Listet aufgebaute TCP-Verbindungen mit numerischen Adressen und Ports auf. |
getent ahosts HOST | Löst einen Hostnamen über die konfigurierten Namensdienste des Systems auf, einschließlich Hosts-Dateien und DNS. |
resolvectl status | Zeigt DNS-Server und Resolver-Einstellungen je Schnittstelle an, wenn systemd-resolved verwendet wird. |
dig HOST A +short | Fragt DNS nach den IPv4-Einträgen eines Hosts ab und gibt eine kurze Antwort aus. Benötigt dig, meist aus dnsutils oder bind-utils. |
dig @DNS_SERVER HOST AAAA | Fragt einen bestimmten DNS-Server nach IPv6-Einträgen ab und zeigt Antwortstatus sowie Details an. |
nc -vz -w 3 HOST PORT | Prüft mit Netcat im OpenBSD-Stil eine TCP-Verbindung zu einem Port mit drei Sekunden Timeout. Erfolg bestätigt TCP-Erreichbarkeit, nicht den Zustand von Anwendung oder TLS. |
sudo tcpdump -ni INTERFACE -c 50 'tcp port 443' | Erfasst bis zu 50 passende Pakete einer Schnittstelle ohne Namensauflösung. tcpdump ist nötig; Mitschnitte können sensible Daten zeigen und entschlüsseln TLS nicht. |
ip -6 route | Zeigt IPv6-Routen einschließlich des IPv6-Standardgateways. IPv4 und IPv6 führen getrennte Routingtabellen. |
HTTP- und TLS-Diagnose
| Befehl | Erklärung |
|---|---|
curl -I https://HOST | Sendet eine HTTP-HEAD-Anfrage und zeigt Antwortheader an. Manche Server behandeln HEAD anders als GET. |
curl --fail --location --output FILE https://HOST/PATH | Lädt eine URL herunter, folgt Weiterleitungen und meldet HTTP-Fehler. Die Ausgabedatei wird erstellt oder überschrieben. |
curl -v https://HOST | Zeigt beim Abrufen einer URL Details zu Verbindung, TLS, Anfrage und Antwort an. Die ausführliche Ausgabe kann Cookies oder Anmeldedaten enthalten. |
openssl s_client -connect HOST:443 -servername HOST -verify_hostname HOST -verify_return_error </dev/null | Prüft einen TLS-Handshake mit SNI sowie Zertifikatskette und Hostnamen anhand des lokalen Vertrauensspeichers. Benötigt OpenSSL; Zertifikatsfehler brechen die Prüfung ab. |
Host-Firewalls
| Befehl | Erklärung |
|---|---|
sudo ufw status numbered | Zeigt Status und nummerierte Regeln auf einem mit UFW verwalteten Host an. |
sudo ufw allow PORT/tcp | Fügt eine dauerhafte UFW-Regel hinzu, die eingehenden TCP-Verkehr zu einem Port erlaubt. Bei aktivem UFW wirkt sie sofort. |
sudo ufw enable | Aktiviert UFW sofort und beim Systemstart. Erlaube vor der Remote-Ausführung deinen tatsächlichen SSH-Port; die Aktivierung kann Verbindungen unterbrechen. |
sudo ufw delete RULE_NUMBER | Entfernt eine Regel anhand ihrer aktuellen Nummer aus ufw status numbered. Nummern ändern sich nach dem Löschen; entfernte Freigaben können Zugriffe blockieren. |
sudo firewall-cmd --get-active-zones | Zeigt auf einem firewalld-Host die Zonen an, die Schnittstellen oder Quelladressen zugeordnet sind. |
sudo firewall-cmd --zone=ZONE --list-all | Zeigt aktive Dienste, Ports und weitere Laufzeiteinstellungen einer firewalld-Zone an. |
sudo firewall-cmd --permanent --zone=ZONE --add-port=PORT/tcp | Erlaubt einen eingehenden TCP-Port in der gespeicherten firewalld-Zonenkonfiguration. Die Änderung wird nach Neuladen oder Neustart wirksam. |
sudo firewall-cmd --reload | Ersetzt firewalld-Laufzeiteinstellungen durch die gespeicherte Konfiguration. Reine Laufzeitänderungen gehen normalerweise verloren; prüfe zuvor die gespeicherte SSH-Freigabe. |
sudo nft list ruleset | Zeigt das aktive nftables-Regelwerk an, einschließlich Regeln eines Firewall-Managers mit nftables-Backend. |
SSH, SCP und rsync
| Befehl | Erklärung |
|---|---|
ssh USER@HOST | Öffnet eine verschlüsselte Remote-Shell. Prüfe beim ersten Verbindungsaufbau den Hostschlüssel-Fingerabdruck des Servers über einen vertrauenswürdigen Kanal. |
ssh -p PORT -i /PATH/TO/PRIVATE_KEY USER@HOST | Verbindet sich über einen abweichenden SSH-Port mit einem bestimmten privaten Schlüssel. Der Server muss den zugehörigen öffentlichen Schlüssel akzeptieren. |
ssh -v USER@HOST | Gibt Diagnoseinformationen zu SSH-Verbindung und Authentifizierung aus, um Anmeldefehler zu untersuchen. |
ssh-keygen -t ed25519 -f ~/.ssh/KEY_NAME | Erzeugt ein Ed25519-Schlüsselpaar unter einem noch unbenutzten Pfad; wähle bei der Abfrage eine Passphrase. Behalte den privaten Schlüssel lokal und teile nur die .pub-Datei. |
ssh-copy-id -i ~/.ssh/KEY_NAME.pub USER@HOST | Trägt einen öffentlichen Schlüssel in authorized_keys des Remote-Benutzers ein. Benötigt ssh-copy-id und eine bestehende Anmeldemöglichkeit für dieses Konto. |
ssh -N -L 127.0.0.1:LOCAL_PORT:DEST_HOST:DEST_PORT USER@SSH_HOST | Leitet einen lokalen TCP-Port durch SSH an ein vom SSH-Server erreichbares Ziel weiter. Der Tunnel bleibt aktiv, solange die SSH-Verbindung besteht. |
scp FILE USER@HOST:/REMOTE/DIRECTORY/ | Kopiert eine lokale Datei über SSH in ein bestehendes Remote-Verzeichnis. Eine vorhandene gleichnamige Datei wird überschrieben. |
scp -P PORT USER@HOST:/REMOTE/FILE ./ | Kopiert eine Remote-Datei über einen eigenen SSH-Port ins aktuelle Verzeichnis. SCP verwendet -P für den Port und kann eine gleichnamige lokale Datei überschreiben. |
rsync -av --dry-run SOURCE/ USER@HOST:/DESTINATION/ | Zeigt eine Übertragung über SSH vorab, ohne Dateien zu ändern; rsync muss auf beiden Seiten installiert sein. Der abschließende Schrägstrich kopiert SOURCE-Inhalte; die Standardprüfung nutzt Dateigröße und Änderungszeit. |
rsync -av SOURCE/ USER@HOST:/DESTINATION/ | Überträgt Verzeichnisinhalte über SSH im Archivmodus und wählt Aktualisierungen anhand von Größe und Änderungszeit statt vollständigem Inhaltsvergleich aus. Gleichnamige Zieldateien können ersetzt werden; nur am Ziel vorhandene Dateien bleiben. |
ssh -J USER@BASTION USER@TARGET | Erreicht ein Ziel über einen SSH-Sprunghost. Die abschließende SSH-Sitzung besteht weiterhin durchgehend zwischen deinem Client und dem Ziel. |
ssh-add /PATH/TO/PRIVATE_KEY | Lädt einen privaten Schlüssel in den laufenden SSH-Agenten und fragt bei Bedarf dessen Passphrase ab. Danach kann der Agent ohne wiederholte Passphrase-Eingabe authentifizieren. |
Git: Versionsverwaltung
| Befehl | Erklärung |
|---|---|
git clone URL | Lädt ein Repository mit seiner Historie in ein neues lokales Verzeichnis herunter. |
git status --short | Zeigt geänderte, vorgemerkte und unversionierte Dateien. Die linke Statusspalte beschreibt den Index, die rechte das Arbeitsverzeichnis. |
git diff | Zeigt Änderungen an versionierten Dateien, die noch nicht vorgemerkt wurden. Neue, unversionierte Dateien fehlen in dieser Ansicht. |
git diff --staged | Zeigt genau die Änderungen, die für den nächsten Commit vorgemerkt sind. |
git add FILE | Merkt den aktuellen Dateiinhalt für den nächsten Commit vor. Spätere Änderungen müssen erneut vorgemerkt werden. |
git commit -m 'Describe the change' | Speichert die vorgemerkten Änderungen als lokalen Commit mit einer aussagekräftigen Nachricht. Es wird noch nichts hochgeladen. |
git log --oneline --graph --all -20 | Zeigt die letzten 20 von allen Referenzen aus erreichbaren Commits, einschließlich Branch-Spitzen, als kompakten Graphen. |
git show COMMIT | Zeigt Nachricht und Änderungen eines Commits. COMMIT ist dessen Hash oder eine Referenz wie HEAD. |
git switch -c BRANCH | Erstellt am aktuellen Commit einen neuen Branch und wechselt dorthin. |
git switch BRANCH | Wechselt zu einem vorhandenen Branch. Git verweigert den Wechsel, wenn dadurch widersprechende lokale Änderungen überschrieben würden. |
git fetch origin | Lädt neue Remote-Commits herunter und aktualisiert Remote-Tracking-Referenzen, ohne sie in deinen Branch zu übernehmen. |
git pull --ff-only | Holt Änderungen und aktualisiert den aktuellen Branch nur, wenn kein Merge-Commit nötig ist. Bei auseinanderlaufenden Historien bricht Git ab. |
git merge BRANCH | Übernimmt einen anderen Branch in den aktuellen. Widersprechende Änderungen müssen vor Abschluss des Merges aufgelöst werden. |
git push -u origin BRANCH | Lädt den Branch hoch und setzt origin/BRANCH als Upstream für spätere Pulls und Pushes. |
git restore --staged FILE | Nimmt die Änderungen einer Datei aus dem Index, behält sie aber im Arbeitsverzeichnis. |
git restore FILE | Verwirft nicht vorgemerkte Änderungen einer versionierten Datei und stellt deren Index-Version wieder her. Die verworfenen Änderungen lassen sich nicht automatisch zurückholen. |
git revert COMMIT | Erstellt einen neuen Commit, der die Änderungen eines früheren Commits rückgängig macht. Die gemeinsame Historie bleibt erhalten. |
git stash push -u -m 'Work in progress' | Legt Änderungen und unversionierte Dateien vorübergehend beiseite; ignorierte Dateien bleiben unberührt. Hilfreich beim Aufgabenwechsel. |
git stash pop | Wendet den neuesten Stash erneut an und entfernt ihn bei Erfolg. Bei Konflikten bleibt er erhalten. |
git remote -v | Zeigt Remote-Namen sowie Fetch- und Push-URLs, damit du das verwendete Repository prüfen kannst. |
git reflog | Zeigt die letzten lokalen Bewegungen von HEAD. So lassen sich Commits nach einem versehentlichen Reset oder Branch-Wechsel wiederfinden. |
Docker: Images und Container
| Befehl | Erklärung |
|---|---|
docker version | Zeigt Versionen von Docker-Client und -Server. Fehlt die Serverantwort, ist der Daemon häufig nicht erreichbar oder der Zugriff fehlt. |
docker context ls | Listet Docker-Verbindungskontexte und zeigt den aktiven Daemon. Befehle können auch einen entfernten Rechner betreffen. |
docker pull IMAGE:TAG | Lädt ein Image aus einer Registry herunter. Ein Tag kann sich ändern; ein Image-Digest bezeichnet einen unveränderlichen Inhalt. |
docker build -t IMAGE:TAG . | Baut ein Image mit Dockerfile und Build-Kontext aus dem aktuellen Verzeichnis. .dockerignore schließt Geheimnisse und unnötige Dateien aus. |
docker image ls | Listet Images im gewählten Docker-Daemon samt Tags und Größen. |
docker run --rm -it --entrypoint sh IMAGE:TAG | Startet eine interaktive Shell anstelle des üblichen Image-Einstiegspunkts und entfernt den neuen Container beim Beenden. Das Image muss sh enthalten. |
docker run -d --name web -p 127.0.0.1:8080:80 IMAGE:TAG | Startet einen Container im Hintergrund und veröffentlicht dessen Port 80 auf Host-Port 8080, erreichbar nur über die Loopback-Schnittstelle des Hosts. |
docker ps -a | Listet laufende und gestoppte Container. Ohne -a werden nur laufende angezeigt. |
docker logs --tail 100 -f CONTAINER | Zeigt die letzten 100 Logzeilen und verfolgt neue Ausgabe über den Logging-Treiber des Containers. Ctrl+C beendet die Anzeige. |
docker exec -it CONTAINER sh | Öffnet eine weitere Shell in einem bereits laufenden Container. Es entsteht kein neuer Container; das Image muss sh enthalten. |
docker inspect CONTAINER | Zeigt Konfiguration, Mounts, Netzwerke und Zustand des Containers als JSON. Die Ausgabe kann Geheimnisse aus Umgebungsvariablen enthalten. |
docker stats | Zeigt fortlaufend CPU-, Speicher-, Netzwerk- und Datenträgernutzung laufender Container. |
docker stop CONTAINER | Fordert ein geordnetes Beenden an und erzwingt das Ende, wenn der Container innerhalb des Stop-Timeouts nicht beendet wird. |
docker start CONTAINER | Startet einen vorhandenen, gestoppten Container mit seiner bisherigen Konfiguration und beschreibbaren Schicht. |
docker rm CONTAINER | Entfernt einen gestoppten Container samt beschreibbarer Schicht. Benannte Volumes bleiben bis zu ihrer ausdrücklichen Löschung erhalten. |
docker volume create DATA | Erstellt ein benanntes Volume, dessen Daten unabhängig von den einhängenden Containern bestehen können. |
docker run -d --mount type=volume,src=DATA,dst=/data IMAGE:TAG | Hängt ein benanntes Volume unter /data in einen neuen Container ein. Dort geschriebene Daten liegen außerhalb seiner beschreibbaren Schicht. |
docker network create NETWORK | Erstellt ein benutzerdefiniertes Bridge-Netzwerk für lokale Container mit Namensauflösung zwischen verbundenen Containern. |
docker network inspect NETWORK | Zeigt ein Docker-Netzwerk und die damit verbundenen Container. |
docker login REGISTRY | Meldet dich über den unterstützten interaktiven Ablauf an einer Registry an. Nutze möglichst einen konfigurierten Credential Helper statt Klartextspeicherung. |
docker tag IMAGE:TAG REGISTRY/REPOSITORY:TAG | Gibt einem vorhandenen lokalen Image eine weitere Referenz für die gewünschte Registry und das Repository. |
docker push REGISTRY/REPOSITORY:TAG | Lädt ein Image in eine Registry hoch. Dafür brauchst du Schreibrechte auf das Repository. |
docker system df | Zeigt den Speicherverbrauch von Images, Containern, Volumes und Build-Cache, bevor du etwas entfernst. |
docker image prune | Entfernt nach Bestätigung Images ohne Tag, die nicht mehr benötigt werden. Alle ungenutzten Images mit Tag werden erst mit -a erfasst. |
Docker Compose: mehrere Dienste
| Befehl | Erklärung |
|---|---|
docker compose config --quiet | Prüft die Compose-Konfiguration, ohne den aufgelösten Inhalt auszugeben. Im Projektverzeichnis ausführen oder -f FILE angeben. |
docker compose up -d --build | Baut bei Bedarf Images, erstellt oder ersetzt Dienste und startet sie im Hintergrund. |
docker compose ps | Listet Container, Status und veröffentlichte Ports des Projekts. |
docker compose logs -f SERVICE | Verfolgt Logs eines Compose-Dienstes. Ohne SERVICE werden alle Dienste des Projekts angezeigt. |
docker compose exec SERVICE sh | Öffnet eine Shell im laufenden Container eines Dienstes, sofern dessen Image sh enthält. |
docker compose pull | Lädt Dienst-Images aus Registries. Laufende Container nutzen ihre bisherigen Images bis zur Neuerstellung weiter. |
docker compose down | Stoppt und entfernt die Projektcontainer und üblichen Projektnetzwerke. Benannte Volumes bleiben erhalten; --volumes würde projektverwaltete Volumes löschen. |
Kubernetes: Kontext und Übersicht
| Befehl | Erklärung |
|---|---|
kubectl version | Zeigt Versionen von Client und API-Server. Der Server ist nur mit passender kubeconfig und Netzwerkverbindung erreichbar. |
kubectl config get-contexts | Listet konfigurierte Cluster, Benutzer und Standard-Namespaces. Der Stern markiert den standardmäßig verwendeten Kontext. |
kubectl config current-context | Prüft den aktiven Kontext vor Änderungen an Clusterressourcen. Ein Kontext bestimmt Cluster und Zugangsdaten, nicht nur einen Namespace. |
kubectl config use-context CONTEXT | Wechselt den aktiven Kontext für nachfolgende kubectl-Befehle. |
kubectl config set-context --current --namespace=NAMESPACE | Setzt den Standard-Namespace im aktuellen Kontext. Ein ausdrückliches -n beim Befehl überschreibt ihn. |
kubectl --context=CONTEXT -n NAMESPACE get pods | Verwendet für einen Befehl einen bestimmten Kontext und Namespace, ohne die Standards zu ändern. |
kubectl cluster-info | Zeigt API-Server-Adresse und erkannte Cluster-Dienstendpunkte. Das ist ein schneller Verbindungstest, keine vollständige Zustandsprüfung. |
kubectl api-resources | Listet die vom Cluster unterstützten Ressourcentypen, Kürzel, API-Gruppen und ihre Namespace-Zuordnung. |
kubectl explain deployment.spec.template.spec.containers | Zeigt das Schema der Containerdefinitionen eines Deployments, bevor du YAML schreibst. |
kubectl get namespaces | Listet Namespaces, die namensraumgebundene Ressourcen innerhalb eines Clusters ordnen. |
kubectl create namespace NAMESPACE | Erstellt einen Namespace. Netzwerkisolation und Benutzerrechte entstehen dadurch nicht automatisch. |
kubectl get nodes -o wide | Listet Nodes mit Bereitschaft, Rollen, Versionen und Adressen. Nodes gelten clusterweit; -n ist hier nicht relevant. |
kubectl get pods -A | Listet Pods aus allen Namespaces einschließlich System-Workloads. Dafür ist clusterweites List-Recht nötig; reiner Namespace-Zugriff liefert keine Teilliste. |
kubectl get pods -n NAMESPACE -o wide | Zeigt Pods eines Namespaces mit IP-Adressen und zugewiesenen Nodes. |
kubectl get pods -n NAMESPACE -l app=APP | Filtert Pods nach einem Label. Verglichen wird der Wert des app-Labels, nicht der Pod-Name. |
kubectl get pods -n NAMESPACE --watch | Zeigt Pod-Änderungen fortlaufend. Ctrl+C beendet die Anzeige, ohne die Pods zu verändern. |
Kubernetes: Manifeste und Workloads
| Befehl | Erklärung |
|---|---|
kubectl apply --dry-run=server -f FILE | Lässt ein Manifest vom API-Server prüfen, einschließlich Admission-Prüfungen im Dry-Run, ohne die Ressource zu speichern. Serverzugriff ist nötig. |
kubectl diff -f FILE | Vergleicht den Sollzustand eines Manifests mit den aktuellen Ressourcen. Exit-Code 1 bedeutet, dass Unterschiede gefunden wurden. |
kubectl apply -f FILE | Erstellt oder aktualisiert Ressourcen aus YAML oder JSON. Ein Objekt nur aus der Datei zu entfernen, löscht es nicht aus dem Cluster. |
kubectl apply -k DIRECTORY | Verarbeitet und überträgt die Kustomize-Konfiguration eines Verzeichnisses samt Patches und Overlays. |
kubectl kustomize DIRECTORY | Erzeugt YAML aus einem Kustomize-Verzeichnis, ohne es anzuwenden. So kannst du die zusammengeführten Manifeste prüfen. |
kubectl get deployment APP -n NAMESPACE -o yaml | Zeigt das aktuelle Deployment mit Konfiguration, Metadaten und Status. Die Ausgabe enthält serververwaltete Felder und ist kein bereinigtes Quellmanifest. |
kubectl create deployment APP --image=IMAGE:TAG -n NAMESPACE --dry-run=client -o yaml | Erzeugt lokal ein grundlegendes Deployment-Manifest. Es wird ausgegeben und nicht im Cluster erstellt. |
kubectl rollout status deployment/APP -n NAMESPACE --timeout=120s | Wartet bis zu zwei Minuten auf den Abschluss eines Deployment-Rollouts, etwa nach einer Änderung. |
kubectl set image deployment/APP CONTAINER=IMAGE:TAG -n NAMESPACE | Ändert das Image eines Deployment-Containers und startet einen Rollout. Ändere auch das Quellmanifest, damit ein späteres apply die Änderung nicht zurücknimmt. |
kubectl scale deployment/APP --replicas=3 -n NAMESPACE | Setzt die gewünschte Replikazahl eines Deployments auf drei. Ein zuständiger HPA kann die Anzahl später wieder ändern. |
kubectl rollout restart deployment/APP -n NAMESPACE | Löst neue Pods gemäß der Rollout-Strategie aus, etwa um nur beim Start gelesene Konfiguration neu zu laden. |
kubectl rollout history deployment/APP -n NAMESPACE | Listet aufbewahrte Deployment-Revisionen zur Untersuchung eines Updates oder Auswahl eines Rollback-Ziels. |
kubectl rollout undo deployment/APP -n NAMESPACE | Stellt die zuvor aufbewahrte Pod-Vorlagenrevision wieder her. Externe Datenbankänderungen oder sämtliche Deployment-Einstellungen werden dadurch nicht zurückgenommen. |
kubectl get deployments,statefulsets,daemonsets -n NAMESPACE | Vergleicht gewünschte und bereite Replikate der wichtigsten Workload-Controller. Ein DaemonSet betreibt normalerweise je einen Pod pro geeignetem Node. |
kubectl get jobs,cronjobs -n NAMESPACE | Zeigt einmalige und geplante Jobs mit Abschlusszählern und Planungsstatus. |
kubectl create job JOB --from=cronjob/CRONJOB -n NAMESPACE | Startet einen einmaligen Job aus der Vorlage eines vorhandenen CronJobs, ohne auf dessen nächsten Termin zu warten. |
kubectl patch cronjob CRONJOB -n NAMESPACE --type=merge -p '{"spec":{"suspend":true}}' | Pausiert künftige CronJob-Ausführungen; bereits gestartete Jobs laufen weiter. Mit suspend: false wird die Planung fortgesetzt. |
kubectl delete -f FILE | Löscht die im Manifest bezeichneten Ressourcen. Das kann laufende Workloads entfernen; beim Löschen eines PVC kann die Rückgewinnungsrichtlinie auch das zugrunde liegende Volume löschen. |
kubectl edit deployment APP -n NAMESPACE | Öffnet das aktuelle Deployment im Editor und überträgt Änderungen beim Speichern. Übernimm sie auch ins Quellmanifest, damit die Konfigurationen nicht auseinanderlaufen. |
kubectl wait --for=condition=Ready pod/POD -n NAMESPACE --timeout=60s | Wartet bis zu einer Minute auf die Ready-Bedingung eines Pods. Anders als eine feste Pause prüft dies tatsächlich den Bereitschaftszustand. |
kubectl run POD --image=IMAGE:TAG --restart=Never -n NAMESPACE | Erstellt für ein kleines Experiment einen einzelnen Pod mit dem Standardbefehl des Images. Kein Deployment-Controller ersetzt diesen Pod nach seiner Löschung. |
kubectl label pod POD app=APP --overwrite -n NAMESPACE | Setzt oder ersetzt ein Pod-Label. Labels können die Auswahl durch Services oder Richtlinien ändern; dauerhafte Labels gehören bei verwalteten Pods in ihre Controller-Vorlage. |
kubectl annotate deployment APP owner=TEAM --overwrite -n NAMESPACE | Ergänzt beschreibende Metadaten eines Deployments, ohne dessen Pod-Vorlage zu ändern. Annotations speichern Informationen für Menschen und Werkzeuge und sind keine Label-Selektoren. |
Kubernetes: Konfiguration, Netzwerk und Speicher
| Befehl | Erklärung |
|---|---|
kubectl create configmap CONFIG --from-file=FILE -n NAMESPACE | Erstellt eine ConfigMap aus einer Datei; der Dateiname wird zum Datenschlüssel. ConfigMaps sind für nicht geheime Konfiguration gedacht. |
kubectl create secret generic SECRET --from-file=FILE -n NAMESPACE | Erstellt ein Secret aus einer lokalen Datei, ohne den Inhalt in die Befehlszeile zu schreiben. Die Base64-Darstellung verschlüsselt die gespeicherten Daten nicht selbst. |
kubectl get configmaps,secrets -n NAMESPACE | Listet Konfigurationsobjekte und Secret-Metadaten, ohne ihre Datenwerte auszugeben. |
kubectl get services -n NAMESPACE | Zeigt Service-Typen, Cluster- und externe Adressen sowie Ports. Die meisten Services wählen ihre Backend-Pods über Labels aus. |
kubectl expose deployment APP --port=80 --target-port=8080 -n NAMESPACE | Erstellt einen ClusterIP-Service, der Port 80 an Port 8080 ausgewählter Pods weiterleitet. Die Anwendung wird damit allein nicht im Internet veröffentlicht. |
kubectl get endpointslices -n NAMESPACE -l kubernetes.io/service-name=SERVICE -o yaml | Zeigt Backend-Adressen und Bereitschaftsbedingungen eines Services als YAML zur Untersuchung von Routingproblemen. |
kubectl port-forward service/SERVICE 8080:80 -n NAMESPACE | Leitet lokalen Port 8080 über einen ausgewählten Pod an Service-Port 80 weiter. Der Tunnel besteht während der Befehlsausführung und bindet standardmäßig an localhost. |
kubectl get ingress -n NAMESPACE | Zeigt HTTP-Routingregeln und zugewiesene Adressen. Ein installierter Ingress-Controller muss diese Regeln umsetzen. |
kubectl get gateways,httproutes -n NAMESPACE | Zeigt Einstiegspunkte und Routen der Gateway API. Deren Ressourcen und ein kompatibler Controller müssen installiert sein. |
kubectl get networkpolicies -n NAMESPACE | Listet definierte Netzwerkbeschränkungen für Pods. Ihre Durchsetzung setzt ein Netzwerk-Plugin mit NetworkPolicy-Unterstützung voraus. |
kubectl get pvc -n NAMESPACE | Listet PersistentVolumeClaims und ihren Bindungszustand. Pending deutet häufig auf ein Bereitstellungs- oder Zuordnungsproblem hin. |
kubectl get pv,storageclasses | Zeigt clusterweite Volumes und Speicherklassen samt Rückgewinnungsrichtlinien und Provisionern. |
kubectl describe pvc CLAIM -n NAMESPACE | Zeigt Speicheranforderungen, Bindungsinformationen und Ereignisse eines Claims zur Untersuchung fehlgeschlagener Speicherzuweisungen. |
kubectl describe resourcequotas,limitranges -n NAMESPACE | Zeigt Ressourcenbudgets des Namespaces sowie Standardwerte und zulässige Ressourcenwerte für Container. |
kubectl get hpa -n NAMESPACE | Zeigt HorizontalPodAutoscaler mit aktuellen und angestrebten Messwerten. Für die Skalierung muss die Metrikerfassung funktionieren. |
Kubernetes: Fehlersuche
| Befehl | Erklärung |
|---|---|
kubectl describe pod POD -n NAMESPACE | Zeigt Scheduling, Containerzustand, Probes, Mounts und aktuelle Ereignisse. Ein guter Einstieg bei Pending-, Absturz- oder Bereitschaftsproblemen. |
kubectl logs POD -c CONTAINER -n NAMESPACE --tail=100 | Liest die letzten 100 Logzeilen eines Containers. Gib den Container an, wenn der Pod mehrere enthält. |
kubectl logs POD -c CONTAINER -n NAMESPACE --previous | Liest verfügbare Logs der vorherigen Instanz eines neu gestarteten Containers. Hilfreich bei CrashLoopBackOff. |
kubectl logs -l app=APP --all-containers=true --prefix=true -n NAMESPACE --since=10m --tail=-1 | Sammelt alle aufbewahrten Logzeilen der letzten zehn Minuten aus passenden Pods und Containern mit Quellenangabe. --tail=-1 hebt den Label-Selektor-Standard von zehn Zeilen pro Container auf. |
kubectl exec -it POD -c CONTAINER -n NAMESPACE -- sh | Startet eine interaktive Shell im laufenden Container; das Image muss sh enthalten. Alles nach -- ist der Containerbefehl. |
kubectl cp NAMESPACE/POD:/tmp/FILE ./FILE -c CONTAINER | Kopiert eine Datei aus einem Container auf den lokalen Rechner. kubectl cp benötigt tar im Container. |
kubectl get events -n NAMESPACE --sort-by=.metadata.creationTimestamp | Listet Ereignisse nach Erstellungszeit, etwa fehlgeschlagenes Scheduling, Image-Downloads oder Volume-Mounts. Ereignisse werden nur begrenzt aufbewahrt. |
kubectl top pods -n NAMESPACE --containers | Zeigt aktuelle CPU- und Speichernutzung pro Container. Dafür ist die Ressourcenmetriken-API nötig, meist durch Metrics Server bereitgestellt. |
kubectl top nodes | Vergleicht aktuelle CPU- und Speichernutzung der Nodes über die Ressourcenmetriken-API, nicht anhand historischer Monitoringdaten. |
kubectl debug POD -it --image=DEBUG_IMAGE --target=CONTAINER --profile=general -n NAMESPACE | Fügt einem Pod einen temporären Debug-Container hinzu, wenn dem App-Image Werkzeuge fehlen. Die Sichtbarkeit der Zielprozesse hängt von Laufzeit und Rechten ab. |
kubectl get pod POD -n NAMESPACE -o jsonpath='{.status.containerStatuses[*].restartCount}' | Liest die Neustartzähler der Container aus, ohne das vollständige Pod-JSON auszugeben. jsonpath wählt Felder aus der API-Ausgabe aus. |
kubectl get pods -A --field-selector=spec.nodeName=NODE | Findet alle Pods auf einem bestimmten Node, etwa vor Wartungen oder zur Untersuchung von Node-Ausfällen. |
Kubernetes: Zugriff und Sicherheit
| Befehl | Erklärung |
|---|---|
kubectl auth can-i create deployments -n NAMESPACE | Prüft, ob deine aktuelle Identität Deployments im Namespace erstellen darf. |
kubectl auth can-i --list -n NAMESPACE | Listet erlaubte Aktionen der aktuellen Identität im Namespace. Autorisierungs-Plugins können die Vollständigkeit begrenzen. |
kubectl get roles,rolebindings -n NAMESPACE | Zeigt RBAC-Rollen auf Namespace-Ebene und ihre Zuweisungen an Identitäten. |
kubectl get clusterroles,clusterrolebindings | Zeigt clusterweite Rollendefinitionen und Bindungen. Ein ClusterRoleBinding gewährt Berechtigungen im gesamten Cluster. |
kubectl create serviceaccount SERVICEACCOUNT -n NAMESPACE | Erstellt eine Identität für Workloads. Zusätzliche Rechte entstehen erst durch passende Rollenzuweisungen. |
kubectl create role pod-reader --verb=get,list,watch --resource=pods -n NAMESPACE | Definiert eine Namespace-Rolle zum Lesen von Pod-Objekten. Sie darf diese weder ändern noch automatisch deren Logs lesen. |
kubectl create rolebinding pod-readers --role=pod-reader --serviceaccount=NAMESPACE:SERVICEACCOUNT -n NAMESPACE | Weist einem ServiceAccount die Rolle pod-reader in diesem Namespace zu. Ersetze beide Namespace-Platzhalter konsistent. |
kubectl label namespace NAMESPACE pod-security.kubernetes.io/enforce=restricted --overwrite | Erzwingt den Restricted Pod Security Standard bei neuen Pod-Zulassungen in diesem Namespace. Unpassende Workloads können abgewiesen werden; bestehende Pods werden nicht nachträglich entfernt. |
Helm: Anwendungspakete
| Befehl | Erklärung |
|---|---|
helm repo add REPO HTTPS_URL | Registriert ein Helm-Chart-Repository unter einem lokalen Namen. Im Cluster wird noch nichts installiert. |
helm repo update | Aktualisiert die Indizes konfigurierter Chart-Repositories, damit Suchen aktuelle Versionen finden. |
helm search repo REPO/CHART --versions | Listet Chart-Versionen aus den lokalen Repository-Indizes. Chart- und Anwendungsversion können unterschiedlich sein. |
helm show values REPO/CHART | Zeigt die Standardkonfiguration eines Charts, bevor du eine eigene Values-Datei schreibst. |
helm lint CHART_DIRECTORY | Prüft ein lokales Chart auf typische Struktur- und Vorlagenfehler. Das beweist noch nicht, dass es im Cluster erfolgreich läuft. |
helm template RELEASE REPO/CHART -f VALUES_FILE | Rendert Chart-Vorlagen lokal, ohne sie zu installieren. Die Ausgabe kann Secret-Daten enthalten. |
helm upgrade --install RELEASE REPO/CHART --version VERSION -n NAMESPACE --create-namespace -f VALUES_FILE --wait --timeout 5m | Installiert oder aktualisiert ein Release mit festgelegter Chart-Version und wartet bis zu fünf Minuten auf Bereitschaft. Ein Timeout nimmt Änderungen nicht automatisch zurück. |
helm list -A | Listet Helm-Releases aus allen Namespaces. Dafür ist clusterweiter Zugriff auf den konfigurierten Release-Speicher nötig, normalerweise Secrets. |
helm status RELEASE -n NAMESPACE | Zeigt Zustand, Revision und Chart-Hinweise eines Releases nach Installation oder Upgrade. |
helm history RELEASE -n NAMESPACE | Listet Release-Revisionen, um eine frühere Bereitstellung als Rollback-Ziel zu finden. |
helm rollback RELEASE REVISION -n NAMESPACE --wait | Stellt eine aufbewahrte Release-Revision wieder her. Datenmigrationen der Anwendung werden dadurch nicht rückgängig gemacht. |
helm uninstall RELEASE -n NAMESPACE | Entfernt ein Helm-Release und seine verwalteten Ressourcen. Für persistente Daten und Hook-Ressourcen können eigene Aufbewahrungsregeln gelten. |
Kubernetes: Node- und Clusterverwaltung
| Befehl | Erklärung |
|---|---|
kubectl describe node NODE | Zeigt Zustandsbedingungen, Taints, Kapazität, zugewiesene Ressourcenanforderungen und Ereignisse eines Nodes. Anforderungen sind nicht die tatsächliche aktuelle Nutzung. |
kubectl get --raw='/readyz?verbose' | Fragt die Bereitschaftsprüfungen des API-Servers ab; der Endpunkt muss erlaubt sein. Ein bereiter API-Server beweist nicht die Gesundheit aller Workloads. |
kubectl get pods -n kube-system -o wide | Zeigt System-Pods wie DNS- und Netzwerkkomponenten. Verwaltete Dienste können Control-Plane-Komponenten ausblenden. |
kubectl get pdb -A | Prüft PodDisruptionBudgets und erlaubte Unterbrechungen vor dem Leeren von Nodes. Sie begrenzen freiwillige Evictions, nicht Hardwareausfälle. |
kubectl cordon NODE | Markiert einen Node als nicht verfügbar für das normale Scheduling neuer Pods. Bestehende Pods laufen weiter. |
kubectl drain NODE --ignore-daemonsets --timeout=10m | Sperrt den Node für neues Scheduling und verdrängt geeignete Pods unter Beachtung der Unterbrechungsbudgets. DaemonSet-Pods bleiben; lokale emptyDir-Daten oder unverwaltete Pods können den Vorgang blockieren. |
kubectl uncordon NODE | Erlaubt nach der Wartung wieder das normale Scheduling neuer Pods auf dem Node. Bestehende Pods werden nicht automatisch neu verteilt. |
kubectl label node NODE workload=backend --overwrite | Setzt ein Node-Label, das Workloads per Node-Selektor oder Affinität auswählen können. Das Label allein verschiebt keine Pods. |
kubectl taint nodes NODE dedicated=backend:NoSchedule | Verhindert neues Scheduling von Pods ohne passende Toleration auf dem Node. NoSchedule entfernt keine bestehenden Pods. |
kubectl taint nodes NODE dedicated:NoSchedule- | Entfernt den NoSchedule-Taint mit Schlüssel dedicated und erlaubt damit zuvor durch ihn ausgeschlossene Pods. |
kubectl get crd | Listet CustomResourceDefinitions, die die Cluster-API um zusätzliche Ressourcentypen für Operatoren und andere Werkzeuge erweitern. |
sudo journalctl -u kubelet -n 100 --no-pager | Zeigt auf einem Linux-Node mit systemd aktuelle kubelet-Logs, wenn Pods nicht starten oder der Node NotReady wird. |
sudo crictl ps -a | Listet auf einem Node mit passend konfiguriertem crictl auch beendete Container der CRI-Laufzeit. Das funktioniert auch bei unerreichbarer Kubernetes-API. |
sudo crictl logs CONTAINER_ID | Liest Logs eines lokalen Containers über die CRI-Laufzeit, wenn kubectl logs den Node nicht erreicht. |
sudo crictl images | Listet Images der konfigurierten CRI-Laufzeit des Nodes. Bei containerd oder CRI-O ist dieser Bestand von Docker getrennt. |
Selbstverwaltete Cluster: kubeadm und etcd
| Befehl | Erklärung |
|---|---|
sudo kubeadm init --config CLUSTER_CONFIG | Initialisiert eine selbstverwaltete Control Plane aus einer vorbereiteten kubeadm-Konfiguration. Die Nodes benötigen eine kompatible Containerlaufzeit und weitere Voraussetzungen; außerdem muss ein CNI-Netzwerk-Plugin installiert werden. |
sudo kubeadm token create --print-join-command | Erzeugt auf einem kubeadm-Control-Plane-Node einen Bootstrap-Token und gibt den Worker-Beitrittsbefehl aus. Behandle den Token als Zugangsdaten und teile ihn nur mit dem zuständigen Administrator. |
sudo kubeadm join API_SERVER:6443 --token TOKEN --discovery-token-ca-cert-hash sha256:HASH | Nimmt einen vorbereiteten Worker mit Token und CA-Hash in einen selbstverwalteten kubeadm-Cluster auf. Verwaltete Dienste regeln den Node-Beitritt normalerweise selbst. |
sudo kubeadm upgrade plan | Prüft unterstützte Upgrades eines selbstverwalteten kubeadm-Clusters. Beachte das versionsspezifische Vorgehen; Kubernetes-Nebenversionen dürfen nicht übersprungen werden. |
sudo kubeadm upgrade apply VERSION | Führt nach Vorbereitung und Backups den ersten Control-Plane-Upgradeschritt auf eine unterstützte Version aus. Das vollständige Upgrade umfasst auch weitere Nodes, kubelets, kubectl und Add-ons. |
sudo kubeadm upgrade node | Übernimmt lokale kubeadm-Upgradeänderungen auf weiteren Control-Plane- oder Worker-Nodes. Das passende Vorgehen für Drain, Paketupdates und Neustarts hängt vom Node-Typ ab. |
sudo kubeadm certs check-expiration | Prüft Ablaufdaten der von kubeadm verwalteten Zertifikate eines Control-Plane-Nodes. Extern verwaltete Zertifikate benötigen einen eigenen Erneuerungsprozess. |
sudo kubeadm certs renew all | Erneuert die kubeadm-verwalteten Zertifikate dieses Nodes mit lokalen CA-Schlüsseln; auf jedem Control-Plane-Node wiederholen. CA-Zertifikate bleiben unverändert; betroffene Komponenten anschließend neu starten und kopierte kubeconfigs aktualisieren. |
etcdctl --endpoints=HTTPS_ENDPOINT --cacert=CA_FILE --cert=CERT_FILE --key=KEY_FILE endpoint health | Prüft einen autorisierten etcd-Endpunkt mit vertrauenswürdigen TLS-Zugangsdaten. Dafür ist direkter etcd-Zugriff nötig, üblicherweise in selbstverwalteten Clustern. |
etcdctl --endpoints=HTTPS_ENDPOINT --cacert=CA_FILE --cert=CERT_FILE --key=KEY_FILE snapshot save BACKUP.db | Speichert einen etcd-Snapshot von einem Endpunkt. Er enthält Kubernetes-Clusterzustand einschließlich Secrets, aber keine Anwendungsdaten auf persistenten Volumes. |
etcdutl snapshot status BACKUP.db --write-out=table | Prüft Revision, Hash, Schlüsselanzahl und Größe eines Snapshots offline mit einer kompatiblen etcdutl-Version. Eine erfolgreiche vollständige Wiederherstellung ist damit noch nicht bewiesen. |
etcdutl snapshot restore BACKUP.db --data-dir=NEW_DATA_DIRECTORY | Erstellt offline ein wiederhergestelltes etcd-Datenverzeichnis. Überschreibe keine Live-Daten; eine Kubernetes-Wiederherstellung benötigt zudem abgestimmte Mitgliedskonfiguration sowie versionsgerechte Revisionserhöhung und Kompaktierung. |