#!/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."
Preview:
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