GNU/Linux >> Tutoriales Linux >  >> Linux

Bash Beginner Series #10:Automatización con Bash

Ahora puede usar todas las habilidades de bash que ha aprendido en esta serie Bash Beginner para crear scripts de bash muy útiles que lo ayudarán a automatizar tareas administrativas aburridas y repetitivas.

La automatización realmente debería ser su objetivo final siempre que escriba un script bash.

En este tutorial, le mostraré algunos scripts de automatización que luego puede ampliar para automatizar cualquier tarea que desee. Estos scripts utilizarán matrices bash, if-else, bucles y otros conceptos que ha aprendido en esta serie.

Automatizar la administración de usuarios con bash script

Crear un usuario en varios servidores puede ser algo que haría a diario como administrador de sistemas. Es una tarea tediosa, así que vamos a crear un script bash que la automatice.

Primero, cree un archivo de texto que incluya todos los nombres de host del servidor o las direcciones IP donde desea agregar al usuario.

Por ejemplo, aquí creé el archivo servers.txt que incluye cinco servidores diferentes:

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

Tenga en cuenta que he usado nombres de host del servidor porque ya he incluido las direcciones IP en mi /etc/hosts expediente. También puede usar el archivo de configuración SSH aquí.

Ahora eche un vistazo al siguiente adduser.sh secuencia de comandos 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

El adduser.sh la secuencia de comandos primero le pedirá que ingrese el nombre de usuario y la identificación de usuario del usuario que desea agregar; luego, realizará un bucle y se conectará a todos los servidores en servers.txt archivo a través de SSH y agregue el usuario solicitado.

Ejecutemos el script y veamos cómo funciona:

El script se ejecutó correctamente y se agregó el usuario ansible en los cinco servidores. Aquí hay un par de puntos importantes que debe comprender:

  • Puede usar ssh vacío pasar frases o ejecutar ssh-agent para evitar que se le solicite ingresar una clave (o contraseña) mientras se ejecuta el script.
  • Debe tener una cuenta válida que tenga acceso de superusuario (sin necesidad de contraseña) en todos los servidores.

¡Imagínese que necesita agregar un usuario en más de 100 servidores Linux diferentes! El adduser.sh script definitivamente puede ahorrarle incontables horas de trabajo.

Automatización de respaldos con bash script

Hacer copias de seguridad es algo que todos hacemos regularmente, ¿por qué no automatizarlo? Echa un vistazo al siguiente backup.sh guión:

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

Entonces, primero creó una matriz llamada backup_dirs que almacena todos los nombres de directorio que queremos respaldar. Luego, creó otras tres variables:

  • dir_destino: Para especificar el directorio de destino de la copia de seguridad.
  • servidor_destino: Para especificar el servidor de destino de la copia de seguridad.
  • tiempo_de_respaldo: Para especificar la fecha de la copia de seguridad.

A continuación, para todos los directorios de backup_dirs matriz, cree un archivo tar comprimido con gzip en /tmp , luego use el scp comando para enviar/copiar la copia de seguridad al servidor de destino. Finalmente, elimine todos los archivos gzip de /tmp .

Aquí hay una ejecución de muestra de backup.sh guión:

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

Es posible que desee realizar copias de seguridad todos los días a la medianoche. En este caso, puede programar el script para que se ejecute como un trabajo cron:

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

Supervisar el espacio disponible en disco


Los sistemas de archivos están destinados a quedarse sin espacio, ¡lo único que puede hacer es actuar rápido antes de que su sistema se bloquee! Puede utilizar el Comando df para ver el espacio restante en cualquier sistema de archivos:

[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

Mi /base de datos el sistema de archivos está casi sin espacio ya que actualmente tiene un uso del 97%. Puedo mostrar solo el uso si uso el comando awk para mostrar solo el quinto campo.

Ahora eche un vistazo al siguiente disk_space.sh secuencia de comandos 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

Primero, creó un sistema de archivos matrices que contienen todos los sistemas de archivos que desea monitorear. Luego, para cada sistema de archivos, toma el porcentaje de uso y verifica si es mayor o igual a 90. Si el uso es superior al 90%, envía un correo electrónico de alerta que indica que el sistema de archivos se está quedando sin espacio.

Tenga en cuenta que debe reemplazar su_correo electrónico en el guión con su correo electrónico real.

Ejecuté el script:

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

Y recibí el siguiente correo electrónico en mi bandeja de entrada:

Es posible que desee ejecutar disk_space.sh guión de seis horas más o menos. En este caso, también puede programar el script para que se ejecute como un trabajo cron:

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

Puede practicar un poco más tratando de resolver los problemas presentados en el libro de trabajo a continuación. Y sí, también incluyen las respuestas.

Bash Capítulo 10 Preguntas de práctica Problemas y su solución para practicar lo que acabas de aprender en este capítulo Bash-Chapter-10-Practice-Questions-Linux-Handbook.pdf40 KB

Esto nos lleva al final de nuestra serie de tutoriales para principiantes de bash. Espero que hayas disfrutado aprendiendo scripting de bash. ¡Con bash scripting en su arsenal de habilidades, puede automatizar cualquier tarea aburrida y tediosa en Linux!

Toda la serie para principiantes de Bash también está disponible en formato PDF. Puede comprarlo para ayudarnos. El libro está disponible de forma gratuita (junto con varios otros libros para nuestros miembros Pro).

Compre la serie Bash Beginner en formato PDF
Linux
  1. ¿Qué intérprete de Shell ejecuta un script sin Shebang?

  2. Bash Beginner Series #9:Uso de funciones en Bash

  3. Bash Beginner Series #8:Bucles en Bash

  4. nombre base con espacios en un script bash?

  5. Cómo matar el script de python con el script bash

Bash Beginner Series #5:Uso de operadores aritméticos en Bash Scripting

Bash Beginner Series #4:Uso de arreglos en Bash

Bash Beginner Series #3:Pasando Argumentos a Bash Scripts

Bash Beginner Series #7:Toma de decisiones con sentencias If Else y Case

Bash Beginner Series #6:Operaciones de cadenas en Bash

Bash Script for Loop explicado con ejemplos