Bash Beginner Series #10: Automatización con Bash

Ahora puede utilizar todos los bash habilidades que ha aprendido en esta serie Bash Beginner para crear muy útil bash scripts que lo ayudarían a automatizar tareas administrativas repetitivas y aburridas.

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

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

Automatización de la gestión de usuarios con bash texto

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 bash script que lo automatiza.

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

Para exampleaquí creé el archivo servidores.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 de 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 echa un vistazo a lo siguiente agregarusuario.sh bash texto:

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

los agregarusuario.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 el servidores.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:

  • Puedes usar vacío ssh pasar frases o correr agente ssh 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! los agregarusuario.sh script definitivamente puede ahorrarle innumerables horas de trabajo.

Automatización de copias de seguridad con bash texto

Hacer copias de seguridad es algo que todos hacemos regularmente, ¿por qué no automatizarlo? Echa un vistazo a lo siguiente copia de seguridad.sh texto:

                      
                        #!/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 la backup_dirs array, cree un archivo tar comprimido con gzip en /tmp luego usa 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 muestra de ejecución del copia de seguridad.sh texto:

                      
                        [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
                      
                    

Supervisión del 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! Puedes usar 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 echa un vistazo a lo siguiente espacio_disco.sh bash texto:

                      
                        #!/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, creaste un sistemas 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 necesita reemplazar Tu 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 me llego el siguiente correo a mi bandeja de entrada:

Es posible que desee ejecutar el espacio_disco.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 Chapter 10 Practice Questions Problemas y su solución para practicar lo que acabas de aprender en este capítulo Bash-Chapter-10-Practice-Questions-Linux-Handbook.pdf 40 KB

descarga-círculo

Esto nos lleva al final de nuestra bash Serie de tutoriales para principiantes. Espero que hayas disfrutado aprendiendo bash secuencias de comandos 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

Related Posts