#!/usr/bin/env bash
# 端口占用速查
#
# 只读脚本，不需要 root。列出正在监听的端口与对应进程；
# 给了端口号就只看那一个。
# 用法：bash port-usage.sh [端口]      例：bash port-usage.sh 443

set -u

PORT="$1"

echo '====== 端口占用 ======'

if ! command -v ss >/dev/null 2>&1 && ! command -v netstat >/dev/null 2>&1; then
    echo '[!] 既没有 ss 也没有 netstat，装一个 iproute2 或 net-tools'
    exit 1
fi

# 只列 LISTEN 的 TCP/UDP，带进程名（要 root 才看得到别人的进程）
if command -v ss >/dev/null 2>&1; then
    LIST=$(ss -tulpn 2>/dev/null || true)
else
    LIST=$(netstat -tulpn 2>/dev/null || true)
fi

if [ -z "$PORT" ]; then
    printf '%s\n' "$LIST"
    exit 0
fi

case "$PORT" in
    ''|*[!0-9]*) echo "[!] 端口要是数字，收到：$PORT"; exit 1 ;;
esac

HIT=$(printf '%s\n' "$LIST" | grep -E "[:.]$PORT[[:space:]]" || true)

if [ -z "$HIT" ]; then
    echo "  (没有进程在监听 $PORT)"
else
    printf '%s\n' "$HIT"
fi
