From dc44eb6d62693a765733fc73b83d27cf7fa967a6 Mon Sep 17 00:00:00 2001 From: GarandPLG Date: Thu, 11 Jun 2026 15:22:01 +0200 Subject: [PATCH] Add free-ports script, Docker aliases, and Bun env MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add free-ports.sh script and a corresponding alias in .bash_aliases. Introduce docker-clean and docker-update aliases for Docker maintenance. Export BUN_INSTALL and prepend its bin directory to PATH in .profile. --- .bash_aliases | 5 +++- .profile | 4 +++ free-ports.sh | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 1 deletion(-) create mode 100755 free-ports.sh diff --git a/.bash_aliases b/.bash_aliases index 67c3ba7..4b14550 100644 --- a/.bash_aliases +++ b/.bash_aliases @@ -20,6 +20,7 @@ alias list="sudo nala list --upgradable" alias sp="source ~/.profile" alias snala="sudo nala" alias btrfscheck="sudo btrfs filesystem usage / && echo && df -h /" +alias free-ports="/usr/local/bin/free-port/free-ports.sh" # sudo ln -s /home/garand_plg/dotfiles/free-ports.sh /usr/local/bin/free-port # Navigation aliases alias ~='cd ~' @@ -96,13 +97,15 @@ alias logs="sudo find /var/log -type f -exec file {} \; | grep 'text' | cut -d' alias kssh="kitty +kitten ssh" - +# Docker commands alias docker-clean=' \ docker container prune -f ; \ docker image prune -f ; \ docker network prune -f ; \ docker volume prune -f ' +alias docker-update="docker images --format "{{.Repository}}:{{.Tag}}" | grep -v '' | xargs -L1 docker pull" + # Remove a directory and all files alias rmd='/bin/rm --recursive --force --verbose ' diff --git a/.profile b/.profile index 8d399b0..ca61b57 100644 --- a/.profile +++ b/.profile @@ -39,4 +39,8 @@ if [ -n "$BASH_VERSION" ] && [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi +# bun +export BUN_INSTALL="$HOME/.bun" +export PATH="$BUN_INSTALL/bin:$PATH" + export PATH diff --git a/free-ports.sh b/free-ports.sh new file mode 100755 index 0000000..517f058 --- /dev/null +++ b/free-ports.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +usage() { + echo "Użycie: $0 [OPCJE] [MIN_PORT] [MAX_PORT]" + echo "" + echo "Opcje:" + echo " -n Wypisz też 4 sąsiednie porty (±1, ±2) z ich statusem" + echo " -h Pokaż tę pomoc" + echo "" + echo "Przykłady:" + echo " $0 # zakres 1024–65535" + echo " $0 3000 9000 # własny zakres" + echo " $0 -n # z sąsiadami" + echo " $0 -n 3000 9000 # z sąsiadami i własnym zakresem" + exit 0 +} + +SHOW_NEIGHBORS=false +while getopts ":nh" opt; do + case $opt in + n) SHOW_NEIGHBORS=true ;; + h) usage ;; + \?) echo "❌ Nieznana opcja: -$OPTARG" >&2; exit 1 ;; + esac +done +shift $(( OPTIND - 1 )) + +MIN_PORT=${1:-1024} +MAX_PORT=${2:-65535} + +echo "🔍 Szukam zajętych portów w zakresie $MIN_PORT–$MAX_PORT..." + +USED_PORTS=$(ss -tuln 2>/dev/null \ + | awk 'NR>1 {print $5}' \ + | grep -oE '[0-9]+$' \ + | sort -un) + +USED_COUNT=$(echo "$USED_PORTS" | grep -c '^[0-9]') +echo "📋 Znaleziono $USED_COUNT zajętych portów." + +is_used() { + echo "$USED_PORTS" | grep -qx "$1" +} + +MAX_ATTEMPTS=1000 +ATTEMPT=0 + +while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do + PORT=$(( RANDOM % (MAX_PORT - MIN_PORT + 1) + MIN_PORT )) + + if ! is_used "$PORT"; then + echo "" + echo "✅ Wolny port: $PORT" + + if $SHOW_NEIGHBORS; then + echo "" + echo "📊 Sąsiednie porty:" + for OFFSET in -2 -1 1 2; do + NEIGHBOR=$(( PORT + OFFSET )) + if [ $NEIGHBOR -lt 1 ] || [ $NEIGHBOR -gt 65535 ]; then + printf " port %-6s — poza zakresem\n" "$NEIGHBOR" + elif is_used "$NEIGHBOR"; then + printf " port %-6s 🔴 zajęty\n" "$NEIGHBOR" + else + printf " port %-6s 🟢 wolny\n" "$NEIGHBOR" + fi + done + fi + + echo "" + exit 0 + fi + + ATTEMPT=$(( ATTEMPT + 1 )) +done + +echo "❌ Nie udało się znaleźć wolnego portu po $MAX_ATTEMPTS próbach." +exit 1