GNU/Linux >> Tutoriels Linux >  >> Linux

Bash Beginner Series #10 :Automatisation avec Bash

Vous pouvez maintenant utiliser toutes les compétences bash que vous avez apprises dans cette série Bash Beginner pour créer des scripts bash très utiles qui vous aideraient à automatiser les tâches administratives répétitives ennuyeuses.

L'automatisation devrait vraiment être votre objectif ultime chaque fois que vous écrivez un script bash.

Dans ce didacticiel, je vais vous montrer quelques scripts d'automatisation que vous pourrez ensuite étendre pour automatiser toutes les tâches de votre choix. Ces scripts utiliseront des tableaux bash, des if-else, des boucles et d'autres concepts que vous avez appris dans cette série.

Automatiser la gestion des utilisateurs avec un script bash

La création d'un utilisateur sur plusieurs serveurs peut être quelque chose que vous feriez quotidiennement en tant qu'administrateur système. C'est une tâche fastidieuse, et créons donc un script bash qui l'automatise.

Tout d'abord, créez un fichier texte qui inclut tous les noms d'hôte ou adresses IP du serveur sur lesquels vous souhaitez ajouter l'utilisateur.

Par exemple, ici j'ai créé le fichier servers.txt qui comprend cinq serveurs différents :

[email protected]:~$ cat servers.txt
server1
server2
server3
server4
server5

Gardez à l'esprit que j'ai utilisé des noms d'hôte de serveur car j'ai déjà inclus les adresses IP dans mon /etc/hosts dossier. Vous pouvez également utiliser le fichier de configuration SSH ici.

Jetez maintenant un coup d'œil au fichier adduser.sh suivant script bash :

#!/bin/bash

servers=$(cat servers.txt)

echo -n "Enter the username: "
read name
echo -n "Enter the user id: "
read uid

for i in $servers; do
echo $i
ssh $i "sudo useradd -m -u $uid ansible"
if [ $? -eq 0 ]; then
echo "User $name added on $i"
else
echo "Error on $i"
fi
done

Le adduser.sh le script vous demanderait d'abord d'entrer le nom d'utilisateur et l'identifiant de l'utilisateur que vous souhaitez ajouter ; ensuite, il bouclera et se connectera à tous les serveurs dans le servers.txt fichier via SSH et ajoutez l'utilisateur demandé.

Exécutons le script et voyons comment cela fonctionne :

Le script s'est exécuté avec succès et l'utilisateur ansible a été ajouté sur les cinq serveurs. Il y a quelques points importants ici que vous devez comprendre :

  • Vous pouvez soit utiliser un ssh vide passer des phrases ou exécuter ssh-agent pour éviter d'être invité à saisir une clé (ou un mot de passe) pendant l'exécution du script.
  • Vous devez disposer d'un compte valide disposant d'un accès super utilisateur (sans mot de passe) sur tous les serveurs.

Imaginez que vous deviez ajouter un utilisateur sur plus de 100 serveurs Linux différents ! Le adduser.sh script peut certainement vous faire économiser d'innombrables heures de travail.

Automatiser les sauvegardes avec le script bash

Faire des sauvegardes est quelque chose que nous faisons tous régulièrement, alors pourquoi ne pas l'automatiser ? Jetez un œil au fichier suivant backup.sh script :

#!/bin/bash

backup_dirs=("/etc" "/home" "/boot")
dest_dir="/backup"
dest_server="server1"
backup_date=$(date +%b-%d-%y)

echo "Starting backup of: ${backup_dirs[@]}"

for i in "${backup_dirs[@]}"; do
sudo tar -Pczf /tmp/$i-$backup_date.tar.gz $i
if [ $? -eq 0 ]; then
echo "$i backup succeeded."
else
echo "$i backup failed."
fi
scp /tmp/$i-$backup_date.tar.gz $dest_server:$dest_dir
if [ $? -eq 0 ]; then
echo "$i transfer succeeded."
else
echo "$i transfer failed."
fi
done

sudo rm /tmp/*.gzecho "Backup is done."

Donc, vous avez d'abord créé un tableau nommé backup_dirs qui stocke tous les noms de répertoires que nous voulons sauvegarder. Ensuite, vous avez créé trois autres variables :

  • dest_dir : Pour spécifier le répertoire de destination de la sauvegarde.
  • dest_server : Pour spécifier le serveur de destination de la sauvegarde.
  • backup_time : Pour spécifier la date de la sauvegarde.

Ensuite, pour tous les répertoires dans les backup_dirs tableau, créez une archive tar compressée gzip dans /tmp , puis utilisez scp commande pour envoyer/copier la sauvegarde vers le serveur de destination. Enfin, supprimez toutes les archives gzip de /tmp .

Voici un exemple d'exécution de backup.sh script :

[email protected]:~$ ./backup.sh
Starting backup of: /etc /home /boot
/etc backup succeeded.
etc-Aug-30-20.tar.gz 100% 1288KB 460.1KB/s   00:02
/etc transfer succeeded.
/home backup succeeded.
home-Aug-30-20.tar.gz 100% 2543KB 547.0KB/s   00:04
/home transfer succeeded.
/boot backup succeeded.
boot-Aug-30-20.tar.gz 100%  105MB 520.2KB/s   03:26
/boot transfer succeeded.
Backup is done.

Vous voudrez peut-être exécuter les sauvegardes tous les jours à minuit. Dans ce cas, vous pouvez planifier l'exécution du script en tant que tâche cron :

[email protected]:~$ crontab -e
0	0	*	*	* /home/kabary/scripts/backup.sh

Surveillance de l'espace disque disponible


Les systèmes de fichiers sont destinés à manquer d'espace, la seule chose que vous puissiez faire est d'agir rapidement avant que votre système ne plante ! Vous pouvez utiliser le df pour voir l'espace restant sur n'importe quel système de fichiers :

[email protected]:~$ df -h / /apps /database
Filesystem Size  Used Avail Use% Mounted on
/dev/sda5 20G  7.9G   11G  44% /
/dev/mapper/vg1-applv 4.9G  2.4G  2.3G  52% /apps
/dev/mapper/vg1-dblv 4.9G  4.5G  180M  97% /database

Ma /base de données Le système de fichiers est presque à court d'espace car il est actuellement utilisé à 97 %. Je ne peux afficher que l'utilisation si j'utilise la commande awk pour n'afficher que le cinquième champ.

Jetez maintenant un coup d'œil au fichier suivant disk_space.sh script bash :

#!/bin/bash
filesystems=("/" "/apps" "/database")
for i in ${filesystems[@]}; do
usage=$(df -h $i | tail -n 1 | awk '{print $5}' | cut -d % -f1)
if [ $usage -ge 90 ]; then
alert="Running out of space on $i, Usage is: $usage%"
echo "Sending out a disk space alert email."
echo $alert | mail -s "$i is $usage% full" your_email
fi
done

Tout d'abord, vous avez créé un système de fichiers tableaux contenant tous les systèmes de fichiers que vous souhaitez surveiller. Ensuite, pour chaque système de fichiers, vous saisissez le pourcentage d'utilisation et vérifiez s'il est supérieur ou égal à 90. Si l'utilisation est supérieure à 90 %, il envoie un e-mail d'alerte indiquant que le système de fichiers manque d'espace.

Notez que vous devez remplacer votre_email dans le script avec votre adresse e-mail réelle.

J'ai exécuté le script :

[email protected]:~$ ./disk_space.sh
Sending out a disk space alert email.

Et j'ai reçu l'e-mail suivant dans ma boîte de réception :

Vous voudrez peut-être exécuter le fichier disk_space.sh script six heures ou plus. Dans ce cas, vous pouvez également planifier l'exécution du script en tant que tâche cron :

[email protected]:~$ crontab -e
0	*/6 *		*		* /home/kabary/scripts/disk_space.sh

Vous pouvez vous exercer davantage en essayant de résoudre les problèmes présentés dans le manuel ci-dessous. Et oui, ils incluent également les réponses.

Bash Chapter 10 Practice QuestionsProblems et leur solution pour mettre en pratique ce que vous venez d'apprendre dans ce chapitreBash-Chapter-10-Practice-Questions-Linux-Handbook.pdf40 KB

Cela nous amène à la fin de notre série de tutoriels pour débutants bash. J'espère que vous avez aimé apprendre les scripts bash. Avec les scripts bash dans votre arsenal de compétences, vous pouvez automatiser n'importe quelle tâche ennuyeuse et fastidieuse sous Linux !

L'intégralité de la série Bash Beginner est également disponible au format PDF. Vous pouvez l'acheter pour nous soutenir. Le livre est disponible gratuitement (ainsi que plusieurs autres livres pour nos membres Pro).

Acheter la série Bash pour débutants sous forme PDF
Linux
  1. Quel interpréteur Shell exécute un script sans Shebang ?

  2. La commande Rm dans le script Bash ne fonctionne pas avec la variable ?

  3. Autorisation refusée avec bash.sh pour exécuter cron

  4. Ajout à $PYTHONPATH avec un script bash

  5. Comment tuer le script python avec le script bash

Bash Beginner Series #5 :Utilisation des opérateurs arithmétiques dans les scripts Bash

Bash Beginner Series #4 :Utiliser des tableaux dans Bash

Bash Beginner Series #3 :Passer des arguments aux scripts Bash

Bash Beginner Series #7 :Prise de décision avec des instructions If Else et Case Statements

Bash Beginner Series #6 :Opérations sur les chaînes dans Bash

Script bash pour la boucle expliqué avec des exemples