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

Bash-Anfängerserie Nr. 10:Automatisierung mit Bash

Sie können jetzt alle Bash-Fähigkeiten, die Sie in dieser Bash-Anfängerserie erlernt haben, verwenden, um sehr nützliche Bash-Skripte zu erstellen, die Ihnen bei der Automatisierung langweiliger, sich wiederholender Verwaltungsaufgaben helfen würden.

Automatisierung sollte wirklich Ihr ultimatives Ziel sein, wenn Sie ein Bash-Skript schreiben.

In diesem Tutorial zeige ich Ihnen einige Automatisierungsskripte, die Sie später erweitern können, um jede gewünschte Aufgabe zu automatisieren. Diese Skripte verwenden Bash-Arrays, if-else, Schleifen und andere Konzepte, die Sie in dieser Serie gelernt haben.

Automatisierung der Benutzerverwaltung mit Bash-Skript

Das Erstellen eines Benutzers auf mehreren Servern ist möglicherweise etwas, das Sie als Systemadministrator täglich tun würden. Es ist eine mühsame Aufgabe, also erstellen wir ein Bash-Skript, das es automatisiert.

Erstellen Sie zunächst eine Textdatei, die alle Server-Hostnamen oder IP-Adressen enthält, denen Sie den Benutzer hinzufügen möchten.

Hier habe ich beispielsweise die Datei servers.txt erstellt das umfasst fünf verschiedene Server:

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

Denken Sie daran, dass ich Server-Hostnamen verwendet habe, da ich die IP-Adressen bereits in meine /etc/hosts eingefügt habe Datei. Sie können hier auch die SSH-Konfigurationsdatei verwenden.

Sehen Sie sich nun die folgende adduser.sh an Bash-Skript:

#!/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

Die adduser.sh Das Skript fordert Sie zunächst auf, den Benutzernamen und die Benutzer-ID des Benutzers einzugeben, den Sie hinzufügen möchten. dann geht es in eine Schleife und stellt eine Verbindung zu allen Servern in der servers.txt her Datei per SSH und fügen Sie den gewünschten Benutzer hinzu.

Lassen Sie uns das Skript ausführen und sehen, wie es funktioniert:

Das Skript wurde erfolgreich ausgeführt und der Benutzer Ansible wurde auf allen fünf Servern hinzugefügt. Es gibt hier ein paar wichtige Punkte, die Sie verstehen müssen:

  • Sie können entweder leeres ssh verwenden Passphrasen oder führen Sie ssh-agent aus um zu vermeiden, dass Sie aufgefordert werden, einen Schlüssel (oder ein Passwort) einzugeben, während das Skript ausgeführt wird.
  • Sie müssen über ein gültiges Konto mit Superuser-Zugriff (ohne Passwortanforderung) auf allen Servern verfügen.

Stellen Sie sich vor, Sie müssten einen Benutzer auf über 100 verschiedenen Linux-Servern hinzufügen! Die adduser.sh Skript kann Ihnen definitiv unzählige Stunden Arbeit ersparen.

Automatisierung von Backups mit Bash-Skript

Das Erstellen von Backups ist etwas, das wir alle regelmäßig tun, also warum nicht automatisieren? Sehen Sie sich die folgende backup.sh an Skript:

#!/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."

Sie haben also zuerst ein Array mit dem Namen backup_dirs erstellt die alle Verzeichnisnamen speichert, die wir sichern möchten. Dann haben Sie drei weitere Variablen erstellt:

  • dest_dir: Um das Backup-Zielverzeichnis anzugeben.
  • dest_server: Um den Backup-Zielserver anzugeben.
  • Sicherungszeit: Um das Datum der Sicherung anzugeben.

Als nächstes für alle Verzeichnisse in backup_dirs array, erstellen Sie ein gzip-komprimiertes tar-Archiv in /tmp , verwenden Sie dann das scp Befehl zum Senden/Kopieren der Sicherung an den Zielserver. Entfernen Sie abschließend alle gzip-Archive aus /tmp .

Hier ist ein Beispiellauf von backup.sh Skript:

[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.

Möglicherweise möchten Sie die Sicherungen jeden Tag um Mitternacht ausführen. In diesem Fall können Sie das Skript so planen, dass es als Cron-Job ausgeführt wird:

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

Überwachung des verfügbaren Speicherplatzes


Dateisysteme sind dazu bestimmt, keinen Platz mehr zu haben, das Einzige, was Sie tun können, ist schnell zu handeln, bevor Ihr System abstürzt! Sie können die verwenden df-Befehl, um den verbleibenden Speicherplatz auf einem beliebigen Dateisystem anzuzeigen:

[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

Meine /Datenbank Das Dateisystem hat fast keinen Platz mehr, da es derzeit zu 97 % ausgelastet ist. Ich kann nur die Verwendung anzeigen, wenn ich den awk-Befehl verwende, um nur das fünfte Feld anzuzeigen.

Sehen Sie sich nun die folgende disk_space.sh an Bash-Skript:

#!/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

Zuerst haben Sie ein Dateisystem erstellt Arrays, die alle Dateisysteme enthalten, die Sie überwachen möchten. Dann erfassen Sie für jedes Dateisystem den Nutzungsprozentsatz und prüfen, ob er größer oder gleich 90 ist. Wenn die Nutzung über 90 % liegt, wird eine Warn-E-Mail gesendet, die darauf hinweist, dass dem Dateisystem der Speicherplatz ausgeht.

Beachten Sie, dass Sie your_email ersetzen müssen im Skript mit Ihrer tatsächlichen E-Mail.

Ich habe das Skript ausgeführt:

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

Und ich habe die folgende E-Mail in meinem Posteingang:

Sie können disk_space.sh ausführen Skript sechs Stunden oder so. In diesem Fall können Sie das Skript auch so planen, dass es als Cron-Job ausgeführt wird:

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

Sie können noch etwas üben, indem Sie versuchen, die Aufgaben zu lösen, die in der Arbeitsmappe unten dargestellt sind. Und ja, sie enthalten auch die Antworten.

Bash-Kapitel-10-ÜbungsfragenProbleme und ihre Lösung zum Üben des gerade Gelernten in diesem KapitelBash-Kapitel-10-Übungsfragen-Linux-Handbuch.pdf40 KB

Dies bringt uns zum Ende unserer Bash-Anfänger-Tutorial-Reihe. Ich hoffe, es hat Ihnen Spaß gemacht, Bash-Scripting zu lernen. Mit Bash-Scripting in Ihrem Arsenal an Fähigkeiten können Sie jede langweilige, ermüdende Aufgabe unter Linux automatisieren!

Die gesamte Bash Beginner Series ist auch im PDF-Format verfügbar. Sie können es kaufen, um uns zu unterstützen. Das Buch ist kostenlos erhältlich (zusammen mit mehreren anderen Büchern für unsere Pro-Mitglieder).

Kaufen Sie die Bash Beginner Series im PDF-Format
Linux
  1. Welcher Shell-Interpreter führt ein Skript ohne Shebang aus?

  2. Kann ein Bash-Skript nicht mit Strg + C stoppen?

  3. Bash-Anfängerserie Nr. 9:Verwenden von Funktionen in Bash

  4. Bash-Anfängerserie Nr. 8:Schleifen in Bash

  5. Hinzufügen zu $PYTHONPATH mit Bash-Skript

Bash-Anfängerserie Nr. 5:Verwenden von arithmetischen Operatoren in Bash-Skripten

Bash-Anfängerserie Nr. 4:Verwenden von Arrays in Bash

Bash-Anfängerserie Nr. 3:Übergabe von Argumenten an Bash-Skripte

Bash-Anfängerserie Nr. 7:Entscheidungsfindung mit If Else- und Case-Anweisungen

Bash-Anfängerserie Nr. 6:Zeichenfolgenoperationen in Bash

Bash-Skript für Schleife mit Beispielen erklärt