GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash-Scripting:So lesen Sie Daten aus Textdateien

Etwas, das ich an Linux (und an Unix-ähnlichen Systemen im Allgemeinen) mag, ist, dass Konfigurationen und Eigenschaften in Textdateien enthalten sind. Dies ermöglicht einem Administrator mit den richtigen Berechtigungen um die Dateien zu prüfen und gegebenenfalls Änderungen vorzunehmen. Textdateien sind auch einfache und bequeme Daten Quellen für die typischen Operationen eines Systemadministrators. In bestimmten Situationen können Sie Textdateien als Ausgabe verwenden auch mit normalen Benutzern geteilt werden. Ich behandle Beispiele für beide Fälle in diesem Artikel.

Hinweis :Schreiben nach stdout und Lesen von stdin Die Verwendung von Pipes ist wie die Verwendung einer virtuellen Textdatei. In vielen Fällen ist das nicht der Fall haben eine Textdatei, aber in anderen verwenden Sie einfach die Ausgabe eines vorherigen Befehls, als wäre es eine Textdatei.

[Das könnte Ihnen auch gefallen: Meine 8 beliebtesten praktischen Linux-Befehle]

Wann sollten Sie also die eine oder andere Methode anwenden? Nun, in einigen Fällen existiert die Textdatei bereits, wie z. B. /etc/hosts Datei zum Beispiel. In anderen Fällen müssen Sie die Datei nicht physisch schreiben lassen, da Sie nur am Ergebnis interessiert sind (und die Datenstruktur wirklich einfach ist). In verschiedenen Szenarien kann es erforderlich sein, dass Sie die Informationen aus Gründen wie Klarheit, Fehlerbehebung, Prüfung oder zur Analyse der Struktur der Informationen und anderer vorhandener Inhaltstypen in einer Datei speichern.

Überprüfen Sie die Erreichbarkeit und Namensauflösung für eine Liste von Servern

Angenommen, Sie haben eine Liste mit neuen Computern und müssen Folgendes überprüfen:

  1. Sind von Ihrem Server aus erreichbar
  2. Lassen Sie die Namensauflösung für sie arbeiten
  3. Hören auf Port 22 (für SSH)

Sie müssen den Status auch dem Projektteam melden, für das Sie ihn in einem Tabellenkalkulationsformat einreichen müssen. Wenn Sie mit Dutzenden von Servern arbeiten und diese Tests an verschiedenen Tagen wiederholen müssen, ist es auf jeden Fall sinnvoll, über eine automatisierte Vorgehensweise nachzudenken.

Die Eingabedatei

Dies ist die Tabelle, aus der ich die in den folgenden Beispielen verwendete CSV-Datei (Comma-Separated Value) erhalten habe.

Und das ist die CSV-Datei:

ServerName,IP
m2.example.com,192.168.2.99
xtower.example.com,192.168.2.111
win2k16.example.com,192.168.101.41
control.example.com,192.168.101.200
node1.example.com,192.168.101.201
node2.example.com,192.168.101.202
node3.example.com,192.168.101.203
node4.example.com,192.168.101.204
node5.example.com,192.168.101.205

(Das Konvertieren der Tabelle in/von CSV wurde manuell durchgeführt und wird in diesem Artikel nicht behandelt.)

Das Skript

Das folgende Skript verwende ich zum Testen der Server:

1     #!/bin/bash
2     
3     input_file=hosts.csv
4     output_file=hosts_tested.csv
5     
6     echo "ServerName,IP,PING,DNS,SSH" > "$output_file"
7     
8     tail -n +2 "$input_file" | while IFS=, read -r host ip _
9     do
10        if ping -c 3 "$ip" > /dev/null; then
11            ping_status="OK"
12        else
13            ping_status="FAIL"
14        fi
15    
16        if nslookup "$host" > /dev/null; then
17            dns_status="OK"
18        else
19            dns_status="FAIL"
20        fi
21    
22        if nc -z -w3 "$ip" 22 > /dev/null; then
23            ssh_status="OK"
24        else
25            ssh_status="FAIL"
26        fi
27    
28        echo "Host = $host IP = $ip" PING_STATUS = $ping_status DNS_STATUS = $dns_status SSH_STATUS = $ssh_status
29        echo "$host,$ip,$ping_status,$dns_status,$ssh_status" >> $output_file
30    done

Die folgenden Zeilenelemente erläutern die obigen Skripteinträge:

Zeile 6: Initialisieren Sie die Ausgabedatei mit dem Header und drei neuen Feldern, um den Status der Erreichbarkeit über ping darzustellen und Namensauflösung

Zeile 8: Lesen Sie die Eingabedatei Zeile für Zeile mit einem while Schleife, wobei die erste Zeile (Kopfzeile) ignoriert wird. Es erstellt auch die Variablen für Host und IP, extrahiert die Werte mit dem Trennzeichen (Komma) und ignoriert den Rest.

Zeilen 10 bis 26: Führen Sie den ping aus , nslookup , und nc Befehle und senden die Ausgabe an null , weil wir nur am Rückgabestatus der Befehle interessiert sind

Zeile 28: Senden Sie die Ausgabe an stdout für die Person, die das Skript ausführt

Zeile 29: Senden Sie die Daten mit den drei neuen Spalten (ping_status, dns_status und ssh_status) an die Ausgabedatei

Öffnen Sie die Ausgabedatei als Tabellenkalkulation

Senden Sie die Ausgabedatei an eine Workstation, wo Sie sie in Ihrer bevorzugten Tabellenkalkulationsanwendung öffnen können. Wenn Sie dies an nicht technisch versierte Personen senden, möchten Sie es möglicherweise im standardmäßigen Tabellenformat speichern, das im Unternehmen verwendet wird, um ihnen das Leben zu erleichtern.

[ Kostenloser Spickzettel:Holen Sie sich eine Liste von Linux-Dienstprogrammen und -Befehlen zum Verwalten von Servern und Netzwerken. ] 

Abschluss

In diesem Artikel habe ich einige gängige und einfache Tools angewendet, die auf allen Linux-Systemen verfügbar sind, um den Test auf Erreichbarkeit, Namensauflösung und Konnektivität über SSH zu automatisieren. In einigen Projekten müsste diese Art der Validierung aufgrund der Änderungsprozesse, an denen andere Teams beteiligt sind (z. B. Netzwerk und Firewall), für Dutzende von Servern durchgeführt und sehr oft wiederholt werden.

Die Prinzipien können auf andere Arten von Tests erweitert werden. Beispielsweise könnten Sie die Konnektivität für einen anderen Port testen. Wenn die Tests komplexer werden, z. B. einen Befehl auf dem Host ausführen, wenn er über SSH erreichbar ist , dann haben Sie es mit einer anderen Art von Problem zu tun, das ein anderes Tool erfordert. Und für eine solche Situation empfehle ich Ihnen dringend, sich Ansible anzusehen.


Linux
  1. Wie verschiebt man 100 Dateien aus einem Ordner mit Tausenden?

  2. Wie liest man eine Variable aus einer Datei?

  3. Wie entferne ich Zeilenumbrüche aus einer Textdatei?

  4. Textdatei als Befehle in Bash ausführen

  5. Wie liest man die letzte Zeile einer Textdatei mit Bash in eine Variable?

Wie man Textdateien unter Linux vergleicht und zusammenführt

So erstellen Sie Verzeichnisse aus einer Textdatei unter Linux

So zeigen Sie Daten aus einer Textdatei in Linux an

Bash-Scripting:So schreiben Sie Daten in Textdateien

So extrahieren Sie E-Mail-Adressen aus einer Textdatei unter Linux

So entfernen Sie alle Leerzeichen aus einer Textdatei