Start·Terminal-Befehle

Terminal-Befehle im Überblick

227 Befehle mit den Optionen, die man wirklich braucht, und je einem Beispiel

⌨️ Befehle und Optionen werden so eingegeben, wie sie stehen, und deshalb nicht übersetzt — nur die Erklärungen folgen deiner Sprache.

Dateien und Verzeichnisse32

Verschieben, löschen, finden. Manches fragt nicht zweimal — deshalb wird -i zur Gewohnheit.

lsListet den Inhalt eines Verzeichnisses; Namen mit führendem Punkt erscheinen erst mit -a.cdWechselt das aktuelle Verzeichnis der Shell; als eingebautes Kommando bewegt ein cd in einem Skript oder einer Subshell die äußere Shell nicht.pwdZeigt das aktuelle Verzeichnis; sind Sie über einen Symlink hineingelangt, erscheint der Link-Pfad, den echten liefert nur -P.mkdirErstellt ein Verzeichnis; ohne -p scheitert es, wenn ein übergeordnetes Verzeichnis fehlt oder das Ziel schon existiert.rmdirLöscht ein Verzeichnis nur, wenn es leer ist; alles darin führt zur Verweigerung — daher greift man zu rm -r.rmLöscht Dateien endgültig — es gibt keinen Papierkorb, und ein verirrtes Leerzeichen in rm -rf vernichtet das Falsche.cpKopiert Dateien oder ganze Bäume; ob das Ziel schon existiert, entscheidet, ob die Quelle diesen Namen erhält oder darin landet.mvBenennt um oder verschiebt; ohne -i oder -n wird das Ziel stillschweigend überschrieben.touchSetzt die Zeitstempel einer Datei auf jetzt und legt sie leer an, falls sie fehlt; den Inhalt lässt es unberührt.catGibt Dateien hintereinander aus; alles auf einmal, weshalb lange Dateien nach less verlangen und cat file | grep eine Pipe zu viel ist.lessZeigt eine Datei seitenweise, ohne sie ganz zu laden; / sucht, q beendet, und anders als more schließt es am Ende nicht von selbst.headGibt den Anfang einer Datei aus; bei mehreren Dateien schiebt es je eine Kopfzeile ein, sofern nicht -q gesetzt ist.tailZeigt das Ende einer Datei und verfolgt sie mit -f weiter; nur -F öffnet die Datei nach einer Logrotation neu.findDurchläuft einen Verzeichnisbaum und prüft jeden Eintrag; setzen Sie das Muster wie -name '*.log' in Anführungszeichen, sonst expandiert es die Shell vorher.locateDurchsucht einen vorgefertigten Index statt der Platte — blitzschnell, aber blind für alles seit dem letzten updatedb.treeZeichnet die Verzeichnisstruktur als eingerückten Baum; auf macOS und schlanken Linux-Images ist es nicht vorinstalliert.duSummiert den tatsächlich belegten Plattenplatz; es zählt zugewiesene Blöcke, daher weicht die Summe von den Dateigrößen und von df ab.dfMeldet belegten und freien Platz je Dateisystem; eine Platte kann die Inodes aufbrauchen, während Bytes übrig sind — das zeigt nur df -i.lnGibt einer Datei einen weiteren Namen; ein mit -s erzeugter Symlink kann überall hinzeigen, bricht aber beim Verschieben des Ziels, und relative Ziele gelten ab dem Verzeichnis des Links.statZeigt den Inode-Datensatz — Größe, Rechte, Eigentümer und die drei Zeitstempel; der Formatschalter ist bei GNU -c, bei BSD -f, während GNU -f etwas ganz anderes bedeutet.fileErmittelt den Dateityp aus dem Inhalt statt aus dem Namen; die Endung wird ignoriert — so entlarvt man ein .jpg, das eigentlich ein PDF ist.basenameEntfernt den Verzeichnisteil eines Pfades und kann auch eine Endung abschneiden; es arbeitet rein mit Text und prüft nie, ob die Datei existiert.dirnameBehält nur den Verzeichnisteil eines Pfades; ohne Schrägstrich ist die Antwort ein einzelner Punkt, und wie basename arbeitet es nur mit Text.realpathVerwandelt jeden Pfad in einen absoluten Pfad mit aufgelösten Symlinks und Punkten; auf macOS ist es die BSD-Variante, GNU-Optionen wie --relative-to fehlen dort.rsyncÜberträgt nur die Unterschiede zweier Bäume, lokal oder über ssh; ein Schrägstrich am Quellende meint deren Inhalt, ohne ihn landet das Verzeichnis eine Ebene tiefer.mountHängt ein Dateisystem an ein Verzeichnis; was im Mountpoint lag, wird nur verdeckt, nicht gelöscht, und ist nach dem Aushängen wieder da.umountHängt ein eingebundenes Dateisystem aus; der Name enthält kein n, und solange ein Prozess dort eine Datei offen hat oder darin steht, verweigert es mit device is busy.readlinkGibt das Ziel eines Symlinks aus, nur einen Schritt, sofern nicht -f gesetzt ist; bei einer Datei, die kein Link ist, gibt es nichts aus und endet mit Fehler.mktempErzeugt eine temporäre Datei oder ein Verzeichnis mit nicht erratbarem Namen und gibt den Pfad aus; es räumt nicht selbst auf, also mit einem trap beim Beenden kombinieren.sha256sumGibt den SHA-256-Fingerabdruck einer Datei aus, damit man einen Download prüfen kann; ein passender Hash beweist gleiche Bytes, nicht eine vertrauenswürdige Quelle.truncateSetzt die Dateilänge genau: beim Vergrößern entsteht nur ein sparse Loch ohne belegten Platz, beim Verkleinern verschwindet das Ende ohne Warnung.shredÜberschreibt die Bytes vor dem Löschen, doch auf SSDs und Copy-on-Write-Dateisystemen wie btrfs oder APFS können alte Blöcke bleiben — die echte Antwort ist Festplattenverschlüsselung.

Textverarbeitung32

Sie sind fürs Zusammenstecken mit Pipes gebaut. Drei verkettete Befehle sind meist kürzer als einer, der alles macht.

grepFiltert die Zeilen, die zu einem Muster passen; standardmäßig gilt Basic Regex, daher brauchen + ? | und () ein -E oder einen Backslash.sedBearbeitet Text zeilenweise, meist mit s/old/new/; das In-Place-Flag -i unterscheidet sich zwischen GNU und BSD, und ohne abschließendes g ändert sich nur der erste Treffer je Zeile.awkZerlegt jede Zeile in Felder und führt ein kleines Programm darauf aus; $0 ist die ganze Zeile, $1 das erste Feld, und der Standardtrenner ist jede Folge von Leerraum, nicht ein Leerzeichen.sortSortiert Zeilen; ohne -n vergleicht es als Text, sodass 10 vor 9 landet, und die Locale bestimmt die Reihenfolge, wenn Sie nicht LC_ALL=C davorsetzen.uniqFasst nur unmittelbar benachbarte gleiche Zeilen zusammen, nicht über die Datei verstreute Duplikate — daher fast immer nach sort.wcZählt Zeilen, Wörter und Bytes; -l zählt Zeilenumbrüche, eine letzte Zeile ohne Umbruch fällt also aus der Zählung.cutSchneidet feste Felder oder Zeichenpositionen heraus; der Trenner ist ein einzelnes Zeichen und Wiederholungen werden nicht zusammengefasst, ausgerichtete Spalten sind also awk-Sache.pasteKlebt Dateien nebeneinander, getrennt durch einen Tabulator; anders als join paart es nach Position und schaut nie in den Inhalt.trErsetzt oder löscht Zeichen eins zu eins; es liest nur die Standardeingabe, ein Dateiname als Argument scheitert also — leiten Sie mit < um oder nutzen Sie eine Pipe.joinVerbindet zwei Dateien über ein gemeinsames Feld wie ein Datenbank-Join; beide müssen nach diesem Feld sortiert sein, sonst fallen Zeilen stillschweigend weg.commVergleicht zwei sortierte Dateien und zeigt drei Spalten — nur links, nur rechts, in beiden; unsortierte Eingabe ergibt Unsinn, und die Schalter verbergen Spalten, statt sie auszuwählen.diffZeigt, was sich zwischen zwei Dateien geändert hat; das unified-Format -u erwarten patch und Code-Review, und bei Unterschieden ist der Exit-Code 1, was ein Skript mit set -e anhält.patchWendet ein Diff auf echte Dateien an; -p bestimmt, wie viele Pfadteile entfallen, und ein git-Diff braucht wegen der Präfixe a/ und b/ ein -p1.teeSchreibt seine Eingabe gleichzeitig in eine Datei und auf den Bildschirm; so schreibt man in eine root-Datei, denn bei sudo cmd > file wird die Umleitung von Ihrer eigenen Shell geöffnet.xargsVerwandelt Eingabezeilen in Argumente für ein anderes Kommando; Namen mit Leerzeichen brechen es, sofern nicht beide Seiten NUL nutzen — find -print0 mit xargs -0.echoGibt seine Argumente samt Zeilenumbruch aus; -e und die Behandlung von Backslashes unterscheiden sich je Shell, daher ist printf die portable Wahl.printfFormatiert Text nach einer Vorlage wie das printf in C; es fügt keinen Zeilenumbruch hinzu und wiederholt die Vorlage, solange Argumente übrig sind.jqFiltert und formt JSON mit einer eigenen kleinen Sprache; es ist oft nicht vorinstalliert, und -r entfernt die Anführungszeichen um Strings.columnFüllt Felder auf, damit die Spalten wie eine Tabelle stehen; wiederholte Trenner gelten als einer, ein CSV mit leeren Zellen verrutscht daher.foldBricht lange Zeilen bei fester Breite mit echten Zeilenumbrüchen; ohne -s mitten im Wort, und anders als der Soft-Wrap des Terminals ändert es den Inhalt.nlNummeriert Zeilen bei der Ausgabe; standardmäßig überspringt es Leerzeilen, weshalb die Nummern erst mit -b a zum Editor passen.revDreht die Zeichen jeder Zeile um, nicht die Reihenfolge der Zeilen — das macht tac.splitZerlegt eine Datei in Stücke; eine Kopfzeile bleibt nur im ersten Stück, und die Namen enden auf aa, ab, sofern man nicht -d für Zahlen nutzt.csplitTeilt eine Datei dort, wo ein Muster auftritt, nicht bei fester Größe; die gedruckten Zahlen sind Bytezahlen, und {*} heißt so oft wiederholen, wie es passt.expandWandelt Tabulatoren in Leerzeichen; ein Makefile braucht echte Tabs, expand darauf zerstört also den Build.shufGibt die Eingabezeilen in zufälliger Reihenfolge aus; es gehört zu GNU coreutils und fehlt auf macOS, wo der Ersatz sort -R gleiche Zeilen zusammenfasst.tacGibt die Zeilen einer Datei von der letzten zur ersten aus; es ist GNU coreutils, auf macOS nimmt man tail -r, und es ist nicht rev, das Zeichen umdreht.stringsHolt druckbaren Text aus einer Binärdatei; es greift alles, was wie Text aussieht, daher ist das meiste Zufall statt Bedeutung.iconvWandelt Text von einer Zeichenkodierung in eine andere; ohne -c bricht es beim ersten nicht abbildbaren Byte ab, und die Eingabekodierung erkennt es nicht selbst.vimEin modaler Editor: Tippen bewirkt nichts, bis Sie i drücken, und Sie gehen mit Esc und dann :wq zum Speichern oder :q! zum Verwerfen.nanoEin einfacher Vollbild-Editor, dessen Befehle unten stehen; das Caret in ^O und ^X bedeutet Ctrl, nicht das Zeichen selbst.base64Wandelt Bytes in ASCII-Text und zurück, damit Binärdaten durch reine Textkanäle passen; es ist Kodierung, keine Verschlüsselung, und das Dekodier-Flag ist -d bei GNU, -D auf älterem macOS.

git45

Verwirrend ist, dass Rückgängig mehrere Formen hat — den Zeiger eines Branch zu verschieben ist nicht dasselbe wie einen Gegen-Commit zu setzen.

git initMacht aus einem Ordner ein neues git-Repository; init allein verfolgt noch keine Datei, add und commit fehlen weiterhin.git cloneKopiert ein entferntes Repository samt Historie; ein Klon mit --depth 1 hat keine alten Commits und keine anderen Branches, dafür braucht es später --unshallow.git configLiest und schreibt git-Einstellungen; ohne --global gilt es nur für dieses Repository, ein frischer Klon kennt es also nicht.git init --bareErzeugt ein Repository ohne Arbeitsverzeichnis, nur zum Hineinpushen; Dateien lassen sich darin nicht bearbeiten, dafür scheitert kein Push am ausgecheckten Branch.git addNimmt die Datei so auf, wie sie in diesem Moment aussieht; bearbeitet man sie nach dem add erneut, fehlt diese Änderung und man muss nochmal add ausführen.git commitSchreibt das Vorbereitete als einen Commit; -a nimmt nur bereits verfolgte Dateien mit, neue bleiben außen vor.git statusZeigt, was vorbereitet, geändert oder unverfolgt ist; unverfolgte Dateien werden zu Ordnernamen zusammengefasst, solange -uall fehlt.git diffZeigt nur die noch nicht vorbereiteten Änderungen — deshalb wirkt es direkt nach git add leer, dann hilft --staged.git logListet die Historie mit dem neuesten Commit zuerst, aber nur die Vorfahren des aktuellen HEAD — andere Branches brauchen --all.git showZeigt einen Commit mit Nachricht und Diff; die Form <commit>:<pfad> holt eine alte Fassung der Datei, ohne die Arbeitskopie anzurühren.git blameVersieht jede Zeile mit dem Commit, der sie zuletzt geändert hat; eine reine Umformatierung verdeckt den echten Autor — dafür gibt es -w und --ignore-rev.git branchListet, erstellt und löscht Branches lokal; ein gelöschter Branch bleibt auf dem Remote bestehen, dort braucht es git push origin --delete.git checkoutDer alte Befehl für Branch-Wechsel und Datei-Wiederherstellung, in git 2.23 in switch und restore geteilt; checkout -- <datei> löscht nicht committete Änderungen endgültig.git switchDer Befehl aus git 2.23, der ausschließlich Branches wechselt; Dateiinhalte schreibt er nie zurück, dafür ist restore da.git restoreDer Befehl aus git 2.23, der Dateiinhalte zurücksetzt; standardmäßig überschreibt er die Arbeitsdatei und nicht committete Änderungen sind weg, --staged nimmt nur aus der Staging-Area.git mergeHolt die Arbeit eines anderen Branches in den aktuellen; --squash zeichnet keinen Merge auf, git hält den Branch danach weiter für nicht gemergt.git rebaseSpielt Ihre Commits auf einer neuen Basis erneut ab; die Hashes ändern sich, also niemals einen Branch rebasen, den andere schon geholt haben — dort mergen.git resetVerschiebt den Branch-Zeiger auf einen anderen Commit: --soft lässt alles vorbereitet, --mixed (Standard) leert zusätzlich die Staging-Area, behält die Änderungen aber in den Dateien, und --hard verwirft auch diese unwiederbringlich.git revertNimmt einen Commit zurück, indem ein gegenläufiger Commit hinzukommt; die Historie bleibt erhalten — anders als bei reset, das den Zeiger verschiebt — deshalb wird Gepushtes revertiert.git cherry-pickKopiert einen einzelnen Commit als neuen Commit mit neuem Hash in den aktuellen Branch; mergt man den Branch später, kann dieselbe Änderung doppelt erscheinen.git stashLegt unfertige Änderungen beiseite und hinterlässt einen sauberen Baum; unverfolgte Dateien bleiben ohne -u zurück, und pop löscht den Eintrag, apply behält ihn.git cleanLöscht unverfolgte Dateien, von denen git nie eine Kopie hatte — nichts kommt zurück; -fdx entfernt zusätzlich ignorierte Dateien wie eine lokale .env, also vorher -n ausführen.git remoteVerwaltet Namen und URLs entfernter Repositories; es notiert sie nur, es fließt nichts, bis Sie fetchen oder pushen.git fetchLädt neue Commits herunter, ohne Ihre Dateien oder Ihren Branch anzurühren; ein Merge oder Rebase muss folgen, und auf dem Server gelöschte Branches bleiben bis --prune sichtbar.git pullFührt fetch und merge in einem Schritt aus — daher die überraschenden Merge-Commits; --rebase oder --ff-only verhindert sie.git pushSchickt Ihre Commits zu einem Remote; --force überschreibt den Remote-Branch und kann Commits anderer löschen, nutzen Sie daher --force-with-lease, das bei bewegtem Remote abbricht.git tagHängt einem Commit einen Namen wie eine Versionsnummer an; ein einfaches git push nimmt Tags nicht mit, der Tag muss namentlich gepusht werden.git rmEntfernt eine Datei aus dem Index und von der Platte; --cached behält die Datei und beendet nur die Verfolgung, doch der alte Inhalt bleibt in der Historie — ein geleaktes Geheimnis ist weiterhin da.git mvVerschiebt eine Datei und nimmt die Änderung gleich mit auf; git speichert keine Umbenennung, sondern erkennt sie an ähnlichem Inhalt — eine Umbenennung nur der Groß- und Kleinschreibung braucht unter macOS und Windows -f.git ls-filesListet Pfade aus dem Index statt von der Platte und ist damit die verlässliche Liste für Skripte; -i geht nicht allein, es braucht -c oder -o samt --exclude-standard.git update-indexBearbeitet den Index direkt; die Markierungen sind lokal und werden nie gepusht, und für eigene Änderungen an einer verfolgten Konfigurationsdatei ist --skip-worktree zuständig, nicht --assume-unchanged.git sparse-checkoutIn git 2.25 eingeführt, behält es nur die genannten Verzeichnisse auf der Platte; die Historie bleibt vollständig, und der Cone-Modus erwartet Verzeichnisnamen, keine Glob-Muster.git reflogMerkt sich jede Position von HEAD und Ihren Branches — dort finden sich Commits, die durch reset --hard oder einen gelöschten Branch verloren gingen; Einträge verfallen standardmäßig nach 90 Tagen und existieren nur lokal.git bisectHalbiert den Commit-Bereich, um den ersten fehlerhaften Commit zu finden; am Ende muss git bisect reset folgen, sonst bleiben Sie auf einem losgelösten Commit stehen.git describeBenennt den aktuellen Commit anhand des nächsten Tags, etwa v1.2.0-5-gabc1234; standardmäßig sieht es nur annotierte Tags, leichte brauchen --tags und ein Repository ohne Tag braucht --always.git rev-parseLöst einen Namen wie HEAD oder v1.2.0^ in einen echten Hash auf und verrät, wo das Repository liegt; Skripte holen den Branch-Namen mit --abbrev-ref HEAD, außerhalb eines Repositories endet es mit einem Fehler.git fsckPrüft die Objektdatenbank und listet Commits, auf die nichts zeigt — der zweite Weg zu verlorener Arbeit nach einem Reset, wenn der Reflog-Eintrag weg ist; es meldet, es repariert nicht.git gcPackt lose Objekte und verwirft unerreichbare, um .git zu verkleinern; --prune=now wirft auch die Commits weg, die der Reflog hielt, und damit das Sicherheitsnetz zum Rückgängigmachen eines Resets.git archiveExportiert die Dateien eines Commits als tar oder zip; .git und unverfolgte Dateien bleiben draußen, das ergibt ein saubereres Release-Archiv als das Zippen des Ordners.git applyWendet eine Diff-Datei auf Ihren Arbeitsbaum an; es erzeugt keinen Commit und liest den Autor im Patch nicht, per Mail erhaltene Patches gehören daher zu am.git amVerwandelt gemailte Patches in Commits und behält Autor und Nachricht; bei einem Fehler bleibt es mitten in der Serie stehen, Sie müssen mit --continue, --skip oder --abort abschließen.git format-patchSchreibt pro Commit eine mailförmige .patch-Datei; format-patch main meint die Commits nach main, nicht main selbst.git shortlogGruppiert Commits nach Autor und zählt sie, praktisch für Release-Notes; eine Person mit zwei E-Mail-Adressen wird doppelt gezählt, solange keine .mailmap sie zusammenführt.git worktreeCheckt einen zweiten Arbeitsordner aus demselben Repository aus, sodass zwei Branches gleichzeitig gebaut werden können, ohne erneut zu klonen; derselbe Branch kann nicht zweimal ausgecheckt sein, und ein per Hand gelöschter Ordner bleibt bis zum prune eingetragen.git submoduleBindet ein anderes Repository an einem bestimmten Commit in Ihres ein; ein einfacher Klon lässt den Ordner leer, bis update --init läuft, und das Eltern-Repository merkt sich einen Commit, keinen Branch.

Prozesse und System36

Was läuft und was die Maschine frisst. Erst herausfinden, was es ist, dann beenden.

psZeigt eine Momentaufnahme der laufenden Prozesse; `ps aux` ist die BSD-Form ohne Bindestrich, `ps -ef` die POSIX-Form, und beide zu mischen ist der typische Fehler.topZeichnet die Prozessliste alle paar Sekunden neu; die Optionen unterscheiden sich je Plattform vollstandig — eine einzelne Momentaufnahme ist `-b -n 1` unter Linux und `-l 1` unter macOS.htopEine farbige, mausfahige Neufassung von top, in der F9 direkt ein Signal sendet — sie ist aber nicht vorinstalliert, also zuerst `apt install htop` oder `brew install htop`.killSendet ein Signal an eine PID, um einen Prozess zu beenden; das voreingestellte TERM lasst ihm Zeit zum Aufraumen, `-9` kann nicht abgefangen werden und hinterlasst offene Dateien und Sperrdateien.killallBeendet Prozesse anhand des Namens statt der PID; der Name muss genau der ausfuhrbaren Datei entsprechen, daher trifft `killall chrome` einen Prozess namens "Google Chrome" nicht.pkillBeendet alle Prozesse, die zu einem Muster passen; ohne `-f` wird nur der Prozessname verglichen, und ein zu weites Muster erwischt mehr als beabsichtigt — daher zuerst pgrep mit demselben Muster.pgrepGibt nur die PIDs aus, die zu einem Muster passen, und zwar nach genau denselben Regeln wie pkill — der Probelauf, bevor man etwas beendet.jobsEin Shell-Builtin, das nur die Hintergrundjobs dieser Shell nummeriert; Jobs aus einem anderen Terminal erscheinen nie, und man spricht sie als `%1` an, nicht per PID.bgSetzt einen mit Ctrl+Z angehaltenen Job im Hintergrund fort; er gehort weiter zu dieser Shell, das Schliessen des Terminals nimmt ihn also mit — ausser bei nohup oder disown.fgHolt einen Hintergrund- oder angehaltenen Job zuruck ins Terminal; funktioniert nur bei Jobs dieser Shell, und man nennt sie mit einer Jobnummer wie `%1`, nicht mit der PID.nohupLasst einen Befehl das Hangup-Signal ignorieren, damit er das Abmelden ubersteht; er wird dabei nicht in den Hintergrund geschickt — das `&` setzen Sie selbst, und die Ausgabe sammelt sich still in ./nohup.out.niceStartet einen Befehl mit niedrigerer CPU-Prioritat; der Wert reicht von 19 (am nachgiebigsten) bis -20 (am gierigsten), negative Werte brauchen root, und es wirkt nur auf die CPU, nicht auf die Platte (dafur ionice).reniceAndert die Prioritat eines bereits laufenden Prozesses; ein normaler Benutzer kann ihn nur nachgiebiger machen, das Zurucknehmen erfordert root.systemctlStartet, stoppt und prüft systemd-Dienste; `enable` legt nur das Verhalten beim Booten fest, fur den Sofortstart also `enable --now`, und nach dem Bearbeiten einer Unit-Datei `daemon-reload` ausfuhren.journalctlLiest das binare Log, das systemd sammelt; ohne /var/log/journal ist es nach dem Neustart weg, und `-u` braucht den exakten Unit-Namen.serviceEine dunne Hulle aus der SysV-Zeit; auf einer systemd-Maschine leitet sie einfach an systemctl weiter und versteht weniger Verben.crontabBearbeitet die benutzereigene Zeitplantabelle; cron lauft fast ohne PATH und liest nie Ihr Login-Profil, also absolute Pfade schreiben — und `crontab -r` loscht die ganze Tabelle ohne Ruckfrage.atFuhrt einen Befehl genau einmal zu einer genannten Zeit aus; der atd-Dienst muss laufen (oft ist er nicht einmal installiert), und die Ausgabe kommt per Mail, nicht auf den Bildschirm.uptimeZeigt die Laufzeit der Maschine und die Lastmittelwerte; die drei Zahlen sind laufbereite Prozesse im Mittel uber 1, 5 und 15 Minuten, keine Prozentwerte — 4.00 auf vier Kernen heisst also voll ausgelastet.freeZahlt unter Linux, wie viel Speicher und Swap frei sind; die richtige Spalte ist available, nicht free, denn Cache wird bei Bedarf zuruckgegeben — und macOS hat free nicht (dort vm_stat).vmstatGibt Speicher-, Swap-, Platten- und CPU-Zahler in festem Intervall aus; die erste Zeile ist ein Mittelwert seit dem Start und nicht der aktuelle Moment — verwerfen und zuerst auf si/so und wa schauen.iostatZeigt Durchsatz je Platte und wie lange Anfragen warten; der erste Block ist ein Mittelwert seit dem Start, Linux benotigt das Paket sysstat, und macOS nimmt andere Optionen wie `-w 1 -c 5`.lsblkStellt Platten und ihre Partitionen als Baum dar; unpartitionierten freien Platz zeigt es nicht (dafur fdisk oder parted), und es gibt es nur unter Linux — macOS nutzt `diskutil list`.unameNennt Kernelname, Kernelversion und Maschinenarchitektur; die Distribution verrat es nicht — dafur /etc/os-release lesen (unter macOS `sw_vers`) — und `-o` gibt es nur bei GNU.hostnameZeigt oder setzt den Namen dieser Maschine; `hostname web01` halt nur bis zum nachsten Neustart, dauerhaft geht es mit `hostnamectl` (Linux) oder `scutil --set HostName` (macOS), und `-I` fur alle IPs gibt es nur unter Linux.dateGibt die aktuelle Zeit in beliebigem Format aus und rechnet mit Datumsangaben; das Format nach `+` ist uberall gleich, doch das Verschieben eines Datums heisst bei GNU `-d` und unter macOS/BSD `-v` bzw. `-j -f`.envGibt die gesamte Umgebung aus oder startet einen Befehl mit zusatzlichen Variablen; diese gelten nur fur diesen einen Lauf, in Ihrer Shell bleibt nichts zuruck.exportMarkiert eine Variable, damit Kindprozesse sie erben; sie stirbt mit dieser Shell — fur Dauerhaftigkeit in ~/.bashrc oder ~/.zshrc schreiben — und ein blosses `VAR=x` ohne export bleibt fur gestartete Programme unsichtbar.whichDurchsucht PATH und nennt den Ort der ausfuhrbaren Datei dieses Namens; da es nur PATH betrachtet, tauscht es bei Aliassen, Funktionen und Shell-Builtins — die ehrliche Antwort liefert `type -a` oder `command -v`.typeFragt die Shell selbst, was ein Name wirklich ist — Alias, Funktion, Builtin oder Datei — genau das, was `which` nicht sehen kann, weil es nur PATH betrachtet.lsofListet jede offene Datei und jeden Socket und beantwortet damit die Frage, wer Port 3000 halt; ohne sudo sehen Sie nur eigene Prozesse — ein leeres Ergebnis heisst also nicht, dass der Port frei ist.fuserFindet — und auf Wunsch beendet — was eine Datei, einen Mountpunkt oder einen Port benutzt; `-k` sendet SIGKILL ohne Gelegenheit zum Aufraumen und gibt es nur unter Linux (psmisc), da die macOS-Fassung allein `-cfu` kennt.watchFuhrt denselben Befehl alle paar Sekunden erneut aus und zeichnet den Bildschirm neu; alles mit Pipe oder `*` in Anfuhrungszeichen setzen, sonst wendet die Shell es einmal auf watch selbst an — und macOS liefert es nicht mit.timeoutFuhrt einen Befehl mit Zeitlimit aus und bricht ihn beim Uberschreiten mit Status 124 ab; das Standardsignal ist TERM, das ein hangendes Programm ignorieren kann, daher mit `-k` ein KILL nachschicken (GNU coreutils, unter macOS nicht vorhanden).straceGibt jeden Systemaufruf eines Prozesses aus, sodass man sieht, wo er hangt; die Ausgabe geht auf stderr, also mit `2>&1` umleiten, es braucht ptrace-Rechte (meist sudo) und gibt es nur unter Linux (macOS: dtruss).dmesgLiest den Kernel-Ringpuffer, die erste Anlaufstelle nach einem Platten- oder USB-Problem; der Puffer hat eine feste Grosse, altere Zeilen sind also schon verdrangt, und die meisten Distributionen verlangen root (macOS: `log show`).

Netzwerk28

Wenn eine Verbindung scheitert, grenzen diese ein, wie weit sie kam — Name löst nicht auf, keine Route, oder der Port ist zu.

curlHolt eine URL und schreibt den Body ins Terminal; anders als ein Browser folgt es ohne `-L` keinen Weiterleitungen, sodass ein 301 wie eine leere Antwort aussieht.wgetLadt eine URL in eine Datei und folgt Weiterleitungen selbstandig; genau darin unterscheidet es sich von curl, das ohne weitere Angabe ins Terminal schreibt — und macOS liefert wget nicht mit.pingSendet ICMP-Echo-Anfragen, um zu sehen, ob ein Host antwortet und wie lange es dauert; keine Antwort heisst nicht, dass er tot ist, denn viele Firewalls verwerfen ICMP, wahrend TCP einwandfrei lauft.tracerouteListet die Router auf, die ein Paket zum Ziel durchlauft; eine `* * *`-Zeile in der Mitte bedeutet nicht, dass der Weg unterbrochen ist, sondern nur, dass dieser Router nicht antwortet.digFragt einen DNS-Server direkt und zeigt die Records unverandert; es umgeht /etc/hosts und den Systemcache, die Antwort kann also von der des Browsers abweichen, und manche Distributionen brauchen erst dnsutils oder bind-utils.nslookupDas altere Werkzeug fur Namensauflosung: es lauft noch, doch Ausgabeform und Ruckgabewert sind so uneinheitlich, dass es fur Skripte untauglich ist — dig hat seinen Platz eingenommen.hostAntwortet auf eine Namensabfrage mit zwei oder drei kurzen Zeilen zu Adressen und Mailservern; am bequemsten fur eine schnelle Prufung, doch fur die vollstandige Record-Ansicht braucht man dig.ssDer moderne Weg, offene Sockets unter Linux aufzulisten — Nachfolger von netstat und auf belebten Hosts deutlich schneller; `-p` zeigt den besitzenden Prozess allerdings nur als root.netstatDer alte Weg zu Sockets und Routingtabelle; unter Linux hat ss ubernommen und oft ist es gar nicht installiert, und obwohl macOS es behalt, verrat es nicht, welcher Prozess einen Socket besitzt — das beantwortet lsof.ipDer eine Linux-Befehl fur Adressen, Routen und Nachbartabelle, der ifconfig, route und arp ersetzt; alles damit Geanderte ist nach einem Neustart weg, sofern es nicht auch in der Netzkonfiguration steht.ifconfigDer alte Befehl zum Ansehen und Andern von Netzschnittstellen; unter Linux hat `ip addr` ihn ersetzt, oft ist er nicht installiert und zeigt nicht alle mit ip gesetzten Adressen — unter macOS ist er dagegen weiter das eigentliche Werkzeug.routeLiest und bearbeitet die Kernel-Routingtabelle, doch unter Linux hat `ip route` ubernommen, und unter BSD/macOS ist die Syntax vollig anders, etwa `route -n get default` — Beispiele lassen sich also nicht ubertragen.arpZeigt die Tabelle der MAC-Adressen von Nachbarn im selben lokalen Netz; alles jenseits des Routers steht dort nie, und unter Linux ist `ip neigh` das aktuelle Werkzeug.nc (netcat)Offnet eine rohe TCP- oder UDP-Verbindung, um zu prufen, ob ein Port antwortet, und leitet Bytes zwischen zwei Maschinen; drei untereinander unvertragliche netcats teilen den Namen (OpenBSD, GNU, ncat von Nmap), daher fehlen `-z` oder `-p` moglicherweise.telnetOffnet eine unverschlusselte TCP-Sitzung, in der alles im Klartext lauft — zum Anmelden also nie verwenden (dafur ssh); geblieben ist der Zweck zu prufen, ob ein Port antwortet, und man verlasst es mit Ctrl+] und quit.sshOffnet eine verschlusselte Shell auf einer anderen Maschine; ssh verweigert einen privaten Schlussel, den andere lesen konnen, kategorisch — also `chmod 600` — und der Port heisst hier `-p`, bei scp und sftp aber `-P`.ssh-keygenErzeugt ein Schlusselpaar aus offentlichem und privatem Teil; auf den Server kommt nur die `.pub`-Halfte, und ein ohne Passphrase erzeugter Schlussel ist eine einfache Datei, mit der sich jeder anmelden kann, der sie kopiert.ssh-copy-idHangt Ihren offentlichen Schlussel an die ~/.ssh/authorized_keys des Servers, damit er nicht mehr nach einem Passwort fragt; fur diesen ersten Lauf muss die Passwortanmeldung noch offen sein, und `-i` erwartet die `.pub`-Datei, nicht den privaten Schlussel.sftpEin interaktives Ubertragungswerkzeug auf der ssh-Verbindung; der Port ist ein grosses `-P` statt des `-p` von ssh, und es kann keine Remote-Shell-Befehle ausfuhren, nur eigene wie put, get und ls.scpKopiert Dateien in einem Zug uber ssh; der Port ist ein grosses `-P`, der entfernte Pfad braucht einen Doppelpunkt, und fur Grosses oder Wiederholtes ist rsync besser, weil es Unveranderte uberspringt und fortsetzt.iptablesBearbeitet den laufenden Paketfilter; Regeln werden von oben nach unten geprüft und die erste Ubereinstimmung gewinnt, ein nach einem ACCEPT angehangtes DROP greift also nie, ungespeicherte Regeln sind nach dem Neustart weg, und eine Standardpolitik DROP vor der Freigabe von Port 22 sperrt Sie aus einer entfernten Maschine aus.ufwEine freundliche Hulle um iptables unter Debian und Ubuntu; SSH freigeben, bevor Sie `enable` ausfuhren, sonst trennen Sie die Sitzung, in der Sie sitzen — und Docker veroffentlicht Ports direkt in iptables, wo ufw-Regeln nicht greifen.tcpdumpFangt die Pakete ab, die uber die Leitung gehen; es braucht root, was gefangen wird steht nach den Optionen in eigener Filtersyntax wie `port 443 and host x`, und ohne Filter auf einer belebten Schnittstelle ist das Terminal sofort begraben.whoisFragt den Registrierungsdatensatz einer Domain oder eines IP-Blocks ab; personliche Felder sind heute meist geschwarzt und jeder TLD-Server formatiert seine Antwort anders, weshalb das Parsen dieser Ausgabe in Skripten leicht bricht.nmapTastet einen Host ab, welche Ports antworten; `-sS` und `-O` brauchen root, und das Scannen einer fremden Maschine wird in deren Protokollen als Angriff vermerkt und ist in manchen Landern strafbar — bleiben Sie also im eigenen Netz.openssl s_clientOffnet eine rohe TLS-Verbindung, um Zertifikat und Handshake zu prufen; ohne `-servername` liefert ein Server mit vielen Seiten auf einer Adresse sein Standardzertifikat, und ohne `< /dev/null` wartet er endlos auf Eingabe.speedtestMisst die Leitungsgeschwindigkeit, indem es echten Verkehr zu einem nahen Server schickt; es ist auf keinem System vorinstalliert, und zwei verschiedene Programme teilen den Namen (Ooklas speedtest und das Python-speedtest-cli) mit unterschiedlichen Optionen.mtrVereint traceroute und ping in einer laufend aktualisierten Tabelle — das richtige Werkzeug fur sporadischen Paketverlust; Verlust an einem mittleren Hop ist meist nur ein Router, der seine Antworten begrenzt, und nur Verlust, der bis zum letzten Hop anhalt, ist echt.

Archive14

Bündeln und Komprimieren sind zwei Aufgaben: tar bündelt, gzip verkleinert, .tar.gz ist beides.

tarFasst Dateien nur zu einem Archiv zusammen und komprimiert selbst nicht — das übernehmen `-z` (gzip), `-j` (bzip2) und `-J` (xz) —, dabei wählt man genau eines von `-c` zum Erstellen, `-x` zum Entpacken oder `-t` zum Auflisten, und `-f` steht als letzte Option unmittelbar vor dem Archivnamen.gzipKomprimiert eine einzelne Datei zu .gz und löscht dabei standardmäßig das Original, sobald es geklappt hat — mit `-k` oder über `-c` auf die Standardausgabe bleibt es erhalten; mehrere Dateien bündelt gzip nie, deshalb steht tar davor.gunzipEntpackt eine .gz-Datei zurück zum Original und entfernt bei Erfolg die .gz — `-k` behält sie, `-f` braucht man, wenn eine Datei dieses Namens schon existiert, und `-c` schreibt den Inhalt auf die Standardausgabe, ohne ihn je auf die Platte zu legen, genau wie zcat.zipAnders als tar bringt es die Kompression selbst mit und ist das Format, das ein Windows-Rechner ohne Zusatzsoftware öffnet; ein Verzeichnis braucht `-r`, sonst landet nur der Ordnereintrag und nichts darin im Archiv, und das Passwort aus `-e` ist altes, schwaches ZipCrypto.unzipEntpackt ein .zip und schüttet es ohne `-d` direkt in das aktuelle Verzeichnis, prüfen Sie also vorher mit `-l`, ob ein oberster Ordner enthalten ist; Namen aus älteren Windows-Zips brauchen `-O CP932`, und ein mit `-P` übergebenes Passwort steht sichtbar in der Shell-Historie und in ps.bzip2Packt stärker als gzip, braucht dafür länger und löscht wie gzip das Original, sodass ohne `-k` nur die .bz2 übrig bleibt; in tar heißt die passende Option `-j`, und entpackt wird mit `-d`, was bunzip2 tut.xzLiefert von den drei gängigen Formaten die kleinste Ausgabe, ist dafür langsam und verlangt bei `-9` etwa 700 MB Speicher; ohne `-T0` läuft es einkernig, ohne `-k` verschwindet das Original, und in tar lautet die Option das große `-J`.zcatGibt den Inhalt einer .gz-Datei auf die Standardausgabe aus, ohne sie je auf die Platte zu entpacken — so greppt man ein rotiertes Log an seinem Platz; `-f` lässt auch unkomprimierte Dateien im selben Durchgang durch, und für bzip2, xz und zstd gibt es bzcat, xzcat und zstdcat.7zWird mit einem Verb davor benutzt — `a` zum Hinzufügen, `x` zum Entpacken mit Pfaden, `e` flach, `l` zum Auflisten —, liest weit mehr als .7z, auch zip, tar und rar, und packt dichter als die meisten; das Zielverzeichnis steht ohne Leerzeichen direkt hinter `-o`, und erst `-mhe=on` neben `-p` verbirgt auch die Dateinamen.ddKopiert Block für Block — so schreibt man ein Installationsabbild auf ein Gerät; was in `of=` steht, wird ohne Rückfrage ab Block null überschrieben, und es gibt kein Zurück, also prüfen Sie das Gerät unmittelbar vor dem Enter noch einmal mit lsblk, nehmen `bs=4M` für Tempo und `status=progress` (unter macOS Ctrl+T) zum Mitschauen.splitZerlegt eine große Datei in Stücke; standardmäßig nach Zeilen, je 1000, also `-b 100M` schreiben, wenn die Größe gemeint war — ohne Präfix heißen die Teile xaa, xab und so weiter, und zusammengesetzt wird mit einem einzigen `cat part_* > file`, was nur funktioniert, weil die Endungen sortiert sind.cpioEin alter Archivierer, der die Liste der zu packenden Namen von der Standardeingabe nimmt, weshalb ihn meist find füttert; `-o` schreibt ein Archiv, `-i` entpackt eines, `-t` listet es, `-H newc` ist das portable Format der initramfs-Abbilder, und `--no-absolute-filenames` verhindert, dass ein fremdes Archiv in absolute Pfade schreibt.zstdDer moderne Packer: er erreicht gzip-Größen um ein Mehrfaches schneller und kommt mit `-19` in einem Bruchteil der xz-Zeit fast an xz heran; anders als gzip behält er das Original (mit `--rm` löscht er es), `-T0` nutzt alle Kerne, und in tar heißt er `--zstd`.rarEin geschlossenes Format, bei dem nur das Entpacken kostenlos ist: zum Erstellen braucht man das bezahlte rar-Programm, während `unrar x` — oder `7z x`, ohne irgendetwas von RARLAB zu installieren — das öffnet, was jemand geschickt hat; `x` behält die gespeicherten Pfade, `e` macht sie flach, `-hp` verbirgt auch die Dateinamen und `-v100m` teilt das Archiv in Bände.

Rechte15

Numerischer und symbolischer Modus benennen dasselbe: 755 und u=rwx,go=rx sind dieselbe Berechtigung.

chmodSetzt die Rechtebits von Dateien und Verzeichnissen; chmod -R 755 macht auch normale Dateien ausführbar, daher nutzt man das große X, um Dateien auszunehmen.chownÄndert Eigentümer und Gruppe einer Datei; nur root darf eine Datei weitergeben, deshalb braucht es fast immer sudo.chgrpÄndert nur die Gruppe einer Datei, was chown mit :group ebenfalls kann; ohne root darf man nur eine Gruppe setzen, in der man selbst ist.umaskBestimmt, welche Rechtebits neuen Dateien entzogen werden; sie subtrahiert statt zu gewähren, weshalb 022 zu 644 für Dateien und 755 für Verzeichnisse führt und Bestehendes unberührt bleibt.sudoFührt ein Kommando als anderer Benutzer aus, standardmäßig root; die Umleitung in sudo cmd > file öffnet Ihre eigene Shell, weshalb sie an einer root-Datei scheitert und tee gebraucht wird.suWird ein anderer Benutzer mit dessen eigenem Passwort — anders als sudo, das Ihr eigenes verlangt; ohne den Bindestrich behalten Sie Ihren PATH, die übliche Ursache von command not found.idZeigt die Benutzer- und Gruppen-IDs, mit denen ein Prozess läuft; gibt id -u eine 0 zurück, ist es root — so prüfen Skripte üblicherweise Adminrechte.groupsListet die Gruppen eines Benutzers; eine gerade per usermod hinzugefügte Gruppe erscheint erst nach neuer Anmeldung, da die Liste beim Sitzungsstart festgelegt wird.whoamiGibt den effektiven Benutzernamen aus, nicht den Anmeldenamen — in sudo oder su steht dort also root.passwdÄndert ein Anmeldepasswort und legt dessen Hash in /etc/shadow ab; macOS kennt fast keine der Linux-Optionen und nutzt dscl oder die Systemeinstellungen.getfaclZeigt die Access Control List, also zusätzliche Rechte je Benutzer jenseits von Eigentümer, Gruppe und Anderen; das ist Linux mit dem acl-Paket, während macOS seine eigene ACL mit ls -le zeigt.setfaclGewährt einem zusätzlichen Benutzer oder einer Gruppe Rechte, ohne den Eigentümer zu ändern; existiert eine ACL, zeigt ls ein + hinter den Rechten, und der mask-Eintrag kann das Gewährte stillschweigend begrenzen.chattrSetzt Attribute auf Dateisystemebene wie immutable; mit +i muss selbst root das Flag erst entfernen, und es funktioniert nur auf Linux-Dateisystemen wie ext4, xfs und btrfs.xattrLiest und entfernt erweiterte Attribute unter macOS, meist com.apple.quarantine — die Ursache der Warnung, die App sei beschädigt; unter Linux nimmt man getfattr und setfattr.visudoBearbeitet /etc/sudoers mit Sperre und Syntaxprüfung vor dem Speichern; wer die Datei direkt bearbeitet und sich verschreibt, sperrt alle von sudo aus — genau das verhindert visudo.

Pakete und Laufzeiten25

Die Frage ist immer, was wohin gehört: in dieses Projekt oder auf die ganze Maschine.

npm installLädt die in package.json genannten Abhängigkeiten nach node_modules und aktualisiert package-lock.json; seit npm 7 werden auch Peer-Abhängigkeiten installiert, und --production wurde durch --omit=dev ersetzt.npm ciLöscht node_modules und installiert genau das, was package-lock.json vorgibt; es ändert die Lockfile nie und bricht ab, wenn Lockfile und package.json auseinandergehen — deshalb nutzt CI es statt install.npm runFührt einen Befehl aus dem scripts-Abschnitt von package.json aus; Argumente für das Skript brauchen ein vorangestelltes --, und nur start und test lassen sich ohne run aufrufen.npm initErzeugt eine package.json; npm init <name> ist etwas völlig anderes und lädt create-<name> herunter und führt es aus, wie npx.npxFührt die Binärdatei eines Pakets aus, bevorzugt aus node_modules/.bin, sonst wird sie kurzzeitig geholt; da ein Tippfehler ein fremdes Paket ziehen kann, beschränkt --no auf Lokales.yarn addFügt ein Paket hinzu und aktualisiert yarn.lock; ein bloßes yarn bedeutet install, und Yarn 2 hat yarn global add entfernt, Einmal-Werkzeuge laufen daher über yarn dlx.pnpm addLegt das Paket in einen gemeinsamen Store und verlinkt es in node_modules; in einem Workspace-Root verweigert pnpm ein einfaches add und verlangt -w oder --filter.npm auditMeldet bekannte Schwachstellen im installierten Baum; fix --force zieht brechende Hauptversionen nach, und Warnungen tief in Dev-Abhängigkeiten lassen sich oft überhaupt nicht beheben.npm publishLädt das Paket in die Registry; ein Scoped Name ist standardmäßig privat, daher braucht es --access public, und eine Versionsnummer lässt sich nie wiederverwenden — prüfen Sie die Dateiliste zuerst mit --dry-run.node --versionGibt die Version des node aus, das im PATH zuerst gefunden wird — deshalb meldet ein Editor-Terminal oder ein CI-Job mit Versionsmanager oft eine andere.nvm useWechselt, welches installierte Node die aktuelle Shell benutzt; die Änderung gilt nur dort, ein neues Terminal oder ein CI-Job fällt auf den Standard zurück, und da nvm eine Shell-Funktion ist, muss ein Skript oder Makefile zuerst nvm.sh einlesen.brew installInstalliert unter macOS und Linux eine vorgebaute Bottle; GUI-Programme brauchen --cask, und das Aktualisieren übernehmen brew update und brew upgrade, nicht install.apt-get installInstalliert aus der bereits vorhandenen Paketliste; eine veraltete Liste führt zu "Unable to locate package", bis apt-get update läuft, und für Skripte ist apt-get die stabile Schnittstelle, während apt für Menschen gedacht ist.apt updateAktualisiert nur die Paketlisten, installiert also nichts — dafür muss apt upgrade folgen; in einem frischen Container ist die Liste leer, deshalb ist dies der erste Befehl.dnf installInstalliert aus den aktivierten Repositories samt Abhängigkeiten und erneuert die Metadaten selbstständig, ein separates update wie bei apt entfällt; ab RHEL 8 ist yum ein Link auf dnf, und Fedora 41 setzt auf dnf5.pacman -SInstalliert ein Paket aus den Sync-Repositories von Arch; da die Distribution rollend ist, erzeugt ein Refresh mit -Sy ohne Upgrade ein Teil-Upgrade, das Bibliotheken zerlegt — nutzen Sie -Syu.pip installInstalliert ein Paket in das gerade aktive Python; der Aufruf als python -m pip verhindert den Klassiker, dass pip zu einem anderen Interpreter gehört, und seit PEP 668 verweigert ein System-Python Installationen außerhalb einer virtuellen Umgebung.pip freezeGibt jedes installierte Paket mit genauer Version aus, direkt umleitbar in requirements.txt; es listet auch transitive Abhängigkeiten, muss also innerhalb der virtuellen Umgebung laufen.python -m venvErzeugt einen isolierten Interpreter samt site-packages in einem Ordner; das Anlegen allein bewirkt nichts, man muss aktivieren oder .venv/bin/python direkt aufrufen, und da die Pfade fest eingebacken sind, zerbricht ein späteres Umbenennen des Ordners alles.docker runErzeugt und startet jedes Mal einen neuen Container aus einem Image, zweimal ausgeführt gibt es also zwei, und einen bestehenden startet docker start; ohne -p ist nichts vom Host erreichbar, und ohne -v stirbt alles Geschriebene mit dem Container.docker psListet nur die aktuell laufenden Container; einer, der direkt nach dem Start beendet wurde, erscheint erst mit -a — dort schaut man nach, wenn docker run scheinbar nichts getan hat.docker buildBaut ein Image aus einem Dockerfile; der Punkt am Ende ist der Build-Kontext, der an den Daemon geht — ein dicker Ordner bremst den Build, bis .dockerignore ihn kürzt, und COPY sieht nur Dateien innerhalb dieses Kontexts.docker compose upStartet alle Dienste aus compose.yaml als ein Projekt; das bindestrichige docker-compose ist das ausgemusterte v1, docker compose das v2-Plugin, und vorhandene Container werden ohne --build oder --force-recreate weiterverwendet.docker execStartet einen weiteren Prozess in einem bereits laufenden Container; bei einem gestoppten schlägt es fehl, und Slim-Images haben kein bash, dort nimmt man sh.docker logsZeigt, was der Hauptprozess des Containers auf stdout und stderr geschrieben hat; eine App, die in eine Datei im Container loggt, erscheint hier nicht, und mit dem Container verschwinden die Logs.

So liest man das

  • Eckige Klammern [ ] markieren einen Teil, den man weglassen kann.
  • Drei Punkte … heißen: mehrere sind erlaubt.
  • Optionen achten auf Groß- und Kleinschreibung — bei manchen Befehlen sind -r und -R verschieden.

Häufige Fragen

Q. Warum werden die Befehlsnamen nicht übersetzt?

Weil man sie so eingibt. Ein übersetztes ls ist ein Name, den die Shell nicht kennt. Optionen bleiben aus demselben Grund — nur die Erklärungen folgen der Sprache.

Q. Unter macOS und Linux unterscheiden sich die Optionen.

Ja. macOS bringt BSD-Werkzeuge mit, deshalb fehlen manche GNU-Optionen — sed -i will ein Argument, ps nimmt kein -ef. Wo es auseinandergeht, nennt die Beschreibung die Plattform.

Q. Woran erkenne ich Befehle, die man nicht zurücknehmen kann?

Ihre Beschreibung sagt es. rm nutzt keinen Papierkorb, dd überschreibt bei falschem of= eine Platte, und git reset --hard sowie git clean -fd verwerfen nicht committete Arbeit.