En este proyecto, vamos a crear un script en Bash que recopile y muestre información detallada sobre el sistema. Este tipo de script puede ser muy útil para administradores de sistemas y desarrolladores que necesitan obtener rápidamente datos sobre el entorno en el que están trabajando.

Objetivos del Proyecto

  • Recopilar información básica del sistema como el nombre del host, la versión del sistema operativo y el tiempo de actividad.
  • Obtener detalles sobre el hardware, como la CPU y la memoria.
  • Mostrar información sobre el uso del disco y la red.
  • Presentar los datos de manera clara y organizada.

Paso 1: Configuración Inicial del Script

Primero, crearemos un archivo de script y le daremos permisos de ejecución.

# Crear el archivo de script
touch system_info.sh

# Dar permisos de ejecución
chmod +x system_info.sh

Paso 2: Recopilación de Información del Sistema

Información Básica del Sistema

Vamos a empezar por obtener información básica del sistema.

#!/bin/bash

# Nombre del host
HOSTNAME=$(hostname)

# Versión del sistema operativo
OS=$(uname -o)

# Tiempo de actividad
UPTIME=$(uptime -p)

echo "Información Básica del Sistema"
echo "-----------------------------"
echo "Nombre del Host: $HOSTNAME"
echo "Sistema Operativo: $OS"
echo "Tiempo de Actividad: $UPTIME"
echo

Información de la CPU

A continuación, obtendremos detalles sobre la CPU.

# Información de la CPU
CPU=$(lscpu | grep "Model name" | awk -F: '{print $2}')

echo "Información de la CPU"
echo "---------------------"
echo "Modelo de CPU: $CPU"
echo

Información de la Memoria

Ahora, vamos a obtener información sobre la memoria del sistema.

# Información de la Memoria
MEMORY=$(free -h | grep "Mem:" | awk '{print $2 " total, " $3 " used, " $4 " free"}')

echo "Información de la Memoria"
echo "-------------------------"
echo "Memoria: $MEMORY"
echo

Uso del Disco

Para el uso del disco, utilizaremos el comando df.

# Uso del Disco
DISK=$(df -h / | grep "/" | awk '{print $2 " total, " $3 " used, " $4 " free"}')

echo "Uso del Disco"
echo "-------------"
echo "Disco: $DISK"
echo

Información de la Red

Finalmente, obtendremos información sobre la red.

# Información de la Red
IP=$(hostname -I | awk '{print $1}')
INTERFACE=$(ip -o -4 route show to default | awk '{print $5}')

echo "Información de la Red"
echo "---------------------"
echo "Dirección IP: $IP"
echo "Interfaz de Red: $INTERFACE"
echo

Paso 3: Script Completo

Aquí está el script completo que recopila y muestra toda la información mencionada.

#!/bin/bash

# Nombre del host
HOSTNAME=$(hostname)

# Versión del sistema operativo
OS=$(uname -o)

# Tiempo de actividad
UPTIME=$(uptime -p)

# Información de la CPU
CPU=$(lscpu | grep "Model name" | awk -F: '{print $2}')

# Información de la Memoria
MEMORY=$(free -h | grep "Mem:" | awk '{print $2 " total, " $3 " used, " $4 " free"}')

# Uso del Disco
DISK=$(df -h / | grep "/" | awk '{print $2 " total, " $3 " used, " $4 " free"}')

# Información de la Red
IP=$(hostname -I | awk '{print $1}')
INTERFACE=$(ip -o -4 route show to default | awk '{print $5}')

echo "Información Básica del Sistema"
echo "-----------------------------"
echo "Nombre del Host: $HOSTNAME"
echo "Sistema Operativo: $OS"
echo "Tiempo de Actividad: $UPTIME"
echo

echo "Información de la CPU"
echo "---------------------"
echo "Modelo de CPU: $CPU"
echo

echo "Información de la Memoria"
echo "-------------------------"
echo "Memoria: $MEMORY"
echo

echo "Uso del Disco"
echo "-------------"
echo "Disco: $DISK"
echo

echo "Información de la Red"
echo "---------------------"
echo "Dirección IP: $IP"
echo "Interfaz de Red: $INTERFACE"
echo

Ejercicio Práctico

Tarea: Modifica el script para que también muestre la lista de usuarios actualmente conectados al sistema.

Solución:

#!/bin/bash

# Nombre del host
HOSTNAME=$(hostname)

# Versión del sistema operativo
OS=$(uname -o)

# Tiempo de actividad
UPTIME=$(uptime -p)

# Información de la CPU
CPU=$(lscpu | grep "Model name" | awk -F: '{print $2}')

# Información de la Memoria
MEMORY=$(free -h | grep "Mem:" | awk '{print $2 " total, " $3 " used, " $4 " free"}')

# Uso del Disco
DISK=$(df -h / | grep "/" | awk '{print $2 " total, " $3 " used, " $4 " free"}')

# Información de la Red
IP=$(hostname -I | awk '{print $1}')
INTERFACE=$(ip -o -4 route show to default | awk '{print $5}')

# Usuarios conectados
USERS=$(who)

echo "Información Básica del Sistema"
echo "-----------------------------"
echo "Nombre del Host: $HOSTNAME"
echo "Sistema Operativo: $OS"
echo "Tiempo de Actividad: $UPTIME"
echo

echo "Información de la CPU"
echo "---------------------"
echo "Modelo de CPU: $CPU"
echo

echo "Información de la Memoria"
echo "-------------------------"
echo "Memoria: $MEMORY"
echo

echo "Uso del Disco"
echo "-------------"
echo "Disco: $DISK"
echo

echo "Información de la Red"
echo "---------------------"
echo "Dirección IP: $IP"
echo "Interfaz de Red: $INTERFACE"
echo

echo "Usuarios Conectados"
echo "-------------------"
echo "$USERS"
echo

Conclusión

En este proyecto, hemos creado un script en Bash que recopila y muestra información detallada sobre el sistema. Este script puede ser extendido y personalizado según las necesidades específicas del usuario. Asegúrate de probar y modificar el script para adaptarlo a tus propios requisitos y mejorar tus habilidades en Bash.

En el siguiente proyecto, aplicaremos técnicas similares para crear un analizador de archivos de registro. ¡Sigue practicando y mejorando tus habilidades en Bash!

© Copyright 2024. Todos los derechos reservados