# Linux-System-Info

linux-system-info.sh
```bash
#!/bin/bash

# System Information Script
# Outputs system specifications in beautified Markdown format

echo "# 🖥️ System Specifications"
echo ""

# Date
echo "**📅 Date:** $(date)"
echo ""

# OS Information
echo "## 🐧 Operating System"
if [ -f /etc/os-release ]; then
    . /etc/os-release
    echo "- **OS:** $PRETTY_NAME"
else
    echo "- **OS:** Unknown"
fi
echo "- **Kernel:** \`$(uname -r)\`"
echo "- **Hostname:** \`$(hostname)\`"
echo ""

# CPU Information
echo "## 🧠 CPU"
# Try to use lscpu first
if command -v lscpu &> /dev/null; then
    MODEL=$(lscpu | grep "Model name" | cut -d: -f2 | xargs)
    CORES=$(lscpu | grep "^CPU(s):" | cut -d: -f2 | xargs)
    ARCH=$(lscpu | grep "Architecture" | cut -d: -f2 | xargs)
    echo "- **Model:** $MODEL"
    echo "- **Cores:** $CORES"
    echo "- **Architecture:** \`$ARCH\`"
else
    # Fallback to /proc/cpuinfo
    MODEL=$(grep -m1 "model name" /proc/cpuinfo | cut -d: -f2 | xargs)
    CORES=$(grep -c processor /proc/cpuinfo)
    echo "- **Model:** $MODEL"
    echo "- **Cores:** $CORES"
fi
echo ""

# Memory Information
echo "## 💾 Memory"
if command -v free &> /dev/null; then
    TOTAL_MEM=$(free -h | awk '/^Mem:/ {print $2}')
    echo "- **Total RAM:** $TOTAL_MEM"
else
    # Fallback to /proc/meminfo
    TOTAL_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}')
    TOTAL_GB=$(echo "scale=2; $TOTAL_KB / 1024 / 1024" | bc 2>/dev/null || echo "$TOTAL_KB kB")
    echo "- **Total RAM:** ${TOTAL_GB} GB"
fi
echo ""

# Motherboard Information (Requires root for dmidecode, trying sysfs)
echo "## 🔢 Motherboard"
if [ -r /sys/class/dmi/id/board_vendor ] && [ -r /sys/class/dmi/id/board_name ]; then
    VENDOR=$(cat /sys/class/dmi/id/board_vendor)
    NAME=$(cat /sys/class/dmi/id/board_name)
    VERSION=$(cat /sys/class/dmi/id/board_version 2>/dev/null || echo "")
    echo "- **Vendor:** $VENDOR"
    echo "- **Model:** $NAME"
    if [ -n "$VERSION" ]; then
        echo "- **Version:** $VERSION"
    fi
else
    echo "*Access to motherboard DMI info restricted or unavailable.*"
fi
echo ""

# GPU Information
echo "## 🎮 Graphics"
if command -v lspci &> /dev/null; then
    # Filter for VGA compatible controller or 3D controller
    lspci | grep -E "VGA|3D" | while read -r line; do
        # Extract the device name part (everything after the ID and type)
        DEVICE=$(echo "$line" | cut -d: -f3- | xargs)
        echo "- $DEVICE"
    done
else
    echo "*lspci command not found, cannot list GPUs.*"
fi
echo ""

# Disk Information
echo "## 💽 Storage"
if command -v lsblk &> /dev/null; then
    echo "| Name | Size | Type | Model |"
    echo "| :--- | :--- | :--- | :--- |"
    # List disks only, no partitions/loops/roms generally desirable for "specs" but lsblk -d does that
    lsblk -d -o NAME,SIZE,TYPE,MODEL -n | while read -r line; do
        # Format as table row
        NAME=$(echo "$line" | awk '{print $1}')
        SIZE=$(echo "$line" | awk '{print $2}')
        TYPE=$(echo "$line" | awk '{print $3}')
        MODEL=$(echo "$line" | cut -d' ' -f4-)
        echo "| \`$NAME\` | $SIZE | $TYPE | $MODEL |"
    done
else
    echo "*lsblk command not found.*"
fi
echo ""

echo "---"
echo "*Generated by linux-system-info.sh*"
```
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9