Linux Data Piping

LinuxLinuxBeginner
Jetzt üben

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

Einführung

Linux Data Piping (Datenverkettung) ist eine leistungsstarke Technik, mit der Sie die Ausgabe eines Befehls als Eingabe an einen anderen Befehl übergeben können. Dieses grundlegende Konzept ermöglicht es Ihnen, komplexe Befehlsketten zu erstellen, um Daten effizient zu verarbeiten und zu transformieren. In diesem Lab lernen Sie, wie Sie den Pipe-Operator (|) verwenden, um mehrere Befehle zu kombinieren und Datenverarbeitungs-Workflows zu erstellen. Sie werden auch wichtige Textverarbeitungs-Utilities wie grep, sort, tr und uniq kennenlernen, die häufig in Befehlspipelines verwendet werden.

Am Ende dieses Labs werden Sie verstehen, wie Sie Daten mit Linux-Befehlszeilentools und dem Pipeline-Konzept filtern, transformieren und organisieren können. Diese Fähigkeiten sind unerlässlich für die Textverarbeitung, die Protokollanalyse (Log-Analyse) und die Datenmanipulation in Linux-Umgebungen.

Dies ist ein Guided Lab, das schrittweise Anweisungen bietet, um Ihnen beim Lernen und Üben zu helfen. Befolgen Sie die Anweisungen sorgfältig, um jeden Schritt abzuschließen und praktische Erfahrungen zu sammeln. Historische Daten zeigen, dass dies ein Labor der Stufe Anfänger mit einer Abschlussquote von 93% ist. Es hat eine positive Bewertungsrate von 100% von den Lernenden erhalten.

Die Verwendung des grep-Befehls zur Textfilterung verstehen

Der Befehl grep ist ein leistungsstarkes Textfilterungswerkzeug in Linux, das nach Mustern in Dateien oder Eingabeströmen sucht. In diesem Schritt lernen Sie, wie Sie mit grep bestimmte Textmuster in einer Datei finden.

Verwenden wir grep, um die Datei data.txt zu filtern und Zeilen zu finden, die die Zeichenkette "apple" enthalten:

cd ~/project
grep "apple" data.txt

Wenn Sie diesen Befehl ausführen, sollten Sie die folgende Ausgabe sehen:

apple
pineapple

Der Befehl grep hat zwei Zeilen gefunden, die die Zeichenkette "apple" enthalten: die Zeile mit nur "apple" und die Zeile mit "pineapple".

Lassen Sie uns nun mit grep alle Zeilen finden, die das Wort "system" in der Datei systems.txt enthalten:

grep "system" systems.txt

Die Ausgabe sollte Folgendes anzeigen:

file system
system update
system security

Der Befehl grep unterscheidet standardmäßig zwischen Groß- und Kleinschreibung (case-sensitive). Wenn Sie eine Suche durchführen möchten, bei der die Groß- und Kleinschreibung keine Rolle spielt (case-insensitive), können Sie die Option -i verwenden:

grep -i "SYSTEM" systems.txt

Dies erzeugt die gleiche Ausgabe wie zuvor, obwohl wir nach "SYSTEM" in Großbuchstaben gesucht haben, während die Datei "system" in Kleinbuchstaben enthält.

Nachdem Sie nun verstanden haben, wie Sie grep zum Filtern von Text verwenden, können Sie mit dem nächsten Schritt fortfahren, in dem Sie lernen, wie Sie Befehle mit Pipes (Datenleitungen) kombinieren.

Verwenden des Pipe-Operators zur Verkettung von Befehlen

In diesem Schritt lernen Sie, wie Sie den Pipe-Operator (|) verwenden, um mehrere Befehle miteinander zu verbinden. Die Pipe leitet die Ausgabe eines Befehls als Eingabe an einen anderen Befehl weiter, sodass Sie leistungsstarke Befehlsketten erstellen können.

Der Pipe-Operator wird durch das senkrechte Strichzeichen (|) dargestellt. Sehen wir uns an einem einfachen Beispiel an, wie er funktioniert:

cd ~/project
ls -l | grep "txt"

In diesem Beispiel listet der Befehl ls -l Dateien im aktuellen Verzeichnis auf, und seine Ausgabe wird an den Befehl grep "txt" weitergeleitet (gepiped), der filtert und nur Zeilen anzeigt, die "txt" enthalten. Das Ergebnis ist eine Liste von Textdateien in Ihrem aktuellen Verzeichnis.

Verwenden wir den Pipe-Operator, um grep mit anderen Befehlen zu kombinieren. Finden wir zunächst alle Zeilen, die "apple" in der Datei foods.txt enthalten:

cat foods.txt | grep "apple"

Die Ausgabe sollte sein:

apple juice
apple pie

Der Befehl cat liest die Datei und sendet ihren Inhalt über die Pipe an grep. Der Befehl grep filtert dann den Inhalt und zeigt nur Zeilen an, die "apple" enthalten.

Kombinieren wir nun weitere Befehle, um die Daten zu transformieren. Der Befehl tr wird verwendet, um Zeichen zu übersetzen oder zu löschen. Wir können ihn verwenden, um Kleinbuchstaben in Großbuchstaben umzuwandeln:

cat foods.txt | grep "apple" | tr '[:lower:]' '[:upper:]'

Die Ausgabe sollte nun sein:

APPLE JUICE
APPLE PIE

In dieser Befehlspipeline:

  1. cat foods.txt liest den Inhalt der Datei foods.txt
  2. Die Pipe (|) sendet diesen Inhalt an grep "apple"
  3. grep "apple" filtert und behält nur Zeilen bei, die "apple" enthalten
  4. Die Pipe (|) sendet diese gefilterten Zeilen an tr '[:lower:]' '[:upper:]'
  5. tr '[:lower:]' '[:upper:]' wandelt alle Kleinbuchstaben in Großbuchstaben um

Dies zeigt, wie Sie mehrere Befehle mithilfe von Pipes verketten können, um einen Datenverarbeitungs-Workflow zu erstellen. Jeder Befehl in der Kette führt eine bestimmte Operation an den Daten aus, und das Endergebnis ist die Kombination all dieser Operationen.

Probieren wir noch ein Beispiel mit der Datei numbers.txt aus. Wir sortieren diese Zahlen in aufsteigender Reihenfolge:

cat numbers.txt | sort -n

Die Ausgabe sollte sein:

1
3
5
7
8
9
10

Der Befehl sort mit der Option -n sortiert die Zahlen numerisch. Ohne Pipes müssten Sie die sortierte Ausgabe in eine neue Datei schreiben und diese Datei dann anzeigen, aber mit Pipes können Sie die Ergebnisse sofort sehen.

Fortgeschrittene Pipeline: Kombinieren von sort, uniq und anderen Befehlen

In diesem Schritt lernen Sie, wie Sie komplexere Pipelines erstellen, indem Sie mehrere Befehle wie sort, uniq, wc und andere kombinieren, um Daten zu verarbeiten und zu analysieren.

Der Befehl sort wird verwendet, um Textzeilen aus Dateien oder Eingabeströmen zu sortieren. Der Befehl uniq filtert wiederholte Zeilen in einer Datei oder einem Eingabestrom heraus, funktioniert aber nur korrekt bei sortierter Eingabe. Durch die Kombination dieser Befehle mit Pipes können Sie Daten effizient verarbeiten und organisieren.

Um die eindeutigen (unique) Frucht-Namen alphabetisch sortiert aus der Datei fruits_with_duplicates.txt anzuzeigen, können Sie Folgendes verwenden:

cd ~/project
cat fruits_with_duplicates.txt | sort | uniq

Die Ausgabe sollte sein:

apple
banana
kiwi
orange

In dieser Pipeline:

  1. cat fruits_with_duplicates.txt liest den Dateiinhalt
  2. sort ordnet die Zeilen alphabetisch an
  3. uniq entfernt doppelte Zeilen

Wenn Sie zählen möchten, wie oft jede Frucht in der Liste vorkommt, können Sie die Option -c mit uniq verwenden:

cat fruits_with_duplicates.txt | sort | uniq -c

Die Ausgabe zeigt die Anzahl jeder Frucht:

      3 apple
      2 banana
      1 kiwi
      1 orange

Um herauszufinden, wie viele Fehler in der Datei logs.txt aufgetreten sind, können Sie Folgendes verwenden:

cat logs.txt | grep "ERROR" | wc -l

Die Ausgabe sollte sein:

3

In dieser Pipeline:

  1. cat logs.txt liest die Protokolldatei (log file)
  2. grep "ERROR" filtert nur die Fehlermeldungen heraus
  3. wc -l zählt die Anzahl der Zeilen (d. h. die Anzahl der Fehlermeldungen)

Erstellen wir eine komplexere Pipeline mit der Datei employees.txt. Um die Abteilungen (departments) zu finden und zu zählen, wie viele Mitarbeiter (employees) sich in jeder Abteilung befinden:

cat employees.txt | cut -d',' -f2 | sort | uniq -c

Die Ausgabe sollte sein:

      2 HR
      2 IT
      2 Sales

In dieser Pipeline:

  1. cat employees.txt liest die Mitarbeiterdaten
  2. cut -d',' -f2 extrahiert das zweite Feld (Abteilung) unter Verwendung des Kommas als Trennzeichen (delimiter)
  3. sort sortiert die Abteilungen alphabetisch
  4. uniq -c zählt, wie viele Vorkommnisse jeder Abteilung

Diese Beispiele zeigen, wie Sie mehrere Befehle mithilfe von Pipes kombinieren können, um leistungsstarke Datenverarbeitungs-Workflows zu erstellen. Das Linux-Pipeline-Konzept ermöglicht es Ihnen, komplexe Datenverarbeitungsaufgaben in einfachere Schritte zu unterteilen, wodurch Ihre Befehlszeilenoperationen effizienter und flexibler werden.

Reale Anwendungen von Linux-Pipelines

In diesem letzten Schritt werden Sie einige reale Anwendungen von Linux-Pipelines untersuchen, indem Sie Protokolldateien (log files) analysieren, Datendateien verarbeiten und gängige Aufgaben der Systemadministration lösen.

Analysieren von Protokolldateien

Systemadministratoren müssen oft nützliche Informationen aus Protokolldateien extrahieren. Verwenden wir Pipelines, um die Datei server_log.txt zu analysieren:

  1. Zählen der Vorkommnisse jeder Protokollebene (log level) (INFO, WARNING, ERROR):
cd ~/project
cat server_log.txt | grep -o "INFO\|WARNING\|ERROR" | sort | uniq -c

Ausgabe:

      4 INFO
      3 ERROR
      2 WARNING
  1. Extrahieren aller Zeitstempel (timestamps) und Protokollebenen:
cat server_log.txt | grep -o "\[[0-9-]* [0-9:]*\] [A-Z]*" | head -5

Ausgabe:

[2023-05-10 08:45:22] INFO
[2023-05-10 09:12:35] ERROR
[2023-05-10 09:14:01] INFO
[2023-05-10 09:14:10] INFO
[2023-05-10 09:30:45] WARNING

Verarbeiten von CSV-Daten

Verwenden wir Pipelines, um die Datei sales.csv zu analysieren:

  1. Extrahieren und Zählen eindeutiger (unique) verkaufter Produkte:
cat sales.csv | tail -n +2 | cut -d',' -f2 | sort | uniq -c

Der Befehl tail -n +2 überspringt die Kopfzeile (header line) der CSV-Datei.

Ausgabe:

      2 Keyboard
      2 Laptop
      2 Monitor
      2 Mouse
      1 Printer
  1. Berechnen der Gesamtzahl der verkauften Einheiten (units):
cat sales.csv | tail -n +2 | cut -d',' -f3 | paste -sd+ | bc

Ausgabe:

113

Diese Pipeline extrahiert die dritte Spalte (Einheiten), kombiniert alle Werte mit "+"-Zeichen und verwendet dann den Rechner bc, um die Summe zu berechnen.

Systemüberwachungsaufgaben (System Monitoring Tasks)

Linux-Pipelines sind auch nützlich für Systemüberwachungs- und Administrationsaufgaben:

  1. Auflisten der Top 5 Prozesse, die den meisten Speicher verbrauchen:
ps aux | sort -k 4 -r | head -6

Dieser Befehl listet Prozesse auf, sortiert nach der 4. Spalte (Speicherverbrauch) in umgekehrter Reihenfolge und zeigt die obersten 6 Zeilen (einschließlich der Kopfzeile).

  1. Finden aller Dateien, die größer als 10 MB sind, und Sortieren nach Größe:
cd ..
find . -type f -size +10M -exec ls -lh {} \; | sort -k 5 -h

Dieser Befehl zeigt unsere großen Testdateien sortiert nach Größe an. Die Ausgabe sollte ähnlich aussehen wie:

-rw-r--r-- 1 labex labex 12M May 10 12:00 ./large_file3.dat
-rw-r--r-- 1 labex labex 15M May 10 12:00 ./large_file2.dat
-rw-r--r-- 1 labex labex 20M May 10 12:00 ./large_file1.dat

Dieses Beispiel demonstriert das Finden und Sortieren von Dateien nach Größe. Die Dateien wurden während der Einrichtung speziell erstellt, um zu zeigen, wie die Dateigrößenfilterung in Linux funktioniert.

Diese Beispiele zeigen, wie Linux-Pipelines verwendet werden können, um reale Probleme effizient zu lösen. Durch die Kombination einfacher Befehle können Sie leistungsstarke Datenverarbeitungs-Workflows erstellen, ohne komplexe Skripte oder Programme schreiben zu müssen.

Zusammenfassung

In diesem Lab haben Sie etwas über Linux Data Piping gelernt, eine leistungsstarke Technik für die Befehlskettenbildung (command chaining) und Datenverarbeitung. Die wichtigsten Konzepte, die in diesem Lab behandelt wurden, sind:

  1. Grundlegende Textfilterung mit grep: Sie haben gelernt, wie Sie den Befehl grep verwenden, um nach bestimmten Mustern in Textdateien zu suchen und Daten basierend auf diesen Mustern zu filtern.

  2. Befehlskettenbildung mit Pipes: Sie haben untersucht, wie Sie den Pipe-Operator (|) verwenden, um mehrere Befehle zu verbinden und die Ausgabe eines Befehls als Eingabe an einen anderen zu übergeben.

  3. Textverarbeitungsbefehle (Text Processing Commands): Sie haben mit verschiedenen Textverarbeitungsprogrammen gearbeitet, darunter:

    • grep zum Filtern von Text
    • tr zur Zeichenübersetzung (character translation)
    • sort zum Sortieren von Zeilen
    • uniq zum Entfernen von Duplikaten
    • cut zum Extrahieren bestimmter Felder aus strukturierten Daten
    • wc zum Zählen von Zeilen, Wörtern oder Zeichen
  4. Reale Anwendungen: Sie haben diese Pipeline-Techniken angewendet, um praktische Probleme wie Protokollanalyse (log analysis), CSV-Datenverarbeitung und Systemüberwachungsaufgaben zu lösen.

Diese Linux-Pipeline-Kenntnisse sind für Systemadministratoren, Datenanalysten und Entwickler, die in Linux-Umgebungen arbeiten, unerlässlich. Sie ermöglichen es Ihnen, komplexe Datenmanipulationsaufgaben direkt von der Befehlszeile aus durchzuführen, ohne vollständige Programme zu schreiben. Durch die Kombination einfacher Befehle über Pipes können Sie leistungsstarke Datenverarbeitungs-Workflows erstellen, die sowohl effizient als auch flexibel sind.

Wenn Sie Ihre Linux-Reise fortsetzen, werden Sie feststellen, dass die Beherrschung der Kunst der Befehlspipelines Ihre Produktivität und Problemlösungsfähigkeiten in der Befehlszeilenumgebung erheblich verbessern wird.