1In diesem Buch wird der Linux-Prompt (oder die Eingabeaufforderung, wie man den Prompt auch nennt) als Dollarzeichen dargestellt. Ihr Prompt kann auch anders aussehen.
2Sie lernen den Zweck dieses mysteriösen Befehls in Kapitel 8 kennen.
3Die bash-Version auf macOS ist uralt, und ihr fehlen wichtige Funktionen. Um die bash zu aktualisieren, lesen Sie den Artikel »Upgrading Bash on macOS« (https://oreil.ly/35jux) von Daniel Weibel.
1Auf PC-Tastaturen erzeugen Sie das Pipe-Symbol mit der Tastenkombination +
und auf Mac-Tastaturen mit der Tastenkombination
-
.
2Der POSIX-Standard nennt diese Form des Befehls ein Utility.
3Abhängig von Ihren Einstellungen könnte ls noch weitere Formatierungseigenschaften verwenden, wie etwa Farben, wenn es auf den Bildschirm schreibt, die jedoch nicht zum Einsatz kommen, wenn es umgeleitet wird.
4Manche Linux-Systeme speichern die Benutzerinformation woanders.
5Technisch gesehen, brauchen Sie das letzte sort -nr in dieser Pipeline zum Isolieren der Duplikate gar nicht, weil grep alle Nichtduplikate entfernt.
6Manche Befehle verwenden die Standardeingabe/Standardausgabe nicht und können deshalb nicht aus Pipes lesen bzw. auf Pipes schreiben. Beispiele sind mv und rm. Pipelines können diese Befehle jedoch auf andere Art nutzen, wie Sie anhand von Beispielen in Kapitel 8 sehen werden.
1Deswegen listet der Befehl ls * keine Dateinamen auf, die mit einem Punkt beginnen, also die sogenannten Punktdateien.
2bash verhindert eine unendliche Rekursion, indem es das zweite less nicht als Alias erweitert.
3Manche Shells merken sich (in einem Cache) die Pfade zu den Programmen, wenn sie diese aufgefunden haben, sodass künftige Suchen abgekürzt werden.
4Beachten Sie, dass der Befehl type which eine Ausgabe erzeugt, der Befehl which type dagegen nicht.
5Diese Aussage ist ein bisschen zu einfach; mehr dazu erfahren Sie in Tabelle 6-1.
1Sie können das abschließende Fragezeichen weglassen – !?grep –, aber in manchen Fällen ist es erforderlich, etwa bei einer History-Erweiterung im sed-Stil (siehe »Leistungsfähigere Ersetzung mittels History-Erweiterung« auf Seite 65).
2Ich gehe einmal davon aus, dass keine Dateien nach dem ls-Schritt hinterrücks hinzugefügt oder gelöscht wurden. In Verzeichnissen, deren Inhalt sich rasend schnell ändert, sollten Sie sich nicht auf diese Technik verlassen.
3Beim Schreiben dieses Buchs habe ich häufig Versionskontrollbefehle wie git add, git commit und git push erneut ausgeführt. Mit der inkrementellen Suche war das ein Kinderspiel.
1Ich habe mir das ausgedacht, aber es stimmt trotzdem.
2Eine Alternative wäre, mithilfe von Kommandozeilenprogrammen wie screen und tmux mehrere virtuelle Displays zu öffnen. Diese Programme werden als Terminal-Multiplexer bezeichnet. Sie erfordern einen größeren Lernaufwand als Verzeichnis-Stacks, lohnen die Betrachtung aber ebenfalls.
3Stacks werden in der Informatik auch als Stapel benannt, und genau so sollten Sie sich das auch vorstellen: Sie legen etwas oben auf einem Stapel ab und können auch nur von oben etwas herunternehmen. Was zuletzt auf den Stapel gepackt wurde, muss zuerst wieder weggenommen werden.
4Programmierer kennen diese Operationen vermutlich als das Rotieren des Stacks.
1Der verwandte Befehl ls -R erzeugt eine Ausgabe in einem Format, das sich weniger gut für Pipelines eignet.
2Heutzutage haben manche Implementierungen von fsck die Möglichkeiten, auf jede Eingabeaufforderung -y bzw. -n antworten zu lassen, sodass der yes-Befehl hier unnötig ist.
3Der Name »grep« ist die Abkürzung von get regular expression and print.
4Die drei Befehle unterscheiden sich auch in ihrer Behandlung regulärer Ausdrücke; Tabelle 5-1 bietet eine teilweise Liste.
5Bei sed macht diese Syntax mehr als nur eine Gruppierung; siehe »Teilausdrücke mit sed erfassen« auf Seite 112.
6Quiz: Was macht die Pipeline rev myfile | tac | rev | tac?
7Sie werden schon bald einfacherere Lösungen mit awk und sed sehen, aber dieser doppelte-rev-Trick ist auch wissenswert.
8Einschließlich des Buchs sed & awk (https://oreil.ly/FjtTm) von O’Reilly.
9Der Name awk ist ein Akronym aus Aho, Weinberger und Kernighan, den Schöpfern des Programms.
10Der Name sed ist die Kurzform von Stream Editor, weil es einen Textstrom verarbeitet.
11Falls Sie mit den Editoren vi, vim, ex oder ed vertraut sind, könnte Ihnen die Syntax von sed-Skripten bekannt vorkommen.
1Falls Sie eine andere Shell benutzen, lesen Sie auch Anhang B.
2Ich habe die Ausgabe hier gekürzt, um nur die gebräuchlichsten Umgebungsvariablen anzuzeigen. Ihre Ausgabe ist vermutlich viel länger und voller obskurer Variablennamen.
3Sie ist komplett, jedoch mit Ausnahme von Traps, die »auf die Werte zurückgesetzt werden, die die Shell beim Start von ihrer Eltern-Shell geerbt hat« (man bash). Ich werde Traps in diesem Buch nicht weiter diskutieren.
4Um es noch verwirrender zu machen, bringen manche Desktopumgebungen ihre eigenen Shell-Konfigurationsdateien mit. Zum Beispiel hat GNOME $HOME/.gnomerc, und das diesem zugrunde liegende X Window-System hat $HOME/.xinitrc.
1Der Befehl mkdir -p dir, der einen Verzeichnispfad nur dann anlegt, wenn er noch nicht existiert, wäre hier eine elegantere Lösung.
2Dieses Verhalten ist genau entgegengesetzt zu dem, was viele Programmiersprachen machen, wo null Scheitern bedeutet.
3Alternativ könnten Sie cron für den Backup-Job und at für die Erinnerungen nutzen, aber bei Linux geht es ja um Flexibilität – mehrere Möglichkeiten zu finden, um dasselbe Ergebnis zu erzielen.
4Zum Herunterladen bereitgestellte Kontoauszüge der Bank of America wurden zur Drucklegung auf diese Weise benannt.
5Technisch gesehen, kann diff eine Liste von der Standardeingabe lesen, wenn Sie einen Bindestrich als Dateinamen angeben, nicht jedoch zwei Listen.
6Diese Verzeichnisstruktur ähnelt einer Hash-Tabelle mit Verkettung.
7Die genaue Anzahl hängt von den Längenbeschränkungen Ihres Linux-Systems ab; siehe man xargs.
8Das setzt voraus, dass das tar-Archiv mit relativen Pfaden erstellt wurde – was typisch ist für heruntergeladene Software –, und nicht mit absoluten Pfaden.
9Dieses spezielle Problem lässt sich noch viel einfacher mit der tar-Option -C oder --directory lösen, die ein Zielverzeichnis festlegt. Ich demonstriere hier nur die allgemeine Technik der Verwendung einer Subshell.
1Die früheste Verwendung dieses Begriffs (von der ich weiß) findet sich in der Manpage f+r lorder(1) (https://oreil.ly/ro621) in BSD Unix 4.x. Danke an Bob Byrnes, der sie gefunden hat.
2Mit ch03.asciidoc zu beginnen und sich nach vorn vorzuarbeiten, wäre gefährlich – erkennen Sie, warum? Falls nicht, erzeugen Sie diese Dateien mit dem Befehl touch ch{01..10}.asciidoc, und probieren Sie es selbst.
1Dieses Vorgehen ist vergleichbar mit dem Entwurf eines Datenbankschemas, das gut mit bekannten Abfragen zusammenarbeitet.
2Die offizielle Liste der Vorwahlen im CSV-Format (https://oreil.ly/SptWL), die vom North American Numbering Plan Administrator gepflegt wird, enthält keine Städtenamen.
3Dieser Befehl generiert ein öffentliches/privates Schlüsselpaar mit allen Standardoptionen und dem Ablaufdatum never. Für mehr Informationen siehe man gpg, um über die gpg-Optionen nachzulesen. Oder Sie suchen sich online ein GnuPG-Tutorial.
4Falls gpg weitermacht, ohne nach Ihrer Passphrase zu fragen, hat es Ihre Passphrase temporär im Cache abgelegt (gesichert).
1Das funktioniert, solange Sie nicht in einer Anwendung arbeiten, die alle Tastenbetätigungen abfängt, also etwa in einer virtuellen Maschine in einem Fenster.
2Dieses Beispiel verwendet drei CSS-Selektoren; einige alte Versionen von hxselect können allerdings nur zwei verarbeiten. Falls Ihre Version von hxselect von dieser Einschränkung betroffen ist, laden Sie die neueste Version vom World Wide Web Consortium (https://oreil.ly/81yM2) herunter und kompilieren sie mit dem Befehl configure && make.
3Es gibt in Wirklichkeit drei X-Auswahlen, aber eine davon, die sogenannte sekundäre Auswahl, wird auf modernen Desktopumgebungen nur selten genutzt.
1Der Punkt und der doppelte Punkt gehören nicht zu den Ausdrücken, die von der Shell ausgewertet werden. Sie sind harte Links (auch: Hardlinks), die es in jedem Verzeichnis gibt.
2Oder mit einem anderen Programm, falls Sie den Wert der Shell-Variablen PAGER ändern.
3Falls Sie die shebang-Zeile weglassen, führt Ihre Standard-Shell das Skript aus. Es ist allerdings gute Praxis, die Zeile einzusetzen.
4Das liegt daran, dass das aktuelle Verzeichnis aus Sicherheitsgründen im Suchpfad der Shell üblicherweise weggelassen wird. Ansonsten könnte ein Angreifer ein bösartiges ausführbares Skript namens ls in Ihr aktuelles Verzeichnis legen, das dann anstelle des wirklichen ls-Befehls ausgeführt werden würde, wenn Sie ls aufrufen.