GNU/Linux >> Tutoriels Linux >  >> Linux

Script bash :comment lire des données à partir de fichiers texte

Ce que j'aime sous Linux (et dans les systèmes de type Unix en général), c'est que les configurations et les propriétés sont contenues dans des fichiers texte. Cela permet à un administrateur avec les bonnes autorisations pour examiner les fichiers et apporter des modifications si nécessaire. Les fichiers texte sont également des sources de données simples et pratiques pour les opérations typiques d'un administrateur système. Dans certaines situations, vous pouvez utiliser des fichiers texte comme sortie à partager également avec les utilisateurs réguliers. Je couvre des exemples des deux cas dans cet article.

Remarque  :Écriture sur stdout et lecture depuis stdin utiliser des tubes revient à utiliser un fichier texte virtuel. Dans de nombreux cas, vous faites avoir un fichier texte, mais dans d'autres, vous utilisez simplement la sortie d'une commande précédente comme s'il s'agissait d'un fichier texte.

[ Vous pourriez également apprécier : Mes 8 commandes Linux pratiques préférées ]

Alors, quand devriez-vous utiliser une méthode ou l'autre ? Eh bien, dans certains cas, le fichier texte existe déjà, comme le /etc/hosts fichier, par exemple. Dans d'autres cas, vous n'avez pas besoin d'écrire physiquement le fichier car vous n'êtes intéressé que par le résultat (et la structure des données est vraiment simple). Différents scénarios peuvent nécessiter que vous stockiez les informations dans un fichier pour des raisons telles que la clarté, le dépannage, l'audit ou la capacité d'analyser la structure des informations et d'autres types de contenu qui s'y trouvent.

Vérifier l'accessibilité et la résolution des noms pour une liste de serveurs

Supposons que vous disposiez d'une liste de nouvelles machines et que vous deviez vérifier qu'elles :

  1. Sont accessibles depuis votre serveur
  2. La résolution de noms fonctionne pour eux
  3. Écoutent sur le port 22 (pour SSH)

Vous devez également signaler le statut à l'équipe de projet pour laquelle vous devez soumettre dans un format de feuille de calcul. Si vous travaillez avec des dizaines de serveurs et que vous devez répéter ces tests à différents jours, il est certainement utile de réfléchir à une manière automatisée de le faire.

Le fichier d'entrée

Il s'agit de la feuille de calcul dans laquelle j'ai obtenu le fichier CSV (valeurs séparées par des virgules) utilisé dans les exemples suivants.

Et voici le fichier 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 conversion de la feuille de calcul vers/depuis CSV a été effectuée manuellement et ne sera pas abordée dans cet article.)

Le scénario

Voici le script que j'utilise pour tester les serveurs :

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

Les éléments de ligne suivants expliquent les entrées de script ci-dessus :

Ligne 6 : Initialisez le fichier de sortie avec l'en-tête et trois nouveaux champs pour représenter l'état d'accessibilité via ping et résolution de nom

Ligne 8 : Lire le fichier d'entrée ligne par ligne à l'aide d'un while boucle, en ignorant la première ligne (en-tête). Il crée également les variables pour host et ip, en extrayant les valeurs à l'aide du séparateur (virgule) et en ignorant le reste.

Lignes 10 à 26 : Exécutez le pingnslookup , et nc commandes, en envoyant la sortie à null parce que nous sommes juste intéressés par le statut de retour des commandes

Ligne 28 : Envoyez la sortie à stdout pour la personne qui exécute le script

Ligne 29 : Envoyez les données au fichier de sortie avec les trois nouvelles colonnes (ping_status, dns_status et ssh_status)

Ouvrir le fichier de sortie sous forme de feuille de calcul

Envoyez le fichier de sortie à un poste de travail où vous pourrez l'ouvrir dans votre tableur préféré. Si vous l'envoyez à des personnes non techniques, vous souhaiterez peut-être l'enregistrer dans le format de feuille de calcul par défaut utilisé dans l'entreprise pour leur faciliter la vie.

[ Aide-mémoire gratuit :obtenez une liste d'utilitaires et de commandes Linux pour gérer les serveurs et les réseaux. ] 

Récapitulez

Dans cet article, j'ai appliqué des outils courants et simples disponibles sur tous les systèmes Linux pour automatiser le test d'accessibilité, de résolution de noms et de connectivité via SSH. Dans certains projets, ce type de validation devrait être fait pour des dizaines de serveurs et répété un nombre important de fois en raison des processus de changement qui impliquent d'autres équipes (Réseau et Pare-feu, par exemple).

Les principes peuvent être étendus à d'autres types de tests. Par exemple, vous pouvez tester la connectivité pour un port différent. Si les tests deviennent plus complexes, comme exécuter une commande sur l'hôte s'il est accessible via SSH , vous avez alors affaire à un type de problème différent, qui nécessite un outil différent. Et pour une situation comme celle-là, je vous recommande fortement de consulter Ansible.


Linux
  1. Comment ajouter des numéros de ligne aux fichiers texte sous Linux

  2. Comment prévenir et récupérer de la suppression accidentelle de fichiers sous Linux

  3. Comment lire une variable à partir d'un fichier ?

  4. Comment distinguer le binaire des fichiers texte sous Linux

  5. Comment supprimer les retours à la ligne d'un fichier texte ?

Comment comparer et fusionner des fichiers texte sous Linux

Comment créer des répertoires à partir d'un fichier texte sous Linux

Comment afficher les données d'un fichier texte sous Linux

Script bash :comment écrire des données dans des fichiers texte

Comment extraire des adresses e-mail d'un fichier texte sous Linux

Comment supprimer tous les espaces blancs d'un fichier texte