Blame
|
1 | # Linux-System-Info |
||||||
| 2 | ||||||||
| 3 | linux-system-info.sh |
|||||||
| 4 | ```bash |
|||||||
| 5 | #!/bin/bash |
|||||||
| 6 | ||||||||
| 7 | # System Information Script |
|||||||
| 8 | # Outputs system specifications in beautified Markdown format |
|||||||
| 9 | ||||||||
| 10 | echo "# 🖥️ System Specifications" |
|||||||
| 11 | echo "" |
|||||||
| 12 | ||||||||
| 13 | # Date |
|||||||
| 14 | echo "**📅 Date:** $(date)" |
|||||||
| 15 | echo "" |
|||||||
| 16 | ||||||||
| 17 | # OS Information |
|||||||
| 18 | echo "## 🐧 Operating System" |
|||||||
| 19 | if [ -f /etc/os-release ]; then |
|||||||
| 20 | . /etc/os-release |
|||||||
| 21 | echo "- **OS:** $PRETTY_NAME" |
|||||||
| 22 | else |
|||||||
| 23 | echo "- **OS:** Unknown" |
|||||||
| 24 | fi |
|||||||
| 25 | echo "- **Kernel:** \`$(uname -r)\`" |
|||||||
| 26 | echo "- **Hostname:** \`$(hostname)\`" |
|||||||
| 27 | echo "" |
|||||||
| 28 | ||||||||
| 29 | # CPU Information |
|||||||
| 30 | echo "## 🧠 CPU" |
|||||||
| 31 | # Try to use lscpu first |
|||||||
| 32 | if command -v lscpu &> /dev/null; then |
|||||||
| 33 | MODEL=$(lscpu | grep "Model name" | cut -d: -f2 | xargs) |
|||||||
| 34 | CORES=$(lscpu | grep "^CPU(s):" | cut -d: -f2 | xargs) |
|||||||
| 35 | ARCH=$(lscpu | grep "Architecture" | cut -d: -f2 | xargs) |
|||||||
| 36 | echo "- **Model:** $MODEL" |
|||||||
| 37 | echo "- **Cores:** $CORES" |
|||||||
| 38 | echo "- **Architecture:** \`$ARCH\`" |
|||||||
| 39 | else |
|||||||
| 40 | # Fallback to /proc/cpuinfo |
|||||||
| 41 | MODEL=$(grep -m1 "model name" /proc/cpuinfo | cut -d: -f2 | xargs) |
|||||||
| 42 | CORES=$(grep -c processor /proc/cpuinfo) |
|||||||
| 43 | echo "- **Model:** $MODEL" |
|||||||
| 44 | echo "- **Cores:** $CORES" |
|||||||
| 45 | fi |
|||||||
| 46 | echo "" |
|||||||
| 47 | ||||||||
| 48 | # Memory Information |
|||||||
| 49 | echo "## 💾 Memory" |
|||||||
| 50 | if command -v free &> /dev/null; then |
|||||||
| 51 | TOTAL_MEM=$(free -h | awk '/^Mem:/ {print $2}') |
|||||||
| 52 | echo "- **Total RAM:** $TOTAL_MEM" |
|||||||
| 53 | else |
|||||||
| 54 | # Fallback to /proc/meminfo |
|||||||
| 55 | TOTAL_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}') |
|||||||
| 56 | TOTAL_GB=$(echo "scale=2; $TOTAL_KB / 1024 / 1024" | bc 2>/dev/null || echo "$TOTAL_KB kB") |
|||||||
| 57 | echo "- **Total RAM:** ${TOTAL_GB} GB" |
|||||||
| 58 | fi |
|||||||
| 59 | echo "" |
|||||||
| 60 | ||||||||
| 61 | # Motherboard Information (Requires root for dmidecode, trying sysfs) |
|||||||
| 62 | echo "## 🔢 Motherboard" |
|||||||
| 63 | if [ -r /sys/class/dmi/id/board_vendor ] && [ -r /sys/class/dmi/id/board_name ]; then |
|||||||
| 64 | VENDOR=$(cat /sys/class/dmi/id/board_vendor) |
|||||||
| 65 | NAME=$(cat /sys/class/dmi/id/board_name) |
|||||||
| 66 | VERSION=$(cat /sys/class/dmi/id/board_version 2>/dev/null || echo "") |
|||||||
| 67 | echo "- **Vendor:** $VENDOR" |
|||||||
| 68 | echo "- **Model:** $NAME" |
|||||||
| 69 | if [ -n "$VERSION" ]; then |
|||||||
| 70 | echo "- **Version:** $VERSION" |
|||||||
| 71 | fi |
|||||||
| 72 | else |
|||||||
| 73 | echo "*Access to motherboard DMI info restricted or unavailable.*" |
|||||||
| 74 | fi |
|||||||
| 75 | echo "" |
|||||||
| 76 | ||||||||
| 77 | # GPU Information |
|||||||
| 78 | echo "## 🎮 Graphics" |
|||||||
| 79 | if command -v lspci &> /dev/null; then |
|||||||
| 80 | # Filter for VGA compatible controller or 3D controller |
|||||||
| 81 | lspci | grep -E "VGA|3D" | while read -r line; do |
|||||||
| 82 | # Extract the device name part (everything after the ID and type) |
|||||||
| 83 | DEVICE=$(echo "$line" | cut -d: -f3- | xargs) |
|||||||
| 84 | echo "- $DEVICE" |
|||||||
| 85 | done |
|||||||
| 86 | else |
|||||||
| 87 | echo "*lspci command not found, cannot list GPUs.*" |
|||||||
| 88 | fi |
|||||||
| 89 | echo "" |
|||||||
| 90 | ||||||||
| 91 | # Disk Information |
|||||||
| 92 | echo "## 💽 Storage" |
|||||||
| 93 | if command -v lsblk &> /dev/null; then |
|||||||
| 94 | echo "| Name | Size | Type | Model |" |
|||||||
| 95 | echo "| :--- | :--- | :--- | :--- |" |
|||||||
| 96 | # List disks only, no partitions/loops/roms generally desirable for "specs" but lsblk -d does that |
|||||||
| 97 | lsblk -d -o NAME,SIZE,TYPE,MODEL -n | while read -r line; do |
|||||||
| 98 | # Format as table row |
|||||||
| 99 | NAME=$(echo "$line" | awk '{print $1}') |
|||||||
| 100 | SIZE=$(echo "$line" | awk '{print $2}') |
|||||||
| 101 | TYPE=$(echo "$line" | awk '{print $3}') |
|||||||
| 102 | MODEL=$(echo "$line" | cut -d' ' -f4-) |
|||||||
| 103 | echo "| \`$NAME\` | $SIZE | $TYPE | $MODEL |" |
|||||||
| 104 | done |
|||||||
| 105 | else |
|||||||
| 106 | echo "*lsblk command not found.*" |
|||||||
| 107 | fi |
|||||||
| 108 | echo "" |
|||||||
| 109 | ||||||||
| 110 | echo "---" |
|||||||
| 111 | echo "*Generated by linux-system-info.sh*" |
|||||||
| 112 | ``` |
|||||||
