#!/usr/bin/env bash set -euo pipefail echo "hostname: $(hostname)" echo "uptime: $(uptime -p)" echo "os: $(lsb_release -ds)" echo "kernel: $(uname -r)" echo "architecture: $(uname -m)" # CPU Info echo "cpu:" echo " model: $(lscpu | awk -F: '/Model name/ {print $2}' | xargs)" echo " cores: $(nproc)" echo " threads: $(lscpu | awk -F: '/^CPU\(s\)/ {print $2}' | xargs)" # Frequency fallback: lscpu -> /proc/cpuinfo freq=$(lscpu | awk -F: '/^CPU MHz/ { gsub(/^[ \t]+/, "", $2); printf "%.2f", $2 / 1000 }' 2>/dev/null) if [[ -z "$freq" ]]; then freq=$(awk -F: '/cpu MHz/ {print $2; exit}' /proc/cpuinfo | awk '{printf "%.2f", $1 / 1000}') fi echo " frequency_ghz: ${freq:-unknown}" # Memory Info mem_total=$(free -g | awk '/^Mem:/ {print $2}') mem_free=$(free -g | awk '/^Mem:/ {print $4}') if [[ "$mem_total" == "0" ]]; then mem_total=$(free -m | awk '/^Mem:/ {printf "%.1f", $2 / 1024}') mem_free=$(free -m | awk '/^Mem:/ {printf "%.1f", $4 / 1024}') fi echo "memory_gb:" echo " total: $mem_total" echo " free: $mem_free" # Disk Devices (excluding loop and ram) echo "disks:" lsblk -dno NAME,SIZE,MODEL | grep -Ev '^loop|^ram' | while read -r name size model; do echo " - device: /dev/$name" echo " size: \"$size\"" echo " model: \"${model:-unknown}\"" done # Disk usage (real mount size, partition-aware) echo "disk_usage:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT -nr | grep -vE '^loop|^ram' | while read -r name size fstype mount; do if [ -n "$mount" ]; then echo " - mount: \"$mount\"" echo " device: \"/dev/$name\"" echo " size: \"$size\"" echo " fstype: \"$fstype\"" fi done # Network Interfaces echo "network_interfaces:" ip -o -4 addr show | awk '!/ lo / {print " - iface: \"" $2 "\"\n ip: \"" $4 "\"" }' # Machine ID echo "machine_id: $(cat /etc/machine-id)"