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:
- Sind von Ihrem Server aus erreichbar
- Lassen Sie die Namensauflösung für sie arbeiten
- 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.