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.

Hilfe und Befehle finden

BefehlErklä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 KEYWORDDurchsucht Namen und Kurzbeschreibungen der Handbuchseiten nach einem Stichwort; hilfreich, wenn du die Aufgabe, aber den passenden Befehl noch nicht kennst.
help cdZeigt 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 --helpZeigt bei Befehlen mit --help-Unterstützung eine kurze Anleitung mit verfügbaren Optionen und Argumenten.
type -a COMMANDZeigt, 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 COMMANDZeigt, 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.

In Verzeichnissen navigieren

BefehlErklärung
pwdZeigt das aktuelle Arbeitsverzeichnis als absoluten Pfad. Relative Pfade in nachfolgenden Befehlen beginnen in diesem Verzeichnis.
ls -lahListet das aktuelle Verzeichnis auf: -l zeigt Rechte, Eigentümer, Größe und Zeit, -a auch versteckte Namen mit einem Punkt am Anfang und -h besser lesbare Größen.
cd DIRECTORYWechselt das aktuelle Verzeichnis; ein Pfad mit / am Anfang ist absolut, sonst relativ zum aktuellen Standort. Setze Pfade mit Leerzeichen in Anführungszeichen, etwa cd 'My Projects'.
cd ..Wechselt in das übergeordnete Verzeichnis. Ein Punkt (.) bezeichnet das aktuelle Verzeichnis, zwei Punkte (..) dessen übergeordnetes Verzeichnis.
cd ~Wechselt in dein Home-Verzeichnis; Bash ersetzt ein nicht zitiertes ~ durch dessen Pfad. cd ohne Argument bewirkt dasselbe.
cd -Kehrt zum vorherigen Arbeitsverzeichnis zurück und zeigt dessen Pfad. Wiederholtes Aufrufen wechselt zwischen den beiden letzten Standorten.

Dateiinhalte lesen

BefehlErklärung
cat FILESchreibt 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 FILEZeigt die ersten 20 Zeilen; -n legt die Zeilenzahl fest. Praktisch für Kopfzeilen oder den Anfang einer umfangreichen Ausgabe.
tail -n 50 FILEZeigt 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

BefehlErklä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 SESSIONStartet 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 detachTrennt 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 SESSIONVerbindet 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

BefehlErklä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 -1Findet 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' FILEZeigt 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' DIRECTORYDurchsucht 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' FILESucht 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' FILEFindet 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:]]*(#|$)' FILEZeigt 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' FILEZeigt 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' DIRECTORYDurchsucht 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

BefehlErklärung
sort -n FILESortiert 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 -nrZä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 FILELiest 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}' FILEZeigt 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' FILEZeigt 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' FILEGibt 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 FILEZählt Zeilenumbruchzeichen, normalerweise entsprechend der Anzahl der Textzeilen. -w zählt Wörter, -c Bytes und -m Zeichen.
LC_ALL=C tr '[:lower:]' '[:upper:]' < FILEWandelt 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_FILEVergleicht zwei Textdateien im Unified-Diff-Format. Exit-Status 1 bedeutet Unterschiede und keinen fehlgeschlagenen Vergleich.
base64 FILEKodiert Dateibytes als druckbaren Base64-Text. Das ist Kodierung, keine Verschlüsselung; GNU base64 bricht Zeilen um, sofern -w 0 fehlt.
base64 --decode FILEDekodiert 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

BefehlErklärung
jq '.' FILE.jsonLiest 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.jsonLiest 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.jsonGeht 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.yamlLiest 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.yamlSetzt 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

BefehlErklärung
COMMAND > FILELeitet die Standardausgabe (Datenstrom 1) in eine Datei um und erstellt oder leert sie vor dem Start des Befehls. Fehlermeldungen erscheinen weiterhin im Terminal.
COMMAND >> FILEHängt die Standardausgabe an das Dateiende an, statt den vorhandenen Inhalt zu ersetzen. Fehlt die Datei, wird sie erstellt.
COMMAND 2> ERRORS.logLeitet die Standardfehlerausgabe (Datenstrom 2) in eine Datei um und ersetzt deren bisherigen Inhalt. Die normale Ausgabe erscheint weiterhin im Terminal.
COMMAND > OUTPUT.log 2>&1Schreibt Standardausgabe und Standardfehlerausgabe in dieselbe Datei. Die Reihenfolge zählt: 2>&1 übernimmt das Ziel der Standardausgabe, nachdem > sie umgeleitet hat.
COMMAND < FILEVerwendet eine Datei als Standardeingabe (Datenstrom 0) statt der Tastatur. Der Befehl muss das Lesen aus diesem Datenstrom unterstützen.
grep -F -- 'TEXT' FILE | wc -lVerbindet 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.logZeigt 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/nullSchreibt 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

BefehlErklärung
idZeigt 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 USERSucht 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 SCRIPTErgä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 FILESetzt 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 DIRECTORYGibt 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 077Entzieht 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 COMMANDFü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 COMMANDFü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 USERErstellt 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 USERSetzt oder ändert das Passwort eines Kontos über eine interaktive Eingabe. Ohne Benutzernamen und ohne sudo ändert passwd dein eigenes Passwort.
sudo groupadd GROUPErstellt 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 USERFü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 FILELiest 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 FILEGewä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

BefehlErklä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: ' nameFragt 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'; fiFü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 DIRECTORYFü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' >&2Gibt 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"; doneFü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 < FILELiest 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 ARGUMENTFü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.shFü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 1Beendet 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 pipefailLä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 PATHZeigt die Umgebungsvariable PATH: eine durch Doppelpunkte getrennte Liste von Verzeichnissen, in denen externe Befehle gesucht werden.
env APP_ENV=test COMMANDFührt einen Befehl mit einem abweichenden Umgebungswert aus, ohne die Umgebung der aufrufenden Shell zu ändern.
unset APP_ENVEntfernt 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 20Zeigt 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.shPrüft die Bash-Syntax eines Skripts, ohne seine Befehle auszuführen. Nicht alle Logik- oder Laufzeitfehler werden dadurch gefunden.
bash -x SCRIPT.shFührt ein Skript aus und zeigt zur Fehlersuche Befehle nach der Expansion. Dabei können geheime Werte in der Ablaufspur sichtbar werden.
shellcheck SCRIPT.shPrü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

BefehlErklä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 -lZeigt 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 %1Holt 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 %1Setzt 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

BefehlErklärung
tar -czf ARCHIVE.tar.gz DIRECTORYErstellt 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.gzListet 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 DIRECTORYEntpackt 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 FILEKomprimiert 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.gzDekomprimiert eine gzip-Datei und erhält die komprimierte Eingabe. Beim Ergebnis entfällt normalerweise die Endung .gz.
sha256sum FILEBerechnet 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.sha256Prü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 DIRECTORYErstellt oder aktualisiert ein ZIP-Archiv aus einem Verzeichnisbaum. ZIP eignet sich zum Dateiaustausch mit Systemen, die üblicherweise kein tar nutzen.
unzip ARCHIVE.zip -d DIRECTORYEntpackt ein ZIP-Archiv in ein gewähltes Verzeichnis. Bei bestehenden Dateien wird standardmäßig nachgefragt; unzip -l zeigt vorab die Namen.

Systeminformationen und Herunterfahren

BefehlErklärung
uname -aZeigt Kernelversion, Rechnerarchitektur und Hostnamen an.
hostnamectlZeigt Hostnamen, Betriebssystem und Angaben zur Virtualisierung auf einem systemd-System an.
lscpuZeigt CPU-Architektur, logische Prozessoren, Kerne und Sockel an.
free -hZeigt RAM- und Swap-Nutzung in lesbaren Einheiten an. Die Spalte available schätzt den Speicher für neue Anwendungen.
uptimeZeigt Laufzeit und Lastmittelwerte der letzten 1, 5 und 15 Minuten an. Die Last umfasst ausführbare Tasks und Tasks in nicht unterbrechbarem Schlaf.
timedatectlZeigt Systemzeit, Zeitzone und Status der Zeitsynchronisierung unter systemd an.
sudo rebootStartet den Rechner sofort über die Systemverwaltung neu. Laufende Dienste werden beendet und Remote-Sitzungen getrennt.
sudo shutdown -h +10Plant das Herunterfahren in zehn Minuten und benachrichtigt angemeldete Benutzer. Speichere deine Arbeit vor dem Ausschalten.
sudo shutdown -cBricht 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-releaseZeigt Linux-Distribution und Version, bevor du distributionsspezifische Paket- oder Konfigurationsbefehle auswählst.
sysctl net.ipv4.ip_forwardLiest die IPv4-Weiterleitungseinstellung des Kernels. Der Lesezugriff ändert nichts; dauerhafte Anpassungen gehören in die sysctl-Konfiguration.

Prozesse, Signale und Leistung

BefehlErklärung
ps auxListet Prozesse mit Besitzer, CPU- und Speichernutzung, Status und Befehlszeile auf.
ps -eo pid,ppid,user,%cpu,%mem,stat,cmd --sort=-%cpuListet 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.
topBeobachtet Prozesse, CPU-Nutzung und Speicher interaktiv. Mit q beendest du die Anzeige.
kill -TERM PIDFordert einen eigenen Prozess zum geordneten Beenden auf. Verwende seine numerische Prozess-ID; bei fremden Prozessen ist meist sudo nötig.
kill -KILL PIDBeendet einen eigenen Prozess sofort ohne Aufräumen. Nutze dies nur, wenn geordnetes Beenden scheitert; ungespeicherte Arbeit kann verloren gehen.
kill -STOP PIDPausiert einen eigenen Prozess, ohne ihn zu beenden. Seine Ressourcen bleiben belegt und Clients können in Zeitüberschreitungen laufen.
kill -CONT PIDSetzt einen angehaltenen eigenen Prozess fort.
nice -n 10 COMMANDStartet einen Befehl mit einem höheren Nice-Wert, wodurch er bei CPU-Konkurrenz eine niedrigere Priorität erhält.
renice 10 -p PIDSetzt den Nice-Wert eines laufenden Prozesses auf 10. Ohne erhöhte Rechte kannst du normalerweise nur die Priorität eigener Prozesse senken.
vmstat 1 5Erfasst 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 5Zeigt 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 PIDListet Dateien, Sockets und andere offene Handles eines Prozesses auf. Benötigt lsof; erhöhte Rechte erlauben die Prüfung fremder Prozesse.
htopZeigt 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 COMMANDMisst 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 COMMANDFordert 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 -nZeigt das weiche Limit offener Dateideskriptoren der aktuellen Shell, das neue Kindprozesse erben. Ein systemd-Dienst kann ein anderes Limit haben.
sudo strace -f -p PIDVerfolgt 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

BefehlErklärung
systemctl status SERVICE.serviceZeigt den aktuellen Dienststatus und die letzten Logeinträge an.
systemctl --failedListet systemd-Units auf, die aktuell als fehlgeschlagen gelten.
systemctl list-unit-files --type=serviceListet installierte Service-Unit-Dateien und ihren Aktivierungsstatus auf.
systemctl cat SERVICE.serviceLiest die Unit-Datei eines Dienstes und ihre Konfigurationsergänzungen vom Datenträger.
sudo systemctl start SERVICE.serviceStartet einen Dienst sofort, ohne seine Startkonfiguration zu ändern.
sudo systemctl stop SERVICE.serviceStoppt einen Dienst sofort und unterbricht seine Arbeit sowie verbundene Clients.
sudo systemctl restart SERVICE.serviceStoppt und startet einen Dienst und unterbricht kurz seine Verfügbarkeit.
sudo systemctl reload SERVICE.serviceFordert einen laufenden Dienst zum Neuladen seiner Konfiguration auf; der Dienst muss dies unterstützen.
sudo systemctl enable --now SERVICE.serviceKonfiguriert die automatische Aktivierung eines Dienstes und startet ihn sofort.
sudo systemctl disable --now SERVICE.serviceEntfernt automatische Aktivierungsverknüpfungen und stoppt den Dienst; Abhängigkeiten können ihn weiterhin starten.
sudo systemctl daemon-reloadLädt systemd-Unit-Definitionen nach Dateiänderungen neu; Dienste laufen weiter.

Logs und geplante Aufgaben

BefehlErklärung
sudo journalctl -u SERVICE.service -n 100 --no-pagerGibt 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.serviceZeigt neue Journal-Einträge eines Dienstes fortlaufend an. Mit Strg+C beendest du die Anzeige.
sudo journalctl -b -1Liest die Logs des vorherigen Systemstarts, sofern das Journal sie über Neustarts hinweg gespeichert hat.
sudo journalctl --since '1 hour ago' -p warningZeigt Warnungen und schwerwiegendere Journal-Einträge der letzten Stunde an.
sudo dmesg --humanLiest den Kernel-Meldungspuffer in lesbarem Format, etwa zur Suche nach Hardware- und Treiberfehlern.
systemctl list-timers --allListet geladene systemd-Timer einschließlich inaktiver Timer mit nächster und letzter Ausführung auf.
crontab -lZeigt die wiederkehrenden Cron-Jobs deines Benutzers an. Benötigt cron oder einen kompatiblen Scheduler.
crontab -eBearbeitet 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/COMMANDPlant 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

BefehlErklärung
sudo apt updateAktualisiert Paketinformationen aus den konfigurierten Repositories. Installierte Pakete bleiben unverändert.
apt list --upgradableListet installierte Pakete auf, für die die heruntergeladenen Paketinformationen neuere Versionen enthalten.
sudo apt upgradeInstalliert verfügbare Paketaktualisierungen, ohne installierte Pakete zu entfernen. Prüfe die vorgeschlagenen Änderungen; aktualisierte Dienste können neu starten.
apt search TERMDurchsucht Paketnamen und Beschreibungen in den lokalen Repository-Metadaten.
apt show PACKAGEZeigt Beschreibung, Version, Abhängigkeiten und weitere Metadaten eines Pakets an.
sudo apt install PACKAGEInstalliert ein Paket mit Abhängigkeiten oder aktualisiert ein bereits installiertes Paket. Die Einrichtung kann Dienste starten.
sudo apt remove PACKAGEEntfernt ein Paket und behält normalerweise seine Systemkonfiguration. Prüfe abhängige Pakete, die ebenfalls entfernt werden sollen.
sudo apt purge PACKAGEEntfernt ein Paket und seine verwaltete Systemkonfiguration. Dateien in den Home-Verzeichnissen bleiben erhalten.
sudo apt autoremoveEntfernt 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

BefehlErklärung
dnf check-updatePrüft verfügbare Paketaktualisierungen mit DNF 4. Status 100 zeigt verfügbare Updates an; Pakete werden nicht aktualisiert.
dnf5 check-upgradePrüft verfügbare Paketaktualisierungen mit DNF 5. Status 100 zeigt verfügbare Updates an; Pakete werden nicht aktualisiert.
dnf search TERMDurchsucht Paketnamen und Kurzbeschreibungen in aktivierten Repositories.
dnf info PACKAGEZeigt Paketversionen, Beschreibungen und Repository-Informationen an.
sudo dnf install PACKAGEInstalliert ein Paket und seine Abhängigkeiten aus aktivierten Repositories. Prüfe die Transaktion vor der Bestätigung.
sudo dnf upgradeAktualisiert 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 PACKAGEEntfernt ein Paket und davon abhängige Pakete. Prüfe die Liste, da auch weitere Software entfernt werden kann.
rpm -qf /PATH/TO/FILEErmittelt das installierte RPM-Paket, zu dem eine Datei gehört.

Datenträger, Dateisysteme und Mounts

BefehlErklärung
df -hZeigt belegten und verfügbaren Platz eingehängter Dateisysteme in lesbaren Einheiten an.
df -iZeigt die Inode-Nutzung an. Einem Dateisystem können Inodes ausgehen, obwohl noch Speicherplatz frei ist.
lsblk -fZeigt Blockgeräte mit Dateisystemtypen, Labels, UUIDs und Einhängepunkten an.
sudo blkidLiest Dateisystemkennungen von Blockgeräten aus, etwa für dauerhafte Mounts anhand einer UUID.
findmnt --target /PATHErmittelt das eingehängte Dateisystem eines Pfads und zeigt Quelle sowie Mount-Optionen an.
sudo fdisk -lListet Datenträger und Partitionstabellen auf, ohne sie zu verändern.
sudo mount /dev/DEVICE /MOUNTPOINTHä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 /MOUNTPOINTHängt ein Dateisystem vor dem Trennen oder Prüfen aus. Schließe zuvor Dateien und verlasse Verzeichnisse auf diesem Mount.
sudo mkfs.ext4 /dev/DEVICEErstellt 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/DEVICEPrü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/DEVICEVergröß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 /MOUNTPOINTVergrößert ein eingehängtes XFS-Dateisystem nach dem Vergrößern der Partition oder des logischen Volumes. Dieser Befehl verkleinert XFS nicht.
du -sh DIRECTORYSchä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 -hVergleicht 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 +L1Findet offene Dateien, deren Verzeichniseinträge gelöscht wurden. Ihr Speicher kann belegt bleiben, bis der letzte offene Dateideskriptor geschlossen wird.
findmnt --verify --verbosePrü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

BefehlErklärung
sudo pvsListet physische LVM-Volumes und ihre Volume-Gruppen auf. Benötigt die LVM-Werkzeuge.
sudo vgsZeigt LVM-Volume-Gruppen, Gesamtkapazität und freien Platz für logische Volumes an.
sudo lvs -o +devicesListet logische Volumes und die zugrunde liegenden physischen Geräte auf.
sudo pvcreate /dev/DEVICEInitialisiert 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/DEVICEErstellt eine Volume-Gruppe aus einem vorbereiteten physischen LVM-Volume, das keiner anderen Gruppe angehört.
sudo lvcreate -L 10G -n LV_NAME VG_NAMEReserviert 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_NAMEErweitert 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 --showListet aktive Swap-Geräte und -Dateien mit Größe, Nutzung und Priorität auf.
sudo mkswap /dev/DEVICEFormatiert 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/DEVICEAktiviert 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/DEVICEDeaktiviert 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

BefehlErklärung
ip -br addressZeigt Netzwerkschnittstellen sowie zugewiesene IPv4- und IPv6-Adressen in einer kompakten Tabelle an.
ip -s linkZeigt Schnittstellenstatus und Paketzähler einschließlich Fehlern und verworfenen Paketen an.
ip routeZeigt die Haupt-Routingtabelle für IPv4 einschließlich Standardgateway an.
ip route get IP_ADDRESSFragt den Kernel, welche Route, Schnittstelle und Quelladresse er für ein Ziel verwenden würde.
ip neighZeigt benachbarte Hosts und zwischengespeicherte Link-Layer-Adressen an, darunter IPv4-ARP- und IPv6-Nachbareinträge.
sudo ip link set dev INTERFACE upAktiviert eine Netzwerkschnittstelle administrativ. Dies weist keine IP-Adresse zu und ist keine dauerhafte Netzwerkkonfiguration.
sudo ip address add IP_ADDRESS/PREFIX dev INTERFACEFü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 INTERFACEEntfernt eine Schnittstellenadresse zur Laufzeit. Verbindungen über diese Adresse können sofort abbrechen.
sudo ip route add NETWORK/PREFIX via GATEWAY dev INTERFACEFü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 INTERFACEEntfernt die passende Laufzeitroute. Verkehr, der sie benötigt, erreicht sein Ziel möglicherweise nicht mehr.
ping -c 4 HOSTSendet vier ICMP-Echo-Anfragen zur Prüfung von Erreichbarkeit und Laufzeit. Fehlende Antworten können auch durch ICMP-Filter entstehen.
tracepath HOSTVerfolgt Netzwerkstationen und ermittelt die Pfad-MTU ohne root. Benötigt tracepath; Router antworten möglicherweise nicht.
sudo ss -lntupZeigt lauschende TCP- und UDP-Sockets mit numerischen Adressen und zugehörigen Prozessen an. Erhöhte Rechte zeigen auch fremde Prozesse.
ss -tn state establishedListet aufgebaute TCP-Verbindungen mit numerischen Adressen und Ports auf.
getent ahosts HOSTLöst einen Hostnamen über die konfigurierten Namensdienste des Systems auf, einschließlich Hosts-Dateien und DNS.
resolvectl statusZeigt DNS-Server und Resolver-Einstellungen je Schnittstelle an, wenn systemd-resolved verwendet wird.
dig HOST A +shortFragt 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 AAAAFragt einen bestimmten DNS-Server nach IPv6-Einträgen ab und zeigt Antwortstatus sowie Details an.
nc -vz -w 3 HOST PORTPrü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 routeZeigt IPv6-Routen einschließlich des IPv6-Standardgateways. IPv4 und IPv6 führen getrennte Routingtabellen.

HTTP- und TLS-Diagnose

BefehlErklärung
curl -I https://HOSTSendet eine HTTP-HEAD-Anfrage und zeigt Antwortheader an. Manche Server behandeln HEAD anders als GET.
curl --fail --location --output FILE https://HOST/PATHLädt eine URL herunter, folgt Weiterleitungen und meldet HTTP-Fehler. Die Ausgabedatei wird erstellt oder überschrieben.
curl -v https://HOSTZeigt 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/nullPrü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

BefehlErklärung
sudo ufw status numberedZeigt Status und nummerierte Regeln auf einem mit UFW verwalteten Host an.
sudo ufw allow PORT/tcpFügt eine dauerhafte UFW-Regel hinzu, die eingehenden TCP-Verkehr zu einem Port erlaubt. Bei aktivem UFW wirkt sie sofort.
sudo ufw enableAktiviert 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_NUMBEREntfernt 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-zonesZeigt auf einem firewalld-Host die Zonen an, die Schnittstellen oder Quelladressen zugeordnet sind.
sudo firewall-cmd --zone=ZONE --list-allZeigt aktive Dienste, Ports und weitere Laufzeiteinstellungen einer firewalld-Zone an.
sudo firewall-cmd --permanent --zone=ZONE --add-port=PORT/tcpErlaubt einen eingehenden TCP-Port in der gespeicherten firewalld-Zonenkonfiguration. Die Änderung wird nach Neuladen oder Neustart wirksam.
sudo firewall-cmd --reloadErsetzt firewalld-Laufzeiteinstellungen durch die gespeicherte Konfiguration. Reine Laufzeitänderungen gehen normalerweise verloren; prüfe zuvor die gespeicherte SSH-Freigabe.
sudo nft list rulesetZeigt das aktive nftables-Regelwerk an, einschließlich Regeln eines Firewall-Managers mit nftables-Backend.

SSH, SCP und rsync

BefehlErklä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@HOSTVerbindet 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@HOSTGibt Diagnoseinformationen zu SSH-Verbindung und Authentifizierung aus, um Anmeldefehler zu untersuchen.
ssh-keygen -t ed25519 -f ~/.ssh/KEY_NAMEErzeugt 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@HOSTTrä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_HOSTLeitet 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@TARGETErreicht 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_KEYLä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

BefehlErklärung
git clone URLLädt ein Repository mit seiner Historie in ein neues lokales Verzeichnis herunter.
git status --shortZeigt geänderte, vorgemerkte und unversionierte Dateien. Die linke Statusspalte beschreibt den Index, die rechte das Arbeitsverzeichnis.
git diffZeigt Änderungen an versionierten Dateien, die noch nicht vorgemerkt wurden. Neue, unversionierte Dateien fehlen in dieser Ansicht.
git diff --stagedZeigt genau die Änderungen, die für den nächsten Commit vorgemerkt sind.
git add FILEMerkt 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 -20Zeigt die letzten 20 von allen Referenzen aus erreichbaren Commits, einschließlich Branch-Spitzen, als kompakten Graphen.
git show COMMITZeigt Nachricht und Änderungen eines Commits. COMMIT ist dessen Hash oder eine Referenz wie HEAD.
git switch -c BRANCHErstellt am aktuellen Commit einen neuen Branch und wechselt dorthin.
git switch BRANCHWechselt zu einem vorhandenen Branch. Git verweigert den Wechsel, wenn dadurch widersprechende lokale Änderungen überschrieben würden.
git fetch originLädt neue Remote-Commits herunter und aktualisiert Remote-Tracking-Referenzen, ohne sie in deinen Branch zu übernehmen.
git pull --ff-onlyHolt Ä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 BRANCHLädt den Branch hoch und setzt origin/BRANCH als Upstream für spätere Pulls und Pushes.
git restore --staged FILENimmt die Änderungen einer Datei aus dem Index, behält sie aber im Arbeitsverzeichnis.
git restore FILEVerwirft nicht vorgemerkte Änderungen einer versionierten Datei und stellt deren Index-Version wieder her. Die verworfenen Änderungen lassen sich nicht automatisch zurückholen.
git revert COMMITErstellt 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 popWendet den neuesten Stash erneut an und entfernt ihn bei Erfolg. Bei Konflikten bleibt er erhalten.
git remote -vZeigt Remote-Namen sowie Fetch- und Push-URLs, damit du das verwendete Repository prüfen kannst.
git reflogZeigt die letzten lokalen Bewegungen von HEAD. So lassen sich Commits nach einem versehentlichen Reset oder Branch-Wechsel wiederfinden.

Docker: Images und Container

BefehlErklärung
docker versionZeigt Versionen von Docker-Client und -Server. Fehlt die Serverantwort, ist der Daemon häufig nicht erreichbar oder der Zugriff fehlt.
docker context lsListet Docker-Verbindungskontexte und zeigt den aktiven Daemon. Befehle können auch einen entfernten Rechner betreffen.
docker pull IMAGE:TAGLä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 lsListet Images im gewählten Docker-Daemon samt Tags und Größen.
docker run --rm -it --entrypoint sh IMAGE:TAGStartet 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:TAGStartet einen Container im Hintergrund und veröffentlicht dessen Port 80 auf Host-Port 8080, erreichbar nur über die Loopback-Schnittstelle des Hosts.
docker ps -aListet laufende und gestoppte Container. Ohne -a werden nur laufende angezeigt.
docker logs --tail 100 -f CONTAINERZeigt 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 CONTAINERZeigt Konfiguration, Mounts, Netzwerke und Zustand des Containers als JSON. Die Ausgabe kann Geheimnisse aus Umgebungsvariablen enthalten.
docker statsZeigt fortlaufend CPU-, Speicher-, Netzwerk- und Datenträgernutzung laufender Container.
docker stop CONTAINERFordert ein geordnetes Beenden an und erzwingt das Ende, wenn der Container innerhalb des Stop-Timeouts nicht beendet wird.
docker start CONTAINERStartet einen vorhandenen, gestoppten Container mit seiner bisherigen Konfiguration und beschreibbaren Schicht.
docker rm CONTAINEREntfernt einen gestoppten Container samt beschreibbarer Schicht. Benannte Volumes bleiben bis zu ihrer ausdrücklichen Löschung erhalten.
docker volume create DATAErstellt 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:TAGHängt ein benanntes Volume unter /data in einen neuen Container ein. Dort geschriebene Daten liegen außerhalb seiner beschreibbaren Schicht.
docker network create NETWORKErstellt ein benutzerdefiniertes Bridge-Netzwerk für lokale Container mit Namensauflösung zwischen verbundenen Containern.
docker network inspect NETWORKZeigt ein Docker-Netzwerk und die damit verbundenen Container.
docker login REGISTRYMeldet 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:TAGGibt einem vorhandenen lokalen Image eine weitere Referenz für die gewünschte Registry und das Repository.
docker push REGISTRY/REPOSITORY:TAGLädt ein Image in eine Registry hoch. Dafür brauchst du Schreibrechte auf das Repository.
docker system dfZeigt den Speicherverbrauch von Images, Containern, Volumes und Build-Cache, bevor du etwas entfernst.
docker image pruneEntfernt 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

BefehlErklärung
docker compose config --quietPrüft die Compose-Konfiguration, ohne den aufgelösten Inhalt auszugeben. Im Projektverzeichnis ausführen oder -f FILE angeben.
docker compose up -d --buildBaut bei Bedarf Images, erstellt oder ersetzt Dienste und startet sie im Hintergrund.
docker compose psListet Container, Status und veröffentlichte Ports des Projekts.
docker compose logs -f SERVICEVerfolgt 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 pullLädt Dienst-Images aus Registries. Laufende Container nutzen ihre bisherigen Images bis zur Neuerstellung weiter.
docker compose downStoppt und entfernt die Projektcontainer und üblichen Projektnetzwerke. Benannte Volumes bleiben erhalten; --volumes würde projektverwaltete Volumes löschen.

Kubernetes: Kontext und Übersicht

BefehlErklärung
kubectl versionZeigt Versionen von Client und API-Server. Der Server ist nur mit passender kubeconfig und Netzwerkverbindung erreichbar.
kubectl config get-contextsListet konfigurierte Cluster, Benutzer und Standard-Namespaces. Der Stern markiert den standardmäßig verwendeten Kontext.
kubectl config current-contextPrüft den aktiven Kontext vor Änderungen an Clusterressourcen. Ein Kontext bestimmt Cluster und Zugangsdaten, nicht nur einen Namespace.
kubectl config use-context CONTEXTWechselt den aktiven Kontext für nachfolgende kubectl-Befehle.
kubectl config set-context --current --namespace=NAMESPACESetzt den Standard-Namespace im aktuellen Kontext. Ein ausdrückliches -n beim Befehl überschreibt ihn.
kubectl --context=CONTEXT -n NAMESPACE get podsVerwendet für einen Befehl einen bestimmten Kontext und Namespace, ohne die Standards zu ändern.
kubectl cluster-infoZeigt API-Server-Adresse und erkannte Cluster-Dienstendpunkte. Das ist ein schneller Verbindungstest, keine vollständige Zustandsprüfung.
kubectl api-resourcesListet die vom Cluster unterstützten Ressourcentypen, Kürzel, API-Gruppen und ihre Namespace-Zuordnung.
kubectl explain deployment.spec.template.spec.containersZeigt das Schema der Containerdefinitionen eines Deployments, bevor du YAML schreibst.
kubectl get namespacesListet Namespaces, die namensraumgebundene Ressourcen innerhalb eines Clusters ordnen.
kubectl create namespace NAMESPACEErstellt einen Namespace. Netzwerkisolation und Benutzerrechte entstehen dadurch nicht automatisch.
kubectl get nodes -o wideListet Nodes mit Bereitschaft, Rollen, Versionen und Adressen. Nodes gelten clusterweit; -n ist hier nicht relevant.
kubectl get pods -AListet 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 wideZeigt Pods eines Namespaces mit IP-Adressen und zugewiesenen Nodes.
kubectl get pods -n NAMESPACE -l app=APPFiltert Pods nach einem Label. Verglichen wird der Wert des app-Labels, nicht der Pod-Name.
kubectl get pods -n NAMESPACE --watchZeigt Pod-Änderungen fortlaufend. Ctrl+C beendet die Anzeige, ohne die Pods zu verändern.

Kubernetes: Manifeste und Workloads

BefehlErklärung
kubectl apply --dry-run=server -f FILELä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 FILEVergleicht den Sollzustand eines Manifests mit den aktuellen Ressourcen. Exit-Code 1 bedeutet, dass Unterschiede gefunden wurden.
kubectl apply -f FILEErstellt 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 DIRECTORYVerarbeitet und überträgt die Kustomize-Konfiguration eines Verzeichnisses samt Patches und Overlays.
kubectl kustomize DIRECTORYErzeugt YAML aus einem Kustomize-Verzeichnis, ohne es anzuwenden. So kannst du die zusammengeführten Manifeste prüfen.
kubectl get deployment APP -n NAMESPACE -o yamlZeigt 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 yamlErzeugt lokal ein grundlegendes Deployment-Manifest. Es wird ausgegeben und nicht im Cluster erstellt.
kubectl rollout status deployment/APP -n NAMESPACE --timeout=120sWartet 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 NAMESPACESetzt 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 NAMESPACELöst neue Pods gemäß der Rollout-Strategie aus, etwa um nur beim Start gelesene Konfiguration neu zu laden.
kubectl rollout history deployment/APP -n NAMESPACEListet aufbewahrte Deployment-Revisionen zur Untersuchung eines Updates oder Auswahl eines Rollback-Ziels.
kubectl rollout undo deployment/APP -n NAMESPACEStellt 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 NAMESPACEVergleicht gewünschte und bereite Replikate der wichtigsten Workload-Controller. Ein DaemonSet betreibt normalerweise je einen Pod pro geeignetem Node.
kubectl get jobs,cronjobs -n NAMESPACEZeigt einmalige und geplante Jobs mit Abschlusszählern und Planungsstatus.
kubectl create job JOB --from=cronjob/CRONJOB -n NAMESPACEStartet 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 FILELö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=60sWartet 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 NAMESPACEErstellt 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 NAMESPACESetzt 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 NAMESPACEErgä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

BefehlErklärung
kubectl create configmap CONFIG --from-file=FILE -n NAMESPACEErstellt 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 NAMESPACEErstellt 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 NAMESPACEListet Konfigurationsobjekte und Secret-Metadaten, ohne ihre Datenwerte auszugeben.
kubectl get services -n NAMESPACEZeigt 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 NAMESPACEErstellt 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 yamlZeigt Backend-Adressen und Bereitschaftsbedingungen eines Services als YAML zur Untersuchung von Routingproblemen.
kubectl port-forward service/SERVICE 8080:80 -n NAMESPACELeitet 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 NAMESPACEZeigt HTTP-Routingregeln und zugewiesene Adressen. Ein installierter Ingress-Controller muss diese Regeln umsetzen.
kubectl get gateways,httproutes -n NAMESPACEZeigt Einstiegspunkte und Routen der Gateway API. Deren Ressourcen und ein kompatibler Controller müssen installiert sein.
kubectl get networkpolicies -n NAMESPACEListet definierte Netzwerkbeschränkungen für Pods. Ihre Durchsetzung setzt ein Netzwerk-Plugin mit NetworkPolicy-Unterstützung voraus.
kubectl get pvc -n NAMESPACEListet PersistentVolumeClaims und ihren Bindungszustand. Pending deutet häufig auf ein Bereitstellungs- oder Zuordnungsproblem hin.
kubectl get pv,storageclassesZeigt clusterweite Volumes und Speicherklassen samt Rückgewinnungsrichtlinien und Provisionern.
kubectl describe pvc CLAIM -n NAMESPACEZeigt Speicheranforderungen, Bindungsinformationen und Ereignisse eines Claims zur Untersuchung fehlgeschlagener Speicherzuweisungen.
kubectl describe resourcequotas,limitranges -n NAMESPACEZeigt Ressourcenbudgets des Namespaces sowie Standardwerte und zulässige Ressourcenwerte für Container.
kubectl get hpa -n NAMESPACEZeigt HorizontalPodAutoscaler mit aktuellen und angestrebten Messwerten. Für die Skalierung muss die Metrikerfassung funktionieren.

Kubernetes: Fehlersuche

BefehlErklärung
kubectl describe pod POD -n NAMESPACEZeigt Scheduling, Containerzustand, Probes, Mounts und aktuelle Ereignisse. Ein guter Einstieg bei Pending-, Absturz- oder Bereitschaftsproblemen.
kubectl logs POD -c CONTAINER -n NAMESPACE --tail=100Liest die letzten 100 Logzeilen eines Containers. Gib den Container an, wenn der Pod mehrere enthält.
kubectl logs POD -c CONTAINER -n NAMESPACE --previousLiest 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=-1Sammelt 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 -- shStartet eine interaktive Shell im laufenden Container; das Image muss sh enthalten. Alles nach -- ist der Containerbefehl.
kubectl cp NAMESPACE/POD:/tmp/FILE ./FILE -c CONTAINERKopiert eine Datei aus einem Container auf den lokalen Rechner. kubectl cp benötigt tar im Container.
kubectl get events -n NAMESPACE --sort-by=.metadata.creationTimestampListet Ereignisse nach Erstellungszeit, etwa fehlgeschlagenes Scheduling, Image-Downloads oder Volume-Mounts. Ereignisse werden nur begrenzt aufbewahrt.
kubectl top pods -n NAMESPACE --containersZeigt aktuelle CPU- und Speichernutzung pro Container. Dafür ist die Ressourcenmetriken-API nötig, meist durch Metrics Server bereitgestellt.
kubectl top nodesVergleicht 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 NAMESPACEFü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=NODEFindet alle Pods auf einem bestimmten Node, etwa vor Wartungen oder zur Untersuchung von Node-Ausfällen.

Kubernetes: Zugriff und Sicherheit

BefehlErklärung
kubectl auth can-i create deployments -n NAMESPACEPrüft, ob deine aktuelle Identität Deployments im Namespace erstellen darf.
kubectl auth can-i --list -n NAMESPACEListet erlaubte Aktionen der aktuellen Identität im Namespace. Autorisierungs-Plugins können die Vollständigkeit begrenzen.
kubectl get roles,rolebindings -n NAMESPACEZeigt RBAC-Rollen auf Namespace-Ebene und ihre Zuweisungen an Identitäten.
kubectl get clusterroles,clusterrolebindingsZeigt clusterweite Rollendefinitionen und Bindungen. Ein ClusterRoleBinding gewährt Berechtigungen im gesamten Cluster.
kubectl create serviceaccount SERVICEACCOUNT -n NAMESPACEErstellt 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 NAMESPACEDefiniert 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 NAMESPACEWeist 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 --overwriteErzwingt 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

BefehlErklärung
helm repo add REPO HTTPS_URLRegistriert ein Helm-Chart-Repository unter einem lokalen Namen. Im Cluster wird noch nichts installiert.
helm repo updateAktualisiert die Indizes konfigurierter Chart-Repositories, damit Suchen aktuelle Versionen finden.
helm search repo REPO/CHART --versionsListet Chart-Versionen aus den lokalen Repository-Indizes. Chart- und Anwendungsversion können unterschiedlich sein.
helm show values REPO/CHARTZeigt die Standardkonfiguration eines Charts, bevor du eine eigene Values-Datei schreibst.
helm lint CHART_DIRECTORYPrü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_FILERendert 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 5mInstalliert 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 -AListet Helm-Releases aus allen Namespaces. Dafür ist clusterweiter Zugriff auf den konfigurierten Release-Speicher nötig, normalerweise Secrets.
helm status RELEASE -n NAMESPACEZeigt Zustand, Revision und Chart-Hinweise eines Releases nach Installation oder Upgrade.
helm history RELEASE -n NAMESPACEListet Release-Revisionen, um eine frühere Bereitstellung als Rollback-Ziel zu finden.
helm rollback RELEASE REVISION -n NAMESPACE --waitStellt eine aufbewahrte Release-Revision wieder her. Datenmigrationen der Anwendung werden dadurch nicht rückgängig gemacht.
helm uninstall RELEASE -n NAMESPACEEntfernt ein Helm-Release und seine verwalteten Ressourcen. Für persistente Daten und Hook-Ressourcen können eigene Aufbewahrungsregeln gelten.

Kubernetes: Node- und Clusterverwaltung

BefehlErklärung
kubectl describe node NODEZeigt 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 wideZeigt System-Pods wie DNS- und Netzwerkkomponenten. Verwaltete Dienste können Control-Plane-Komponenten ausblenden.
kubectl get pdb -APrüft PodDisruptionBudgets und erlaubte Unterbrechungen vor dem Leeren von Nodes. Sie begrenzen freiwillige Evictions, nicht Hardwareausfälle.
kubectl cordon NODEMarkiert einen Node als nicht verfügbar für das normale Scheduling neuer Pods. Bestehende Pods laufen weiter.
kubectl drain NODE --ignore-daemonsets --timeout=10mSperrt 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 NODEErlaubt 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 --overwriteSetzt 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:NoScheduleVerhindert 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 crdListet CustomResourceDefinitions, die die Cluster-API um zusätzliche Ressourcentypen für Operatoren und andere Werkzeuge erweitern.
sudo journalctl -u kubelet -n 100 --no-pagerZeigt auf einem Linux-Node mit systemd aktuelle kubelet-Logs, wenn Pods nicht starten oder der Node NotReady wird.
sudo crictl ps -aListet auf einem Node mit passend konfiguriertem crictl auch beendete Container der CRI-Laufzeit. Das funktioniert auch bei unerreichbarer Kubernetes-API.
sudo crictl logs CONTAINER_IDLiest Logs eines lokalen Containers über die CRI-Laufzeit, wenn kubectl logs den Node nicht erreicht.
sudo crictl imagesListet Images der konfigurierten CRI-Laufzeit des Nodes. Bei containerd oder CRI-O ist dieser Bestand von Docker getrennt.

Selbstverwaltete Cluster: kubeadm und etcd

BefehlErklärung
sudo kubeadm init --config CLUSTER_CONFIGInitialisiert 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-commandErzeugt 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:HASHNimmt 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 planPrüft unterstützte Upgrades eines selbstverwalteten kubeadm-Clusters. Beachte das versionsspezifische Vorgehen; Kubernetes-Nebenversionen dürfen nicht übersprungen werden.
sudo kubeadm upgrade apply VERSIONFü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-expirationPrüft Ablaufdaten der von kubeadm verwalteten Zertifikate eines Control-Plane-Nodes. Extern verwaltete Zertifikate benötigen einen eigenen Erneuerungsprozess.
sudo kubeadm certs renew allErneuert 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 healthPrü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.dbSpeichert 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=tablePrü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_DIRECTORYErstellt offline ein wiederhergestelltes etcd-Datenverzeichnis. Überschreibe keine Live-Daten; eine Kubernetes-Wiederherstellung benötigt zudem abgestimmte Mitgliedskonfiguration sowie versionsgerechte Revisionserhöhung und Kompaktierung.