Preview:
#!/bin/bash
# reporte_sistema.sh
# Genera un informe detallado de recursos del sistema y lo guarda/appende en un .txt
# Compatible con Linux (Debian, Ubuntu, RHEL, CentOS, Fedora, Arch, etc.)

set -euo pipefail

# Directorio donde está el script y archivo de salida
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
OUTPUT_FILE="$SCRIPT_DIR/system_report.txt"

HOSTNAME=$(hostname)
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")

# Separador y encabezado del equipo
{
  echo "================================================================================"
  echo "🖥️  REPORTE DEL EQUIPO: $HOSTNAME"
  echo "📅 FECHA DE EJECUCIÓN: $TIMESTAMP"
  echo "================================================================================"
  
  # 1. SISTEMA OPERATIVO
  echo -e "\n📦 [ SISTEMA OPERATIVO ]"
  if [ -f /etc/os-release ]; then
    grep -E "^(PRETTY_NAME|VERSION_ID)=" /etc/os-release | sed 's/PRETTY_NAME=/Nombre: /; s/VERSION_ID=/Versión: /'
  else
    uname -s -r -v
  fi
  echo "Kernel: $(uname -r)"
  echo "Arquitectura: $(uname -m)"

  # 2. CPU (Procesador)
  echo -e "\n🧠 [ PROCESADOR (CPU) ]"
  if command -v lscpu &>/dev/null; then
    lscpu | grep -E "^(Model name|Architecture|CPU\(s\)|Thread\(s\) per core|Core\(s\) per socket|Socket\(s\))"
  else
    echo "(lscpu no disponible. Mostrando info básica de /proc/cpuinfo)"
    grep -m 1 "model name" /proc/cpuinfo
    echo "Núcleos lógicos: $(nproc)"
  fi

  # Cálculo de uso de CPU (toma 1 segundo de muestra)
  read -r _ user nice system idle iowait irq softirq steal _ _ < /proc/stat
  total1=$((user + nice + system + idle + iowait + irq + softirq + steal))
  idle1=$idle
  sleep 1
  read -r _ user nice system idle iowait irq softirq steal _ _ < /proc/stat
  total2=$((user + nice + system + idle + iowait + irq + softirq + steal))
  idle2=$idle
  total_diff=$((total2 - total1))
  idle_diff=$((idle2 - idle1))
  [ "$total_diff" -eq 0 ] && total_diff=1
  cpu_usage=$(( (total_diff - idle_diff) * 100 / total_diff ))
  cpu_free=$((100 - cpu_usage))
  echo "📊 Uso CPU (muestra 1s): ~${cpu_usage}% usado | ~${cpu_free}% libre"

  # 3. MEMORIA RAM
  echo -e "\n💾 [ MEMORIA RAM ]"
  if command -v free &>/dev/null; then
    mem_total=$(free -m | awk '/^Mem:/ {print $2}')
    mem_used=$(free -m | awk '/^Mem:/ {print $3}')
    mem_free=$(free -m | awk '/^Mem:/ {print $4}')
    mem_avail=$(free -m | awk '/^Mem:/ {print $7}')
    echo "📈 RAM Total: ${mem_total} MB"
    echo "📉 RAM Usada: ${mem_used} MB"
    echo "📊 RAM Libre: ${mem_free} MB"
    echo "🔄 RAM Disponible: ${mem_avail} MB"
    swap_total=$(free -m | awk '/^Swap:/ {print $2}')
    echo "💿 Swap: ${swap_total} MB"
  else
    echo "(comando 'free' no disponible)"
  fi

  # 4. ALMACENAMIENTO (DISCOS REALES)
  echo -e "\n💿 [ ALMACENAMIENTO (DISCO DURO) ]"
  echo "Particiones físicas (/dev/*):"
  df -h | grep -E '^/dev/' | while read -r fs size used avail use mount; do
    echo "  📁 $mount | Total: $size | Usado: $used | Libre: $avail | Uso: $use"
  done
  # Resumen de la raíz /
  root_info=$(df -h / | awk 'NR==2 {printf "Total: %s | Usado: %s | Libre: %s", $2, $3, $4}')
  echo "  🌐 Resumen raíz (/): $root_info"

  # 5. RED Y HARDWARE ADICIONAL
  echo -e "\n🔌 [ RED Y HARDWARE ]"
  echo "Interfaces de red:"
  if command -v ip &>/dev/null; then
    ip -br addr show | grep -v "lo "
  elif command -v ifconfig &>/dev/null; then
    ifconfig -a | grep -E "^[a-z]" | awk '{print "  - "$1}'
  fi
  echo "Dispositivos PCI principales (máx. 8):"
  lspci 2>/dev/null | head -8 || echo "  (lspci no disponible)"
  echo "Dispositivos USB conectados:"
  lsusb 2>/dev/null | head -5 || echo "  (lsusb no disponible)"

  echo -e "\n================================================================================\n"
} >> "$OUTPUT_FILE"

echo "✅ Informe guardado correctamente en: $OUTPUT_FILE"
echo "📂 Para verlo: cat \"$OUTPUT_FILE\""
echo "⚠️  Nota: El cálculo de CPU tarda ~1 segundo para mayor precisión."
downloadDownload PNG downloadDownload JPEG downloadDownload SVG

Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!

Click to optimize width for Twitter