Laboratorio Bash Scripting
Objetivos
- Configurar perfiles de ajuste con tuned para mejorar el rendimiento del sistema.
- Identificar y comparar diferentes perfiles de optimización según la carga de trabajo.
- Ajustar la prioridad de procesos con nice y renice para optimizar el uso de CPU.
- Evaluar el impacto de las modificaciones de prioridad en la ejecución de tareas.
- Aplicar técnicas de monitoreo de rendimiento para tomar decisiones de ajuste eficientes.
Entorno Inicial
- Usuario: student
- Máquina: servera
- Contraseña inicial: student
- Herramientas utilizadas: Shell Bash y utilidades básicas de Linux.
Pasos del Laboratorio
Prerequisitos
-
Inicio de sesión
-
Inicia sesión en la máquina
serveradesdebastioncomo el usuariostudentutilizando la llave privada proporcionada:ssh student-#-servera
-
Parte 1: Creación y Ejecución de un Script Bash
-
Cambiar a superusuario
- Usa el comando sudo -i para obtener privilegios de root:
sudo -i
- Usa el comando sudo -i para obtener privilegios de root:
-
Crear un script Bash simple
- Usa vim para crear el archivo
firstscript.shen el directorio de inicio:vim ~/firstscript.sh - Agrega el siguiente contenido:
#!/usr/bin/bash echo "Este es mi primer script Bash" > ~/output.txt echo "" >> ~/output.txt echo "#############################################" >> ~/output.txt - Guarda los cambios (:wq).
- Usa vim para crear el archivo
-
Ejecutar el script
- Usa bash para ejecutar el script:
bash ~/firstscript.sh
- Usa bash para ejecutar el script:
-
Verificar la salida del script
- Usa cat para revisar el contenido del archivo de salida:
cat ~/output.txt - Ejemplo de salida:
Este es mi primer script Bash #############################################
- Usa cat para revisar el contenido del archivo de salida:
-
Salir de
serveray volver albastion- Salir de la sesión remota:
exit
- Salir de la sesión remota:
Parte 2: Uso de Bucles y Condiciones en Scripts Bash
-
Desde el
bastion, ejecutar comandos en múltiples servidores manualmente- Usa ssh para conectarte a servera y obtener su nombre de host:
ssh student-#-servera hostname - Ejemplo de salida:
student-#-servera - Repite el proceso para serverb:
ssh student-#-serverb hostname - Ejemplo de salida:
student-#-serverb
- Usa ssh para conectarte a servera y obtener su nombre de host:
-
Automatizar la ejecución con un bucle for
- Usa un bucle for para ejecutar el comando hostname en ambos servidores:
for HOST in student-#-servera student-#-serverb; do ssh student@${HOST} hostname done - Ejemplo de salida:
student-#-servera student-#-serverb
- Usa un bucle for para ejecutar el comando hostname en ambos servidores:
-
Crear un script Bash para ejecutar el bucle
- Crea el directorio ~/bin si no existe:
mkdir -p ~/bin - Usa vim para crear el script printhostname.sh:
vim ~/bin/printhostname.sh - Agrega el siguiente contenido:
#!/usr/bin/bash # Ejecutar bucle para imprimir nombres de host for HOST in student-#-servera student-#-serverb; do ssh student@${HOST} hostname done exit 0 - Guarda los cambios (:wq).
- Crea el directorio ~/bin si no existe:
-
Verificar que el directorio bin está en la variable PATH
- Usa echo $PATH para comprobar que /home/student/bin está incluido:
echo $PATH - Ejemplo de salida:
/home/student/.local/bin:/home/student/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
- Usa echo $PATH para comprobar que /home/student/bin está incluido:
-
Otorgar permisos de ejecución al script
- Usa chmod para hacer el script ejecutable:
chmod +x ~/bin/printhostname.sh
- Usa chmod para hacer el script ejecutable:
-
Ejecutar el script desde el directorio de inicio
- Usa el nombre del script para ejecutarlo:
printhostname.sh - Ejemplo de salida:
student-#-servera student-#-serverb
- Usa el nombre del script para ejecutarlo:
-
Verificar el código de salida del script
- Usa echo $? para comprobar que el script finalizó correctamente:
echo $? - Salida esperada:
0
- Usa echo $? para comprobar que el script finalizó correctamente:
Parte 3: Manipulación de Texto con Expresiones Regulares en Scripts Bash
-
Conectarse a la máquina remota
- Desde
bastion, inicia sesión enserveracomo el usuariostudent:ssh student-#-servera - Cambia a usuario root para administrar la configuración del sistema:
sudo -i
- Desde
-
Buscar información en archivos de configuración con grep
- Usa grep para encontrar el GID y UID de los grupos postfix y postdrop:
rpm -q --scripts postfix | grep -e 'user' -e 'group' - Ejemplo de salida:
getent group 'postfix' >/dev/null || groupadd -f -g '89' -r 'postfix' useradd -r -u '89' -g 'postfix' -d '/var/spool/postfix' -s '/sbin/nologin' -c '' 'postfix' getent group 'postdrop' >/dev/null || groupadd -f -g '90' -r 'postdrop'
- Usa grep para encontrar el GID y UID de los grupos postfix y postdrop:
-
Filtrar registros del sistema con grep y head
- Usa grep para mostrar los primeros dos mensajes en /var/log/maillog:
grep 'postfix' /var/log/maillog | head -n 2 - Ejemplo de salida:
Apr 1 15:27:16 servera postfix/postfix-script[3121]: starting the Postfix mail system Apr 1 15:27:16 servera postfix/master[3123]: daemon started -- version 3.5.9, configuration /etc/postfix
- Usa grep para mostrar los primeros dos mensajes en /var/log/maillog:
-
Buscar información en archivos de configuración con grep -i
- Usa grep -i para encontrar el directorio de colas de Postfix:
grep -i 'queue' /etc/postfix/main.cf - Ejemplo de salida:
queue_directory = /var/spool/postfix The mail_owner parameter specifies the owner of the Postfix queue
- Usa grep -i para encontrar el directorio de colas de Postfix:
-
Verificar la ejecución de servicios con ps aux y grep
- Usa ps aux | grep postfix para confirmar que Postfix está en ejecución:
ps aux | grep postfix - Ejemplo de salida:
root 3123 0.0 0.2 38172 4384 ? Ss 15:27 0:00 /usr/libexec/postfix/master -w postfix 3124 0.0 0.4 45208 8236 ? S 15:27 0:00 pickup -l -t unix -u postfix 3125 0.0 0.4 45252 8400 ? S 15:27 0:00 qmgr -l -t unix -u
- Usa ps aux | grep postfix para confirmar que Postfix está en ejecución:
-
Filtrar múltiples patrones con grep -e
- Usa grep -e para confirmar que las colas qmgr, cleanup y pickup están configuradas correctamente:
grep -e qmgr -e pickup -e cleanup /etc/postfix/master.cf - Ejemplo de salida:
pickup unix n - n 60 1 pickup cleanup unix n - n - 0 cleanup qmgr unix n - n 300 1 qmgr
- Usa grep -e para confirmar que las colas qmgr, cleanup y pickup están configuradas correctamente:
-
Salir de
serveray volver albastion- Salir de la sesión remota:
exit
- Salir de la sesión remota:
Resultados Esperados
- Los participantes podrán seleccionar y activar perfiles tuned adecuados para su entorno.
- Se comprenderá cómo la prioridad de procesos influye en la asignación de recursos de CPU.
- Se ajustarán valores nice de procesos para mejorar la ejecución de tareas críticas.
- Se analizarán métricas de rendimiento para evaluar la efectividad de los ajustes aplicados.
- Se optimizará la configuración del sistema para lograr un equilibrio entre rendimiento y estabilidad.