Qualcosa che mi piace in Linux (e nei sistemi simili a Unix in generale) è che le configurazioni e le proprietà sono contenute in file di testo. Ciò consente a un amministratore con le autorizzazioni corrette per esaminare i file e apportare modifiche se necessario. I file di testo sono anche fonti di dati semplici e convenienti per le operazioni tipiche di un amministratore di sistema. In determinate situazioni, puoi utilizzare i file di testo come output da condividere anche con gli utenti regolari. Tratto esempi di entrambi i casi in questo articolo.
Nota :scrittura su stdout e leggendo da stdin usare le pipe è come usare un file di testo virtuale. In molti casi, lo fai hai un file di testo, ma in altri usi semplicemente l'output di qualche comando precedente come se fosse un file di testo.
[ Potrebbe interessarti anche: I miei 8 pratici comandi Linux preferiti ]
Quindi, quando dovresti usare un metodo o l'altro? Bene, in alcuni casi, il file di testo esiste già, come il /etc/hosts
file, per esempio. In altri casi, non è necessario che il file venga scritto fisicamente perché sei interessato solo al risultato (e la struttura dei dati è davvero semplice). Diversi scenari potrebbero richiedere l'archiviazione delle informazioni in un file per motivi quali chiarezza, risoluzione dei problemi, controllo o capacità di analizzare la struttura delle informazioni e altri tipi di contenuti disponibili.
Verifica la raggiungibilità e la risoluzione dei nomi per un elenco di server
Supponiamo di avere un elenco di nuove macchine e di dover verificare che:
- Sono raggiungibili dal tuo server
- Fai in modo che la risoluzione dei nomi funzioni per loro
- Sono in ascolto sulla porta 22 (per SSH)
Devi anche segnalare lo stato al team di progetto per il quale devi inviare in un foglio di calcolo. Se stai lavorando con dozzine di server e devi ripetere questi test in giorni diversi, è sicuramente utile pensare a un modo automatizzato per farlo.
Il file di input
Questo è il foglio di lavoro in cui ho ottenuto il file CSV (comma-separated value) utilizzato nei seguenti esempi.
E questo è il file CSV:
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
(La conversione del foglio di lavoro in/da CSV è stata eseguita manualmente e non sarà trattata in questo articolo.)
Il copione
Quello che segue è lo script che utilizzo per testare i 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
I seguenti elementi di riga spiegano le voci di script sopra:
Riga 6: Inizializza il file di output con l'intestazione e tre nuovi campi per rappresentare lo stato di raggiungibilità tramite ping
e risoluzione del nome
Riga 8: Leggi il file di input riga per riga utilizzando un while
loop, ignorando la prima riga (intestazione). Crea anche le variabili per host e ip, estraendo i valori usando il separatore (virgola) e ignorando il resto.
Righe da 10 a 26: Esegui il ping
, nslookup
e nc
comandi, inviando l'output a null perché siamo interessati solo allo stato di ritorno dai comandi
Riga 28: Invia l'output a stdout per la persona che esegue lo script
Riga 29: Invia i dati al file di output con le tre nuove colonne (ping_status, dns_status e ssh_status)
Apri il file di output come foglio di calcolo
Invia il file di output a una workstation dove puoi aprirlo nella tua applicazione per fogli di calcolo preferita. Se lo invii a persone non tecniche, potresti voler salvarlo nel formato di foglio di lavoro predefinito utilizzato in azienda per semplificargli la vita.
[ Cheat sheet gratuito:ottieni un elenco di utilità e comandi Linux per la gestione di server e reti. ]
Concludi
In questo articolo ho applicato alcuni strumenti comuni e semplici disponibili su tutti i sistemi Linux per automatizzare il test di raggiungibilità, risoluzione dei nomi e connettività tramite SSH. In alcuni progetti, questo tipo di validazione dovrebbe essere eseguita per decine di server e ripetuta un numero significativo di volte a causa dei processi di modifica che coinvolgono altri team (Rete e Firewall, ad esempio).
I principi possono essere estesi ad altri tipi di test. Ad esempio, puoi testare la connettività per una porta diversa. Se i test diventano più complessi, ad esempio esegui un comando sull'host se è raggiungibile tramite SSH , allora hai a che fare con un diverso tipo di problema, che richiede uno strumento diverso. E per una situazione del genere, ti consiglio vivamente di rivolgerti ad Ansible.