Skip to main content

LXC Inventory Script

I use the following script in the PVE shell to get a quick inventory of whats what in my containers.ย 

Change the permissions to run it, I put it in the ~ directory:

chmod +x ~/what.sh

Here's the script:

#!/bin/bash

echo "๐Ÿงพ Proxmox LXC Container Deep Audit"
echo "===================================="

for CTID in $(pct list | awk 'NR>1 {print $1}'); do
    echo -e "\n๐Ÿ“ฆ Container ID: $CTID"
    echo "---------------------------"

    OS_NAME=$(pct exec $CTID -- grep '^PRETTY_NAME=' /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"')
    echo "๐Ÿงฌ OS: $OS_NAME"

    IP_ADDR=$(pct exec $CTID -- hostname -I 2>/dev/null)
    echo "๐ŸŒ IP Address: $IP_ADDR"

    echo -n "๐ŸŒ Web Server: "
    if pct exec $CTID -- which nginx > /dev/null 2>&1; then
        NGINX_VER=$(pct exec $CTID -- nginx -v 2>&1 | cut -d/ -f2)
        echo "Nginx $NGINX_VER"
    elif pct exec $CTID -- which apache2 > /dev/null 2>&1; then
        APACHE_VER=$(pct exec $CTID -- apache2 -v | grep "Server version" | awk '{print $3}' | cut -d/ -f2)
        echo "Apache $APACHE_VER"
    else
        echo "Not installed"
    fi

    echo -n "๐Ÿ˜ PHP: "
    if pct exec $CTID -- which php > /dev/null 2>&1; then
        PHP_VER=$(pct exec $CTID -- php -v | head -n 1 | awk '{print $2}')
        echo "$PHP_VER"
    else
        echo "Not installed"
    fi

    echo -n "๐Ÿฌ MariaDB/MySQL: "
    if pct exec $CTID -- which mariadb > /dev/null 2>&1 || pct exec $CTID -- which mysql > /dev/null 2>&1; then
        MARIA_VER=$(pct exec $CTID -- mariadb --version 2>/dev/null | awk '{print $5}')
        MYSQL_VER=$(pct exec $CTID -- mysql --version 2>/dev/null | awk '{print $5}')
        echo "${MARIA_VER:-$MYSQL_VER}"
    else
        echo "Not installed"
    fi

    echo -n "๐Ÿ˜ PostgreSQL: "
    if pct exec $CTID -- which psql > /dev/null 2>&1; then
        POSTGRES_VER=$(pct exec $CTID -- psql --version | awk '{print $3}')
        echo "$POSTGRES_VER"
    else
        echo "Not installed"
    fi

    echo -n "๐Ÿ“ฆ Redis: "
    if pct exec $CTID -- which redis-server > /dev/null 2>&1; then
        REDIS_VER=$(pct exec $CTID -- redis-server --version | awk '{print $3}' | cut -d= -f2)
        echo "$REDIS_VER"
    else
        echo "Not installed"
    fi

    echo -n "๐ŸŸข Node.js: "
    if pct exec $CTID -- which node > /dev/null 2>&1; then
        NODE_VER=$(pct exec $CTID -- node -v)
        echo "$NODE_VER"
    else
        echo "Not installed"
    fi

    echo -n "๐Ÿ Python: "
    if pct exec $CTID -- which python3 > /dev/null 2>&1; then
        PY3_VER=$(pct exec $CTID -- python3 --version 2>&1)
        echo "$PY3_VER"
    elif pct exec $CTID -- which python > /dev/null 2>&1; then
        PY_VER=$(pct exec $CTID -- python --version 2>&1)
        echo "$PY_VER"
    else
        echo "Not installed"
    fi

    echo -n "โ˜• Java: "
    if pct exec $CTID -- which java > /dev/null 2>&1; then
        JAVA_VER=$(pct exec $CTID -- java -version 2>&1 | head -n 1 | awk -F '"' '{print $2}')
        echo "$JAVA_VER"
    else
        echo "Not installed"
    fi

    echo -n "๐Ÿ”’ Fail2ban: "
    pct exec $CTID -- which fail2ban-server > /dev/null 2>&1 && echo "Installed" || echo "Not installed"

    echo -n "๐Ÿ”ฅ UFW (Firewall): "
    pct exec $CTID -- which ufw > /dev/null 2>&1 && echo "Installed" || echo "Not installed"

    echo -n "๐Ÿ”‘ SSH Service: "
    if pct exec $CTID -- systemctl is-active ssh >/dev/null 2>&1; then
        echo "Running"
    else
        echo "Not running"
    fi

    echo -n "๐Ÿงฐ ZFS Tools: "
    pct exec $CTID -- which zpool > /dev/null 2>&1 && echo "Installed" || echo "Not installed"

done

ย