Sequenzsteuerung und Pipeline

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Willkommen in diesem praktischen Lab (Workshop) über die Ausführung von Linux-Befehlen und die Textverarbeitung! Wenn Sie neu in der Welt von Linux sind, keine Sorge - wir werden Sie Schritt für Schritt durchführen. In diesem Lab werden wir untersuchen, wie Sie mehrere Befehle effizient ausführen und leistungsstarke Textverarbeitungstools nutzen können. Am Ende dieses Labs können Sie Befehle kombinieren, durch Texte suchen und Daten wie ein Profi manipulieren!

Sequenzielle Ausführung von Befehlen

In Linux können Sie mehrere Befehle nacheinander in einer einzigen Zeile ausführen. Dies ist besonders nützlich, wenn Sie eine Reihe verwandter Aufgaben ausführen möchten.

Beginnen wir mit einem einfachen Beispiel. Wir werden das aktuelle Datum anzeigen und dann den Inhalt Ihres Home-Verzeichnisses auflisten:

date && ls ~

So funktioniert dieser Befehl:

  • date: Dieser Befehl zeigt das aktuelle Datum und die Uhrzeit an.
  • &&: Dieses Symbol bedeutet "und". Es veranlasst Linux, den nächsten Befehl nur auszuführen, wenn der erste erfolgreich war.
  • ls ~: Dieser Befehl listet den Inhalt Ihres Home-Verzeichnisses auf (das Symbol ~ steht für Ihr Home-Verzeichnis).

Geben Sie diesen Befehl in Ihr Terminal ein und drücken Sie die Eingabetaste. Sie sollten das heutige Datum gefolgt von einer Liste der Dateien und Ordner in Ihrem Home-Verzeichnis sehen.

Wenn Sie nach dem Datum keine Dateien aufgelistet sehen, keine Sorge! Dies könnte bedeuten, dass Ihr Home-Verzeichnis leer ist. Sie können stattdessen ls /home/labex versuchen, um sicherzustellen, dass Sie eine Ausgabe sehen.

Bedingte Befehlsausführung

In diesem Schritt werden wir untersuchen, wie man bedingte Operatoren verwendet, um die Ausführung von Befehlen basierend auf dem Erfolg oder Misserfolg vorheriger Befehle zu steuern.

Zunächst versuchen wir, einen bedingten Befehl mit einem nicht installierten Programm auszuführen:

which cowsay && cowsay "Hello, LabEx" || echo "cowsay is not installed"

In dieser Befehlsfolge:

  • which cowsay prüft, ob das cowsay-Programm installiert ist.
  • && ist ein logischer UND-Operator, der den nächsten Befehl nur ausführt, wenn der vorherige Befehl erfolgreich ist.
  • cowsay "Hello, LabEx" zeigt eine ASCII-Art-Kuh an, die "Hello, LabEx" sagt.
  • || ist ein logischer ODER-Operator, der den nächsten Befehl nur ausführt, wenn der vorherige Befehl fehlschlägt.
  • echo "cowsay is not installed" gibt eine Nachricht aus, die anzeigt, dass cowsay nicht installiert ist.

Sie sollten die Ausgabe "cowsay is not installed" sehen, da das cowsay-Programm auf dem System noch nicht installiert ist.

Jetzt installieren wir cowsay:

sudo apt-get update && sudo apt-get install -y cowsay

und führen den gleichen Befehl erneut aus:

which cowsay && cowsay "Hello, LabEx" || echo "cowsay is not installed"

Diesmal sollten Sie eine ASCII-Art-Kuh sehen, die "Hello, LabEx" sagt.

Dieses Beispiel zeigt, wie man && und || verwendet, um bedingte Befehlsfolgen zu erstellen. && bedeutet "führe aus, wenn der vorherige Befehl erfolgreich ist", während || bedeutet "führe aus, wenn der vorherige Befehl fehlschlägt".

Lassen Sie uns analysieren, was passiert ist:

  1. Vor der Installation:

    • which cowsay wurde erfolgreich ausgeführt (aber keine Übereinstimmungen gefunden)
    • Aufgrund von && wurde cowsay "Hello, LabEx" versucht, schlug aber fehl, da cowsay nicht installiert war
    • Da cowsay fehlgeschlagen ist, wurde der Befehl nach || (echo "cowsay is not installed") ausgeführt
  2. Nach der Installation:

    • which cowsay war erfolgreich, also wurde cowsay "Hello, LabEx" ausgeführt
    • Es war nicht notwendig, den echo-Befehl nach || auszuführen

Versuchen Sie, Ihre eigenen bedingten Befehlsfolgen mit diesen Operatoren zu erstellen!

Einführung in Pipelines

Pipelines (Rohrleitungen) sind ein leistungsstarkes Feature in Linux, das es Ihnen ermöglicht, die Ausgabe eines Befehls als Eingabe für einen anderen Befehl zu verwenden. Dies wird mit dem | (Pipe)-Symbol erreicht.

Beginnen wir mit einem einfachen Beispiel:

ls -l /etc | less

So funktioniert dieser Befehl:

  • ls -l /etc: Listet den Inhalt des /etc-Verzeichnisses im ausführlichen Format auf.
  • |: Leitet die Ausgabe des vorherigen Befehls an den nächsten Befehl weiter.
  • less: Ein Programm, das es Ihnen ermöglicht, durch Text zu scrollen.

Wenn Sie diesen Befehl ausführen, sehen Sie eine Liste von Dateien und Verzeichnissen. Sie können die Pfeiltasten nach oben und unten verwenden, um zu scrollen, und 'q' drücken, um das Programm zu beenden.

Jetzt versuchen wir eine komplexere Pipeline:

ls -l /etc | grep '^d' | wc -l

Dieser Befehl zählt die Anzahl der Verzeichnisse in /etc. So funktioniert es:

  1. ls -l /etc: Listet den Inhalt von /etc im ausführlichen Format auf.
  2. grep '^d': Filtert die Zeilen, die mit 'd' beginnen (was auf Verzeichnisse hinweist).
  3. wc -l: Zählt die Anzahl der Zeilen (was jetzt die Anzahl der Verzeichnisse ist).

Sie sollten eine Zahl sehen, die die Anzahl der Verzeichnisse in /etc angibt.

Verwendung von cut zum Extrahieren von Feldern

Der cut-Befehl ist nützlich, um bestimmte Teile jeder Zeile einer Datei zu extrahieren. Wir werden ihn verwenden, um Benutzernamen und Home-Verzeichnisse aus der Datei /etc/passwd zu extrahieren, die Informationen über Benutzerkonten auf dem System enthält.

Führen Sie diesen Befehl aus:

cut -d: -f1,6 /etc/passwd | head -n 5

Lassen Sie uns diesen Befehl analysieren:

  • cut: Der Befehl zum Extrahieren von Teilen von Zeilen.
  • -d:: Verwenden Sie : als Trennzeichen (das Zeichen, das die Felder trennt).
  • -f1,6: Extrahieren Sie das 1. und 6. Feld (Benutzername und Home-Verzeichnis).
  • |: Leiten Sie die Ausgabe an den nächsten Befehl weiter.
  • head -n 5: Zeigen Sie nur die ersten 5 Zeilen der Ausgabe an.

Sie sollten eine Ausgabe ähnlich dieser sehen:

root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin

Jede Zeile zeigt einen Benutzernamen und sein Home-Verzeichnis, getrennt durch einen Doppelpunkt.

Kombination von grep mit Pipelines und Befehlssequenzen

In diesem Schritt werden wir untersuchen, wie man grep in Kombination mit Pipelines und Befehlssequenzen für fortgeschrittene Textverarbeitung einsetzt.

Beginnen wir damit, alle Zeilen in Ihrer .zshrc-Datei zu suchen, die "PATH" enthalten, und diese zu zählen:

grep "PATH" ~/.zshrc | wc -l

Diese Pipeline verwendet zunächst grep, um Zeilen mit "PATH" zu finden, und leitet dann die Ausgabe an wc -l weiter, um die Zeilen zu zählen.

Jetzt verwenden wir eine Befehlssequenz, um zunächst nach "PATH" und dann, wenn "PATH" gefunden wurde, nach "HOME" zu suchen:

grep "PATH" ~/.zshrc && grep "HOME" ~/.zshrc

Dies zeigt nur die Zeilen mit "HOME" an, wenn Zeilen mit "PATH" gefunden wurden.

Versuchen wir ein komplexeres Beispiel. Wir suchen nach Zeilen, die mit "bin" enden, in /etc/passwd, sortieren sie und zeigen die ersten 5 an:

grep "bin" /etc/passwd | sort | head -n 5

Diese Pipeline führt drei Aufgaben aus:

  1. Findet Zeilen, die "bin" enthalten.
  2. Sortiert diese Zeilen alphabetisch.
  3. Zeigt nur die ersten 5 Zeilen des Ergebnisses an.

Schließlich kombinieren wir alles, was wir gelernt haben. Wir suchen nach Zeilen, die "sh" enthalten, in /etc/passwd, zählen sie und je nach Anzahl der gefundenen Zeilen zeigen wir entweder die Zeilen an oder eine Nachricht:

grep "sh" /etc/passwd | wc -l | {
  read count
  [ $count -gt 5 ] && grep "sh" /etc/passwd || echo "Found $count lines, not enough to display."
}

Dieser komplexe Befehl führt folgende Schritte aus:

  1. Sucht nach Zeilen, die "sh" enthalten.
  2. Zählt diese Zeilen.
  3. Wenn die Anzahl größer als 5 ist, werden die Zeilen angezeigt.
  4. Wenn die Anzahl 5 oder weniger ist, wird eine Nachricht mit der Anzahl der gefundenen Zeilen angezeigt.

Versuchen Sie, diese Befehle auszuführen und experimentieren Sie mit Ihren eigenen Kombinationen!

Zählen mit wc

Der wc (Wortzählung)-Befehl ist nützlich, um Zeilen, Wörter und Zeichen in Texten zu zählen.

Beginnen wir damit, die Anzahl der Zeilen in /etc/passwd zu zählen:

wc -l /etc/passwd

Die Option -l teilt wc mit, die Zeilen zu zählen. Sie sollten eine Zahl gefolgt vom Dateinamen sehen.

Jetzt zählen wir die Anzahl der Wörter in den ersten 10 Zeilen von /etc/passwd:

head -n 10 /etc/passwd | wc -w

Diese Pipeline führt zwei Aufgaben aus:

  1. head -n 10 /etc/passwd: Liest die ersten 10 Zeilen der Datei aus.
  2. wc -w: Zählt die Wörter in diesen Zeilen.

Sie sollten eine Zahl sehen, die die Anzahl der Wörter angibt.

Sortieren mit sort

Der sort-Befehl wird verwendet, um Zeilen von Text zu sortieren. Lassen Sie uns ihn nutzen, um die Datei /etc/passwd nach dem dritten Feld (Benutzer-ID) zu sortieren:

sort -t: -k3 -n /etc/passwd | head -n 5

Hier ist, was jeder Teil bewirkt:

  • -t:: Verwenden Sie : als Feldtrennzeichen.
  • -k3: Sortieren Sie anhand des dritten Feldes.
  • -n: Sortieren Sie numerisch (anstatt alphabetisch).
  • | head -n 5: Zeigen Sie nur die ersten 5 Zeilen der Ausgabe an.

Sie sollten die ersten fünf Zeilen von /etc/passwd sehen, sortiert nach der Benutzer-ID (dem dritten Feld).

Entfernen von Duplikaten mit uniq

Der uniq-Befehl wird verwendet, um doppelte Zeilen in sortiertem Text zu entfernen oder zu identifizieren. Lassen Sie uns ihn nutzen, um die eindeutigen Shell-Typen in /etc/passwd zu finden:

cut -d: -f7 /etc/passwd | sort | uniq

Diese Pipeline führt drei Aufgaben aus:

  1. cut -d: -f7 /etc/passwd: Extrahiert das 7. Feld (die Shell) aus jeder Zeile.
  2. sort: Sortiert die Zeilen alphabetisch.
  3. uniq: Entfernt doppelte Zeilen.

Sie sollten eine Liste der eindeutigen Shell-Pfade sehen, die auf dem System verwendet werden.

Jetzt zählen wir, wie viele Benutzer jede Shell verwenden:

cut -d: -f7 /etc/passwd | sort | uniq -c

Die Option -c fügt jeder Zeile die Anzahl ihrer Vorkommen voran. Sie sollten sehen, dass jeder Shell-Pfad von einer Zahl gefolgt wird, die angibt, wie viele Benutzer diese Shell verwenden.

Zusammenfassung

Herzlichen Glückwunsch! Sie haben dieses Lab zur Ausführung von Linux-Befehlen und zur Textverarbeitung abgeschlossen. Lassen Sie uns zusammenfassen, was Sie gelernt haben:

  1. Sie können Befehle nacheinander mit && ausführen und bedingt mit ||.
  2. Pipelines (|) ermöglichen es Ihnen, mehrere Befehle zu verbinden und die Ausgabe eines Befehls als Eingabe für den nächsten zu übergeben.
  3. cut eignet sich hervorragend, um bestimmte Teile von Zeilen in einer Datei zu extrahieren.
  4. grep hilft Ihnen, nach bestimmten Mustern in Texten zu suchen.
  5. wc kann Zeilen, Wörter und Zeichen in Texten zählen.
  6. sort ordnet Zeilen von Text in einer bestimmten Reihenfolge an.
  7. uniq entfernt Duplikate aus sortiertem Text und kann Vorkommen zählen.

Diese Tools sind grundlegend für die Textverarbeitung in Linux. Wenn Sie Ihre Linux-Reise fortsetzen, werden Sie unzählige Möglichkeiten finden, diese Befehle zu kombinieren, um komplexe Textverarbeitungsprobleme zu lösen. Seien Sie nicht afraid, zu experimentieren und neue Kombinationen auszuprobieren!

Denken Sie daran, Übung macht den Meister. Versuchen Sie, diese Befehle mit verschiedenen Dateien und Optionen zu verwenden, um Ihr Verständnis zu vertiefen. Wenn Sie jemals vergessen, wie ein Befehl funktioniert, können Sie immer den man-Befehl (z.B. man grep) verwenden, um seine Handbuchseite anzuzeigen.

Bleiben Sie neugierig und viel Spaß beim Lernen von Linux!