#!/bin/sh # portfind -- find what is using a port, or find a free port # Usage: portfind -- show what's on this port # portfind --free -- find a random free port # portfind --free 8000 -- find free port starting from 8000 # Update: need to expand to include a port mapping of --free jumps to first before suggesting random free port. if [ "$1" = "--free" ]; then start="${2:-3000}" port="$start" while ss -tlnp "sport = :$port" 2>/dev/null | grep -q LISTEN; do port=$((port + 1)) done echo "$port" else port="$1" [ -z "$port" ] && { echo "Usage: portfind | portfind --free [start]"; exit 1; } echo "=== TCP ===" ss -tlnp "sport = :$port" 2>/dev/null echo "=== UDP ===" ss -ulnp "sport = :$port" 2>/dev/null fi