Skip to content

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

  1. Inicio de sesión

    • Inicia sesión en la máquina servera desde bastion como el usuario student utilizando la llave privada proporcionada:

      ssh student-#-servera
      

Parte 1: Creación y Ejecución de un Script Bash

  1. Cambiar a superusuario

    • Usa el comando sudo -i para obtener privilegios de root:
      sudo -i
      
  2. Crear un script Bash simple

    • Usa vim para crear el archivo firstscript.sh en 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).
  3. Ejecutar el script

    • Usa bash para ejecutar el script:
      bash ~/firstscript.sh
      
  4. 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
      
      #############################################
      
  5. Salir de servera y volver al bastion

    • Salir de la sesión remota:
      exit
      

Parte 2: Uso de Bucles y Condiciones en Scripts Bash

  1. 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
      
  2. 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
      
  3. 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).
  4. 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
      
  5. Otorgar permisos de ejecución al script

    • Usa chmod para hacer el script ejecutable:
      chmod +x ~/bin/printhostname.sh
      
  6. Ejecutar el script desde el directorio de inicio

    • Usa el nombre del script para ejecutarlo:
      printhostname.sh
      
    • Ejemplo de salida:
      student-#-servera
      student-#-serverb
      
  7. Verificar el código de salida del script

    • Usa echo $? para comprobar que el script finalizó correctamente:
      echo $?
      
    • Salida esperada:
      0
      

Parte 3: Manipulación de Texto con Expresiones Regulares en Scripts Bash

  1. Conectarse a la máquina remota

    • Desde bastion, inicia sesión en servera como el usuario student:
      ssh student-#-servera
      
    • Cambia a usuario root para administrar la configuración del sistema:
      sudo -i
      
  2. 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'
      
  3. 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
      
  4. 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
      
  5. 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
      
  6. 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
      
  7. Salir de servera y volver al bastion

    • Salir de la sesión remota:
      exit
      

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.