CLI — типовые сценарии (порты, процессы, dev-сервер)

Галерея готовых команд под повседневную разработку и администрирование на своём ПК: не «выучить терминал целиком», а найти сценарий → скопировать → подставить свои числа (порт, PID, путь).

Сюда же попадают цепочки, которые часто запускают ИИ-агенты (Cursor, Copilot CLI и др.): диагностика порта, поиск процесса по командной строке, очистка кэша, проверка localhost.

Теория: Windows, Linux, знаки | и >. Соседние рецепты: Bash 1151, Git 1123, curl 1133.

Перед taskkill, docker rm и rm -rf

Сначала смотрите PID и CommandLine / имя контейнера. Не завершайте службы Windows, чужие БД и системный Docker без понимания. Команды «из чата» — Опасные скрипты.


Условные имена в примерах

Во всех блоках ниже — выдуманные пути и проекты. Подставляйте свои каталоги и порты.

Плейсхолдер Пример значения Замените на
PROJECT moonlit-api имя папки репозитория
WIN_ROOT C:\Users\zephyr\Projects\moonlit-api ваш путь в Windows
WSL_ROOT /home/zephyr/src/moonlit-api путь в WSL
MAC_ROOT /Users/zephyr/dev/purple-llama путь на macOS
PORT_WEB 3000 порт фронта / SSR
PORT_VITE 5173 Vite по умолчанию
PORT_API 8080 Spring, Go, PHP built-in
PID_X 32088 число из netstat / ss

Навигация по сценарию

Порты и сеть

Ситуация Раздел
Кто слушает порт (Windows) Windows — порты
Все LISTENING порты Сводка портов
Linux / macOS / WSL Unix — порты
Docker занял 3000 / 5432 Docker — порты
WSL2 vs Windows — «два localhost» WSL и сеть
Проверить HTTP / health Health-check
DNS, hosts, «сайт не открывается» DNS и hosts
Прокси ломает npm / curl Прокси
SSH-туннель к БД на сервере SSH

Процессы

Ситуация Раздел
Что за PID Windows — PID
Убить зависший dev-сервер Windows — kill
Найти node / python / java по проекту Dev-процессы
«Убить всё node» безопаснее Массовое завершение
Linux top / htop Мониторинг
Файл занят на Windows Блокировка файла

Стеки разработки

Ситуация Раздел
npm / pnpm / yarn Node и пакетники
Vite, Next, Webpack dev Фронт dev-серверы
Python venv, uvicorn, Django Python
Java Spring, Gradle bootRun Java
.NET dotnet run NET
Go, PHP, Ruby Другие рантаймы
EADDRINUSE — алгоритм Dev-сервер — порядок

Инфра на машине

Ситуация Раздел
PostgreSQL / MySQL / Redis / Mongo Локальные БД
Git «застрял» Git из CLI
Место на диске Диск и кэши
PATH — команда не найдена PATH
Службы Windows Службы
systemd на Linux systemd
Хвост логов Логи tail

Справка

Ситуация Раздел
Таблица «ошибка → что делать» Типовые ошибки
Чек-лист перед taskkill Чек-лист
Частые вопросы FAQ

Подставьте свой порт, PID и путь вместо плейсхолдеров из таблицы выше.


Windows — кто слушает порт

CMD — netstat + findstr

netstat -ano | findstr ":3000"
netstat -ano | findstr "LISTENING" | findstr ":3000 :5173 :8080"
netstat -ano | findstr "3000 3456 LISTENING"
Флаг Смысл
-a Все соединения и порты
-n Числовые адреса (удобнее читать)
-o Колонка PID
findstr Фильтр строк (аналог grep)

В состоянии LISTENING последнее число в строке — PID для tasklist / taskkill.

PowerShell — Get-NetTCPConnection

Get-NetTCPConnection -LocalPort 3000 -State Listen |
  Select-Object LocalAddress, LocalPort, OwningProcess, State

Get-NetTCPConnection -State Listen |
  Where-Object { $_.LocalPort -in 3000, 3456, 5173, 8080, 5432 } |
  Sort-Object LocalPort |
  Format-Table -AutoSize

Связать порт → имя процесса одной строкой:

Get-NetTCPConnection -LocalPort 3000 -State Listen -ErrorAction SilentlyContinue |
  ForEach-Object {
    $p = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
    [PSCustomObject]@{
      Port = $_.LocalPort
      PID  = $_.OwningProcess
      Name = $p.ProcessName
    }
  }

Windows — все слушающие порты

netstat -ano | findstr LISTENING
Get-NetTCPConnection -State Listen |
  Sort-Object LocalPort |
  Select-Object LocalAddress, LocalPort, OwningProcess |
  Format-Table -AutoSize

Узкие диапазоны dev-портов (часто встречаются в учебных проектах):

Порт Типичный сервис
3000 React/Next/многие npm run dev
3456 альтернативный порт в скриптах / прокси
4200 Angular ng serve
4321 Astro dev
5000 Flask, некоторые .NET
5173 Vite
5432 PostgreSQL
6379 Redis
8000 Django runserver, uvicorn
8080 Tomcat, Spring, PHP built-in
9090 Prometheus
27017 MongoDB

Windows — что за процесс с PID

tasklist /FI "PID eq 32088"
tasklist /FI "PID eq 32088" /V
Get-Process -Id 32088 | Select-Object Id, ProcessName, Path

Get-CimInstance Win32_Process -Filter "ProcessId=32088" |
  Select-Object ProcessId, Name, ExecutablePath, CommandLine |
  Format-List

CommandLine — главное поле: видно node, npm, python -m uvicorn, путь к WIN_ROOT.

Родитель процесса (кто породил node):

$p = Get-CimInstance Win32_Process -Filter "ProcessId=32088"
Get-CimInstance Win32_Process -Filter "ProcessId=$($p.ParentProcessId)" |
  Select-Object ProcessId, Name, CommandLine

Windows — остановить процесс

Сначала: в терминале, где запускали сервер, Ctrl+C и дождаться приглашения PS C:\...>.

Если окно закрыли, зависло или порт не освободился:

taskkill /PID 32088 /T /F
taskkill /IM node.exe /F
Вариант Когда использовать
/PID 32088 /T /F Знаете точный PID из netstat
/IM node.exe /F Осторожно: все процессы с таким именем
без /F Мягкая попытка (иногда достаточно)
Stop-Process -Id 32088 -Force

Get-CimInstance Win32_Process -Filter "ParentProcessId=32088" |
  ForEach-Object { Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue }
Stop-Process -Id 32088 -Force

Завершить по имени окна (редко, но бывает для старых утилит):

Stop-Process -Name "esbuild" -Force -ErrorAction SilentlyContinue

Windows — найти dev-процесс по проекту

Подставьте PROJECT или фрагмент пути moonlit-api:

$proj = 'moonlit-api'
Get-CimInstance Win32_Process |
  Where-Object { $_.CommandLine -and $_.CommandLine -match $proj } |
  Select-Object ProcessId, Name, CommandLine

Только Node:

Get-CimInstance Win32_Process -Filter "Name='node.exe'" |
  Where-Object { $_.CommandLine -match 'purple-llama|vite|next|webpack' } |
  Select-Object ProcessId, CommandLine

Python (uvicorn, Django):

Get-CimInstance Win32_Process -Filter "Name='python.exe'" |
  Where-Object { $_.CommandLine -match 'uvicorn|manage.py|flask' } |
  Select-Object ProcessId, CommandLine

Java (Spring Boot):

Get-CimInstance Win32_Process -Filter "Name='java.exe'" |
  Where-Object { $_.CommandLine -match 'spring-boot|moonlit-api' } |
  Select-Object ProcessId, CommandLine

Массовое завершение — без «убить весь интернет»

Лучше фильтр по папке проекта, чем слепой taskkill /IM node.exe:

$root = 'C:\Users\zephyr\Projects\moonlit-api'
Get-CimInstance Win32_Process -Filter "Name='node.exe'" |
  Where-Object { $_.CommandLine -like "*$root*" } |
  ForEach-Object { Stop-Process -Id $_.ProcessId -Force }

Проверка «что останется» до kill (dry-run):

Get-CimInstance Win32_Process -Filter "Name='node.exe'" |
  Where-Object { $_.CommandLine -match 'moonlit-api' } |
  Select-Object ProcessId, CommandLine

Linux, macOS, WSL — порты

Кто слушает порт

ss -tlnp | grep ':3000'
sudo ss -tlnp | grep ':3000'
lsof -iTCP:3000 -sTCP:LISTEN
sudo lsof -i :3000 -sTCP:LISTEN -n -P
Утилита Плюс
ss Быстро, есть на современных дистрибутивах
lsof Удобно на macOS, понятный вывод PID/имени

Все LISTEN:

ss -tlnp
sudo lsof -i -sTCP:LISTEN -n -P | head -50

PID → команда

ps -p 32088 -o pid,user,%cpu,%mem,cmd
ps -fp 32088

Завершение

kill 32088
kill -TERM 32088
# последняя мера:
kill -9 32088

По имени и пути проекта:

pgrep -af node | grep -i moonlit-api
pkill -f "vite.*purple-llama"

Linux / macOS — мониторинг нагрузки

top -o %CPU
htop
ps aux --sort=-%cpu | head -15
ps aux --sort=-%mem | head -15

Один процесс в реальном времени:

top -p 32088

Windows-аналог:

Get-Process | Sort-Object CPU -Descending | Select-Object -First 15 Name, Id, CPU
Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10 Name, Id, @{N='MB';E={[int]($_.WS/1MB)}}

Docker — кто занял порт

docker ps --format "table {{.Names}}\t{{.Ports}}\t{{.Status}}"
docker ps -a | findstr 3000
docker ps --format "table {{.Names}}\t{{.Ports}}\t{{.Status}}"

Контейнер, привязанный к 0.0.0.0:3000:

docker ps --filter "publish=3000"

Остановить конкретный контейнер:

docker stop fluffy_grafana_sidecar
docker rm -f fluffy_grafana_sidecar

Освободить порт без удаления образов — достаточно docker stop. Порты в compose часто меняют на хосте: 8347:3000 — см. Docker Compose — примеры.


WSL2 — сеть и localhost

С Windows к сервису внутри WSL:

# в WSL
ss -tlnp | grep 3000
hostname -I

С Windows PowerShell иногда нужен IP WSL (меняется после перезапуска):

wsl hostname -I

Проброс: сервер в WSL слушает 0.0.0.0:3000 — тогда часто работает http://localhost:3000 из браузера Windows; если нет — пробуйте IP из wsl hostname -I.

Процесс node в WSL убивать из WSL, не taskkill в Windows:

fuser -k 3000/tcp

Dev-сервер — порядок при «порт занят»

  1. Кто слушает порт / Unix / Docker → записать PID или имя контейнера.
  2. CommandLine → это ваш npm run dev, а не PostgreSQL или чужой IDE?
  3. Ctrl+C в исходном терминале (советы).
  4. taskkill / kill по PID или docker stop.
  5. Из корня WIN_ROOT: снова команда из README.
  6. Кэш: npm run clean, удаление .next, .vite, dist, node_modules/.cache — по стеку.
Сообщение Частая причина
EADDRINUSE Старый процесс на том же порту
ECONNREFUSED в браузере Сервер не запущен или другой порт
EACCES на порту < 1024 Нужны права root / другой порт
Два терминала с dev Два LISTEN на одном порту

Запуск на другом порту (временный обход):

$env:PORT=3456; npm run dev
PORT=3456 npm run dev
npx vite --port 3456

Node.js — npm, pnpm, yarn

Проверка окружения:

node -v
npm -v
where node
which node
node -v
npm -v
Get-Command node | Select-Object Source

Чистая переустановка зависимостей (типичный «лечит странное»):

cd /home/zephyr/src/moonlit-api
rm -rf node_modules package-lock.json
npm install
Set-Location C:\Users\zephyr\Projects\moonlit-api
Remove-Item -Recurse -Force node_modules, package-lock.json -ErrorAction SilentlyContinue
npm install

Кэш npm:

npm cache verify
npm cache clean --force
npm cache verify
npm cache clean --force

Фронт — Vite, Next, Webpack, статический генератор

Стек Порт по умолчанию Как искать в CommandLine
Vite 5173 vite
Next.js 3000 next dev
Create React App 3000 react-scripts start
Webpack dev 8080 / из конфига webpack serve
Astro 4321 astro dev
Angular 4200 ng serve

Поиск на Windows:

Get-CimInstance Win32_Process -Filter "Name='node.exe'" |
  Where-Object { $_.CommandLine -match 'vite|next dev|webpack|astro' } |
  Select-Object ProcessId, CommandLine

Очистка кэша Next:

Remove-Item -Recurse -Force .next -ErrorAction SilentlyContinue

Очистка Vite:

Remove-Item -Recurse -Force node_modules\.vite -ErrorAction SilentlyContinue

Python — venv, uvicorn, Django, Flask

Активировать venv:

cd /home/zephyr/src/moonlit-api
source .venv/bin/activate
which python
cd C:\Users\zephyr\Projects\moonlit-api
.\.venv\Scripts\Activate.ps1
Get-Command python

Кто держит 8000:

lsof -i :8000
pgrep -af uvicorn
Get-NetTCPConnection -LocalPort 8000 -State Listen
Get-CimInstance Win32_Process -Filter "Name='python.exe'" |
  Where-Object { $_.CommandLine -match 'uvicorn|manage.py runserver' }

Запуск uvicorn на другом порту:

uvicorn main:app --reload --port 8765

Java — Spring Boot, Gradle, Maven

Порт 8080:

ss -tlnp | grep 8080
jps -l
Get-NetTCPConnection -LocalPort 8080 -State Listen
Get-CimInstance Win32_Process -Filter "Name='java.exe'" |
  Where-Object { $_.CommandLine -match 'spring-boot|moonlit-api' }

Gradle:

./gradlew bootRun --args='--server.port=9091'

.NET

dotnet --info
Get-NetTCPConnection -LocalPort 5000,5001 -State Listen
Get-Process -Name "dotnet" -ErrorAction SilentlyContinue
ss -tlnp | grep -E '5000|5001'

URL из launchSettings.json — смотрите applicationUrl.


Go, PHP, Ruby

Go:

lsof -i :8080
pgrep -af 'go run|main.go'

PHP built-in:

pgrep -af 'php -S'
Get-CimInstance Win32_Process -Filter "Name='php.exe'" |
  Where-Object { $_.CommandLine -match 'php -S' }

Rails:

lsof -i :3000
pgrep -af puma

Локальные базы и кэши

Сервис Порт Проверка
PostgreSQL 5432 ss -tlnp | grep 5432
MySQL 3306 Get-NetTCPConnection -LocalPort 3306
Redis 6379 redis-cli ping
MongoDB 27017 mongosh --eval "db.runCommand({ ping: 1 })"

PostgreSQL — кто слушает:

sudo ss -tlnp | grep 5432
Get-NetTCPConnection -LocalPort 5432 -State Listen
Get-Service -Name postgresql* -ErrorAction SilentlyContinue

Redis:

redis-cli ping

Остановить локальный Redis в Docker:

docker stop redis_cart_session

Git — быстрые команды из CLI

Полная шпаргалка — Git — шпаргалка сценариев. Здесь — «застрял сейчас»:

cd /home/zephyr/src/moonlit-api
git status
git pull --rebase
git stash push -m "wip before pull"
git stash pop

Отменить локальные правки одного файла:

git restore src/widgets/fluffy.ts
git restore .\src\widgets\fluffy.ts

Зависший lock (осторожно — только если уверены, что Git не работает в другом окне):

rm -f .git/index.lock

Диск — место и кэши

df -h
du -sh * | sort -h | tail -20
du -sh node_modules .venv dist target 2>/dev/null
Get-PSDrive C | Select-Object Used, Free
Get-ChildItem C:\Users\zephyr\Projects -Directory |
  ForEach-Object { $s=(Get-ChildItem $_.FullName -Recurse -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum; [PSCustomObject]@{Dir=$_.Name; GB=[math]::Round($s/1GB,2)} } |
  Sort-Object GB -Descending

Очистка типовых «пожирателей» (проверьте путь):

Remove-Item -Recurse -Force "$env:LOCALAPPDATA\npm-cache" -ErrorAction SilentlyContinue
Remove-Item -Recurse -Force "$env:TEMP\*" -ErrorAction SilentlyContinue
docker system df
docker system prune -f

docker system prune удаляет неиспользуемое — не жмите на продакшен-сервере без понимания.


PATH — «команда не найдена»

$env:Path -split ';' | Where-Object { $_ -match 'node|python|git' }
Get-Command node, git, python -ErrorAction SilentlyContinue
echo $PATH | tr ':' '\n' | grep -E 'node|python|npm'
type -a node
which -a python3

Временно добавить каталог в сессию:

$env:Path += ";C:\Users\zephyr\bin"
export PATH="$HOME/.local/bin:$PATH"

Windows — файл занят другим процессом

Кто держит файл (нужны права, иногда admin):

# Resource Monitor: resmon.exe → CPU → Associated Handles → поиск по имени файла

Через Sysinternals Handle (если установлен):

handle.exe C:\Users\zephyr\Projects\moonlit-api\package-lock.json

Закрыть VS Code / dev-сервер часто проще, чем искать PID вручную.


Windows — службы

Get-Service | Where-Object { $_.Status -eq 'Running' } | Select-Object Name, DisplayName
Get-Service -Name "W3SVC","postgresql*","MongoDB" -ErrorAction SilentlyContinue
Stop-Service -Name "SomeDevService" -Force
Start-Service -Name "SomeDevService"

Порт службы IIS:

netstat -ano | findstr :80

Linux — systemd

systemctl status nginx
sudo systemctl restart nginx
journalctl -u nginx -n 50 --no-pager

Пользовательский unit:

systemctl --user status moonlit-api.service
journalctl --user -u moonlit-api -f

Логи — хвост в реальном времени

tail -f logs/app.log
tail -n 100 -f /var/log/nginx/error.log
grep -i error logs/app.log | tail -20
Get-Content .\logs\app.log -Wait -Tail 50

Docker:

docker logs -f fluffy_api --tail 100

Health-check — отвечает ли localhost

Invoke-WebRequest -Uri http://localhost:3000 -UseBasicParsing | Select-Object StatusCode
Invoke-WebRequest -Uri http://127.0.0.1:8080/health -UseBasicParsing
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:3000
curl -sS http://localhost:8080/actuator/health

Только заголовки:

curl -I http://localhost:3000

Подробнее — curl / fetch.


DNS и hosts

ping -c 3 api.moonlit.example
nslookup api.moonlit.example
dig +short api.moonlit.example
Resolve-DnsName api.moonlit.example
Test-NetConnection api.moonlit.example -Port 443

Локальный override (hosts):

grep moonlit /etc/hosts

Файл: /etc/hosts (Unix), C:\Windows\System32\drivers\etc\hosts (Windows).


Прокси — npm и curl ломаются

Проверить переменные:

Get-ChildItem Env: | Where-Object { $_.Name -match 'PROXY' }
env | grep -i proxy

Временно отключить для сессии:

Remove-Item Env:HTTP_PROXY, Env:HTTPS_PROXY -ErrorAction SilentlyContinue
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY

npm за корпоративным прокси (пример — подставьте URL из IT):

npm config set proxy http://proxy.zephyr.corp:8080
npm config delete proxy

SSH — туннель к удалённой БД

Локальный порт 15432 → PostgreSQL на сервере:

ssh -N -L 15432:127.0.0.1:5432 deploy@staging.moonlit.example

Подключение с ПК:

psql "postgresql://user:pass@127.0.0.1:15432/dbname"

Фоновый туннель:

ssh -fN -L 15432:127.0.0.1:5432 deploy@staging.moonlit.example

Типовые ошибки — что делать

Ошибка / симптом Первая команда Раздел
EADDRINUSE netstat / Get-NetTCPConnection порты
command not found Get-Command / which PATH
EACCES permission denied права на файл / sudo права
Cannot find module npm install Node
Port 3000 is already in use найти PID dev-flow
Docker: port allocated docker ps Docker
git index.lock закрыть IDE, rm .git/index.lock Git
Страница белая, сервер молчит curl -I localhost:PORT health
WSL не открывается с Windows wsl hostname -I WSL
Диск полный df / Get-PSDrive диск

Чек-лист перед taskkill / pkill

  1. Есть PID из netstat, ss или Get-NetTCPConnection?
  2. Прочитали CommandLine — это ваш PROJECT, а не postgres / com.docker?
  3. Пробовали Ctrl+C в терминале запуска?
  4. Для Node — фильтр по пути проекта, не «все node.exe»?
  5. На Windows — не трогали svchost, System, lsass?
  6. После kill — порт свободен? Повторить netstat / ss.

Частые вопросы

Чем эта статья отличается от 101 и 102?
101/102 — справочник «что делает команда». Здесь — цепочки под задачу (порт → PID → kill → снова dev).

Почему в примерах zephyr и moonlit-api?
Это вымышленные имена; подставьте свои пути.

Агент в Cursor предлагает taskkill — можно?
Только после проверки PID и CommandLine. См. Опасные скрипты.

Linux в Windows без WSL?
Git Bash, Coreutils for Windows, отдельные .exe — см. Поиск текста в файлах — grep, findstr и Select-String.

Нужен ли admin для netstat?
Обычно нет. Get-NetTCPConnection и lsof иногда требуют повышения для полного имени процесса.


Приложение A — расширенные рецепты Windows (CMD)

Сеть и порты

netstat -ano | findstr LISTENING
netstat -b

netstat -b показывает имя программы (нужен запуск от администратора). Медленнее, зато без PowerShell.

Проверка, доступен ли порт снаружи (на том же ПК):

telnet localhost 3000
curl.exe -I http://localhost:3000

Ping и маршрут:

ping staging.moonlit.example
tracert staging.moonlit.example
pathping staging.moonlit.example

Процессы

Список с полным путём (CSV в буфер — для отчёта):

tasklist /V /FO CSV > %TEMP%\tasks.csv
wmic process where "name='node.exe'" get ProcessId,CommandLine

Завершить по имени окна (осторожно):

taskkill /FI "WINDOWTITLE eq *Vite*" /F

Файлы и каталоги

cd /d C:\Users\zephyr\Projects\moonlit-api
dir /s /b package.json
where node
where python

Символическая ссылка на тяжёлую папку:

mklink /D C:\Users\zephyr\fast\cache D:\sandboxes\purple-llama\cache

Архивы

tar -acf C:\Temp\moonlit-backup.tgz -C C:\Users\zephyr\Projects\moonlit-api .

Приложение B — PowerShell: однострочники под задачу

Задача Команда
Текущая папка Get-Location
Список файлов Get-ChildItem · ls
Создать папку New-Item -ItemType Directory -Path .\logs
Копировать Copy-Item .\a.txt .\backup\
Удалить рекурсивно Remove-Item .\dist -Recurse -Force
Прочитать файл Get-Content .\README.md -TotalCount 20
Поиск текста Select-String -Path .\src\*.ts -Pattern 'TODO'
Переменная сессии $env:NODE_ENV = 'development'
Запуск от админа Start-Process powershell -Verb RunAs
История Get-History

Цепочка «порт → процесс → kill» в одном блоке:

$port = 3000
$conn = Get-NetTCPConnection -LocalPort $port -State Listen -ErrorAction SilentlyContinue
if (-not $conn) { Write-Host "Порт $port свободен"; return }
$pid = $conn.OwningProcess
Get-CimInstance Win32_Process -Filter "ProcessId=$pid" |
  Select-Object ProcessId, Name, CommandLine
# Stop-Process -Id $pid -Force   # раскомментируйте после проверки

Экспорт всех LISTEN с именами процессов в CSV:

Get-NetTCPConnection -State Listen |
  ForEach-Object {
    $n = (Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName
    [PSCustomObject]@{ Port=$_.LocalPort; PID=$_.OwningProcess; Name=$n }
  } | Export-Csv -Path "$env:TEMP\listen-ports.csv" -NoTypeInformation

Приложение C — Bash: однострочники (Linux / macOS / WSL)

Задача Команда
Место на диске df -h .
Размер папок du -sh */ | sort -h
Найти файл find . -name '*.log' -mtime -1
Поиск в файлах grep -RIn 'FIXME' src/
Права + выполнение chmod +x scripts/deploy.sh
Скачать curl -LO https://example.com/file.zip
Распаковать tar -xzf file.tar.gz
JSON в терминале jq '.items[0]' < data.json

Скрипт «освободить порт» (сохранить как free-port.sh, подставить PORT):

#!/usr/bin/env bash
set -euo pipefail
PORT="${1:?usage: free-port.sh 3000}"
PID=$(lsof -ti tcp:"$PORT" || true)
if [[ -z "$PID" ]]; then echo "Порт $PORT свободен"; exit 0; fi
echo "PID на порту $PORT: $PID"
ps -fp $PID
read -r -p "Kill? [y/N] " ans
[[ "$ans" == "y" ]] && kill -9 $PID

Приложение D — pnpm и yarn

corepack enable
pnpm -v
pnpm install
pnpm run dev
corepack enable
pnpm install
pnpm run dev

Очистка pnpm store:

pnpm store path
pnpm store prune

Yarn Berry:

yarn -v
yarn install
yarn dev

Кто слушает порт при yarn/pnpm — тот же node; ищите по CommandLine и пути WIN_ROOT.


Приложение E — Kubernetes / minikube локально

kubectl config current-context
kubectl get pods -A
kubectl get svc
ss -tlnp | grep -E '6443|10250'

Проброс порта пода на localhost:

kubectl port-forward svc/moonlit-api 8080:80

Пока port-forward работает — не закрывайте терминал (как с npm run dev).


Приложение F — Nginx / Caddy локально

Проверка конфига:

sudo nginx -t
sudo systemctl reload nginx

Кто слушает 80/443:

sudo ss -tlnp | grep -E ':80|:443'

Windows (IIS):

Get-Service W3SVC
Get-NetTCPConnection -LocalPort 80 -State Listen

Готовые фрагменты конфигов — Nginx — Lab.


Приложение G — тесты и CI локально

Повторить падение CI на машине:

cd /home/zephyr/src/moonlit-api
npm ci
npm test
npm run lint
cd C:\Users\zephyr\Projects\moonlit-api
npm ci
npm test

Переменные как в GitHub Actions:

export CI=true
export NODE_ENV=test
npm test

См. GitHub Actions — рецепты.


Приложение H — безопасность и аудит (локально)

Проверить, не слушает ли машина лишнее снаружи (домашняя сеть — осторожно с выводами):

sudo ss -tlnp
sudo ufw status
Get-NetFirewallProfile | Select-Object Name, Enabled
Get-NetTCPConnection -State Listen |
  Where-Object { $_.LocalAddress -notmatch '127.0.0.1|::1|0.0.0.0' } |
  Select-Object LocalAddress, LocalPort, OwningProcess

Просмотр недавних ошибок Windows:

Get-WinEvent -LogName Application -MaxEvents 20 |
  Where-Object { $_.LevelDisplayName -match 'Error|Warning' } |
  Select-Object TimeCreated, ProviderName, Message -First 5

Приложение I — переменные окружения для стеков

Переменная Влияет на
NODE_ENV production / development
PORT многие Node-серверы
HOST 0.0.0.0 vs 127.0.0.1
DATABASE_URL Prisma, Rails, Django
HTTP_PROXY npm, curl, git
JAVA_HOME JDK для Maven/Gradle
PYTHONPATH импорты Python

Показать все env с фильтром:

env | sort | grep -iE 'node|npm|python|java|proxy|database'
Get-ChildItem Env: | Sort-Object Name | Where-Object { $_.Name -match 'NODE|NPM|PYTHON|JAVA|PROXY|DATABASE' }

Загрузить .env вручную в сессию (упрощённо — без кавычек в значениях):

set -a
source .env
set +a

Приложение J — типовые порты (шпаргалка)

Порт Сервис / инструмент
22 SSH
25 SMTP
53 DNS
80 HTTP
443 HTTPS
1433 MS SQL
1521 Oracle
2181 ZooKeeper
3000 Node dev / Grafana UI
3306 MySQL / MariaDB
3389 RDP
4200 Angular
4321 Astro
5000 Flask / .NET
5173 Vite
5432 PostgreSQL
5672 RabbitMQ
5900 VNC
6379 Redis
6443 Kubernetes API
8000 Django / uvicorn
8080 Tomcat / прокси
8443 HTTPS alt
9000 SonarQube / PHP-FPM
9090 Prometheus
9200 Elasticsearch HTTP
27017 MongoDB

Проверка «неожиданного» порта:

Get-NetTCPConnection -LocalPort 9200 -State Listen -ErrorAction SilentlyContinue

Приложение K — Postman / Insomnia без GUI

Эквивалент запроса из коллекции:

curl -sS -X POST http://localhost:8080/api/v1/widgets \
  -H 'Content-Type: application/json' \
  -d '{"name":"fluffy"}'

С Bearer:

curl -sS http://localhost:8080/api/me \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.fake"

Подробнее — curl / fetch — API-запросы.


Приложение L — монорепозитории

Найти все package.json и порты в скриптах:

find . -name package.json -not -path '*/node_modules/*' -exec grep -H '"dev"' {} \;
Get-ChildItem -Recurse -Filter package.json |
  Where-Object { $_.FullName -notmatch 'node_modules' } |
  ForEach-Object { Select-String -Path $_.FullName -Pattern 'dev","start"' }

Запуск одного пакета из workspaces:

npm run dev -w packages/widget-ui
pnpm --filter @moonlit/widget-ui dev

Приложение M — виртуализация и VM

Hyper-V / VirtualBox — порты пробрасываются отдельно. На хосте проверяйте:

Get-NetTCPConnection -State Listen | Where-Object LocalPort -eq 3389

VBox проброс:

VBoxManage list vms

WSL vs Hyper-V — при конфликте Docker Desktop смотрите документацию Docker; диагностика портов та же: Docker.


Приложение N — очистка «зомби» node на Windows (пошагово)

  1. Get-NetTCPConnection -State Listen | Where-Object { $_.OwningProcess -ne 0 } — список PID.
  2. Для каждого PID с node / esbuildCommandLine через CIM.
  3. Отметить PID, где путь не содержит ваш WIN_ROOT.
  4. Завершить только отмеченные ваши PID через Stop-Process.
  5. netstat -ano | findstr :3000 — пусто?
  6. npm run dev снова.

Никогда не завершайте System, Registry, csrss, wininit.


Приложение O — macOS-специфика

sudo lsof -nP -iTCP:3000 -sTCP:LISTEN
sudo fs_usage -w -f filesystem | grep moonlit-api

Сброс DNS-кэша (если «сайт не открывается» после смены hosts):

sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

Открыть порт в брандмауэре — через «Системные настройки → Сеть»; в CLI проще временно проверить на 127.0.0.1.


Приложение P — Rust, C++, CMake

Rust (cargo run):

pgrep -af 'target/debug/moonlit'
lsof -i :3000

C++ бинарник:

pgrep -af './build/moonlit'

CMake тесты:

cmake --build build
ctest --test-dir build --output-on-failure

Приложение Q — Elasticsearch, Kafka, RabbitMQ

curl -sS http://localhost:9200
curl -sS http://localhost:9200/_cluster/health?pretty
ss -tlnp | grep -E '9092|5672'
Invoke-WebRequest http://localhost:9200 -UseBasicParsing
Get-NetTCPConnection -LocalPort 9092,5672 -State Listen -ErrorAction SilentlyContinue

Остановка контейнеров из Compose, а не kill -9 java на хосте.


Приложение R — SQLite и файловые блокировки

lsof moonlit.db
fuser moonlit.db
Get-Process | Where-Object { $_.Modules.FileName -match 'moonlit.db' }

Закройте DB Browser / второй экземпляр приложения перед миграциями.


Приложение S — winget и установка CLI

winget search nodejs
winget install OpenJS.NodeJS.LTS
winget install Git.Git
winget install Microsoft.PowerShell
refreshenv

Проверка после установки — новое окно терминала:

node -v
git --version

Приложение T — таблица «симптом → первая команда» (расширенная)

Симптом Windows Linux/macOS
Сайт localhost не открывается curl.exe -I http://127.0.0.1:PORT curl -I http://127.0.0.1:PORT
Порт занят netstat -ano | findstr :PORT ss -tlnp | grep :PORT
Высокая CPU Get-Process | sort CPU -desc ps aux --sort=-%cpu
Нет места Get-PSDrive C df -h
Git не пушит git remote -v · ssh -T git@github.com то же
npm 404 registry npm config get registry то же
SSL ошибка curl curl -vk https://... то же
Docker не стартует wsl -l -v · перезапуск Docker Desktop systemctl status docker
БД connection refused Test-NetConnection localhost -Port 5432 nc -zv localhost 5432
Два IP на localhost проверить 127.0.0.1 vs localhost IPv6 ping -4 localhost

Приложение U — разбор одной строки агента (учебный пример)

Строка (вымышленные числа):

netstat -ano | findstr "3000 3456 LISTENING"
Фрагмент Значение
netstat -ano все соединения, числовые адреса, PID
| передать вывод в следующую команду
findstr "3000 3456 LISTENING" оставить строки, где встречаются эти подстроки

Дальше по последнему столбцу LISTENING берут PID → tasklist → решение о taskkill.

Аналог в PowerShell одной цепочкой — см. Приложение B.


Приложение V — когда не лезть в терминал

Ситуация Лучше
Обновление Windows «Параметры» / Settings
Удаление программы «Приложения»
Смена Wi‑Fi GUI сети
Антивирусная карантин UI защитника
Форматирование диска осознанный мастер, не format из чата

Терминал — для повторяемых и точных операций; GUI иногда безопаснее для новичка.


Каталог однострочников (копировать и подставить PORT / PID)

Замените 3000, 32088, moonlit-api на свои значения.

Windows CMD

Windows PowerShell

Get-NetTCPConnection -LocalPort 3000 -State Listen
Get-Process -Id 32088
Get-CimInstance Win32_Process -Filter "ProcessId=32088" | Select CommandLine
Stop-Process -Id 32088 -Force
Get-ChildItem Env:
$env:PORT = 3456
Test-NetConnection localhost -Port 3000
Resolve-DnsName google.com
Invoke-WebRequest http://localhost:3000 -UseBasicParsing
Get-Content .\package.json
Select-String -Path .\src\*.ts -Pattern TODO
Get-Service | Where Status -eq Running
Get-WinEvent -LogName System -MaxEvents 5

Bash / WSL / macOS

Docker

docker ps
docker ps -a
docker stop $(docker ps -q)
docker logs -f CONTAINER --tail 50
docker exec -it CONTAINER sh
docker compose up -d
docker compose down
docker system df

npm / Node

npm run dev
npm run build
npm ci
npm ls --depth=0
npx kill-port 3000
npx vite --port 3456

Пошаговые разборы (15 сценариев)

1. «Порт 3000 уже используется» (Windows)

Шаг Действие
1 netstat -ano | findstr :3000
2 Найти строку LISTENING, записать PID
3 tasklist /FI "PID eq …" или CIM с CommandLine
4 Если это ваш dev — taskkill /PID … /T /F
5 Снова npm run dev из WIN_ROOT

2. «Порт 3000 уже используется» (Linux)

Шаг Действие
1 lsof -i :3000 или ss -tlnp | grep 3000
2 ps -fp PID
3 kill PID
4 Проверить ss снова
5 Запустить dev-сервер

3. Закрыл терминал — сайт не открывается

Сервер остановился. Решение: снова открыть терминал в WIN_ROOT, запустить команду из README, не закрывать окно. См. советы.

4. Docker занял 3000

Шаг Действие
1 docker ps → колонка PORTS
2 docker stop <name>
3 Либо сменить порт в compose.yaml: 3456:3000
4 docker compose up -d

5. Два проекта — два node на 3000

Запускайте второй на другом порту: PORT=3456 npm run dev или флаг CLI (vite --port 3456). Не убивайте чужой проект без проверки CommandLine.

6. PostgreSQL на 5432 мешает тестам

Шаг Действие
1 Get-Service postgresql* или docker ps
2 Остановить тестовый инстанс, не прод
3 Либо тестовая БД на 5433 в .env

7. command not found: node

Шаг Действие
1 where node / which node
2 Переустановить Node LTS или winget install OpenJS.NodeJS.LTS
3 Новое окно терминала
4 node -v

8. EACCES на порту 80

Порты < 1024 на Unix часто требуют root. Для учёбы используйте 3000/8080 или nginx как reverse proxy.

9. WSL — браузер Windows не видит сервер

Шаг Действие
1 В WSL: сервер слушает 0.0.0.0, не только 127.0.0.1
2 wsl hostname -I
3 Пробовать IP в браузере
4 Обновить WSL2

10. Высокая загрузка CPU от node

Шаг Действие
1 Get-Process node / ps aux | grep node
2 CommandLine — какой проект
3 Закрыть лишние IDE / dev-серверы
4 Перезапуск одного экземпляра

11. npm install зависает

Шаг Действие
1 Проверить proxy: npm config get proxy
2 npm cache verify
3 Удалить node_modules, package-lock.json, снова npm install
4 Другая сеть / VPN off

12. Git: cannot lock ref

Закрыть все Git GUI, удалить .git/index.lock только если уверены, что нет активного git.

13. Файл занят при git checkout

Закрыть редактор/сервер, использующий файл; на Windows — Handle/resmon.

14. curl SSL certificate problem

Учебный проект: проверить системное время, для диагностики curl -vk (не для продакшена). Корпоративный proxy — импорт CA.

15. После сна ноутбука — «network error»

Перезапустить dev-сервер и Docker Desktop; иногда wsl --shutdown и снова WSL.


Сценарии для ИИ-агента (формулировки запроса)

Не команды, а как просить помощь, чтобы агент не «убил всё»:

Плохо Лучше
Убей node Найди PID на порту 3000, покажи CommandLine, предложи kill только если путь содержит moonlit-api
Освободи порт netstat / Get-NetTCPConnection, объясни владельца порта
Почини npm Покажи node -v, npm -v, вывод npm install, проверь proxy
Запусти проект cd в WIN_ROOT, команда из README, не закрывай процесс

Дополнительные таблицы разбора команд

netstat (строка LISTENING)

Пример (числа вымышленные):

TCP    0.0.0.0:3000           0.0.0.0:0              LISTENING       32088
Поле Значение
TCP протокол
0.0.0.0:3000 слушает на всех интерфейсах, порт 3000
LISTENING ждёт подключений
32088 PID

ss (Linux)

LISTEN 0 128 0.0.0.0:3000 0.0.0.0:* users:(("node",pid=32088,fd=21))
Поле Значение
0.0.0.0:3000 адрес:порт
node имя процесса
pid=32088 PID

Get-NetTCPConnection

Свойство Смысл
LocalPort порт на вашей машине
OwningProcess PID
State Listen для серверов
LocalAddress 0.0.0.0 или 127.0.0.1

Flutter, Android emulator, Expo

flutter doctor -v
adb devices
adb reverse tcp:3000 tcp:3000
Get-Process -Name qemu-system* -ErrorAction SilentlyContinue
Get-NetTCPConnection -LocalPort 5555 -ErrorAction SilentlyContinue

Expo / React Native — Metro bundler часто 8081:

lsof -i :8081
npx react-native start --port 8088

PHP Composer и встроенный сервер

cd /home/zephyr/src/purple-llama
composer install
php -S 127.0.0.1:8765 -t public
composer install
php -S 127.0.0.1:8765 -t public

Кто слушает:

pgrep -af "php -S"

Ruby bundler

bundle install
bundle exec rails server -p 3456
lsof -i :3000

Perl, Lua, niche (кратко)

perl -v
lua -v
lsof -i :8080

Идея та же: lsof / ss → PID → pskill.


OpenSSL — проверить сертификат HTTPS

openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -dates
# проще: curl -vk https://example.com
curl.exe -vk https://example.com

Сравнение инструментов диагностики портов

Инструмент ОС Плюс Минус
netstat Win/Linux везде устаревающий стиль
Get-NetTCPConnection Windows объектная модель PS нужен PowerShell
ss Linux быстрый без root имя иногда скрыто
lsof Unix наглядно нужен install на некоторых Linux
docker ps кросс видит контейнеры не видит «голый» node на хосте
Resource Monitor Windows GUI, кто держит файл ручной труд

История: почему агенты любят netstat и taskkill

Команды короткие, есть в учебниках 2000-х, работают в CMD без модулей. PowerShell и ss точнее, но агент часто генерирует совместимый минимум. Вы можете попросить: «перепиши на Get-NetTCPConnection» или «покажи ss вместо netstat».


Повторяющийся цикл отладки (mermaid)

flowchart TD
  A[Ошибка: порт / нет связи] --> B{Сервер запущен?}
  B -->|нет| C[Запустить dev в WIN_ROOT]
  B -->|да| D[Кто слушает порт?]
  D --> E{Наш процесс?}
  E -->|да| F[Ctrl+C или kill PID]
  E -->|нет| G[Сменить PORT или stop Docker]
  F --> H[Проверить curl -I]
  G --> H
  C --> H

Ещё 30 мини-сценариев (таблица)

# Проблема Команда-подсказка
1 Узнать IP ПК ipconfig / hostname -I
2 Очистить терминал cls / clear
3 Предыдущая команда стрелка ↑ / Get-History
4 Прервать команду Ctrl+C
5 Завершить сессию SSH exit
6 Проверить 443 Test-NetConnection host -Port 443
7 Список дисков wmic logicaldisk / lsblk
8 Время системы date / Get-Date
9 Перезагрузка shutdown /r /t 0 (осторожно)
10 Список пользователей whoami / id
11 Открыть папку в Explorer explorer .
12 Открыть папку в Finder open .
13 Симлинк New-Item -ItemType SymbolicLink / ln -s
14 Хеш файла Get-FileHash / sha256sum
15 Сравнить файлы fc / diff -u
16 Случайный порт свободен? Get-NetTCPConnection -LocalPort X
17 Убить по имени taskkill /IM chrome.exe (осторожно)
18 JVM порт jps -lv
19 Maven завис mvn -X
20 Gradle daemon ./gradlew --stop
21 Pip зависает pip install -v package
22 Poetry poetry run uvicorn ...
23 Conda env conda activate moonlit
24 nvm версия nvm use 20
25 fnm fnm use 20
26 Брандмауэр Win Get-NetFirewallRule (много вывода)
27 Linux ufw allow sudo ufw allow 3000/tcp
28 journal OOM dmesg | grep -i kill
29 Windows OOM Event Viewer
30 Проверить MIME curl -I заголовок Content-Type

Глоссарий (встречается в выводе терминала)

Термин Простыми словами
PID Номер процесса в ОС
PPID PID родительского процесса
LISTEN Сокет ждёт входящих подключений
ESTABLISHED Активное соединение
localhost / 127.0.0.1 «Этот компьютер»
0.0.0.0 Слушать на всех интерфейсах
EADDRINUSE Адрес/порт уже занят
ECONNREFUSED На порту никто не принимает соединения
stdin / stdout / stderr Ввод / вывод / ошибки процесса
pipe | Передать вывод одной команды в другую
foreground Процесс держит терминал (dev-сервер)
daemon / service Фоновая служба ОС
container Изолированный процесс Docker
bind mount Папка хоста внутри контейнера
health-check Запрос «жив ли» сервис
stale lock Файл-блокировка остался после сбоя

Копипаста: диагностика за 60 секунд

Windows (PowerShell) — вставьте в терминал в каталоге проекта:

Write-Host "=== NODE ===" ; node -v ; npm -v
Write-Host "=== PORT 3000 ===" ; Get-NetTCPConnection -LocalPort 3000 -State Listen -ErrorAction SilentlyContinue |
  ForEach-Object { Get-CimInstance Win32_Process -Filter "ProcessId=$($_.OwningProcess)" } |
  Select-Object ProcessId, Name, CommandLine
Write-Host "=== GIT ===" ; git status -sb

Linux / WSL:

echo "=== NODE ===" && node -v && npm -v
echo "=== PORT 3000 ===" && ss -tlnp | grep :3000 || echo "free"
echo "=== GIT ===" && git status -sb

Подставьте другой порт вместо 3000.


Рецепты: сеть между двумя ПК в LAN

Узнать IP в локальной сети:

Get-NetIPAddress -AddressFamily IPv4 | Where-Object { $_.IPAddress -notlike '127.*' }
ip -4 addr show

Проверить доступность другого ПК:

ping 192.168.88.42
nc -zv 192.168.88.42 3000
Test-NetConnection 192.168.88.42 -Port 3000

Если не пингуется — брандмауэр, не тот Wi‑Fi, VPN.


Рецепты: синхронизация времени (SSL и JWT)

Get-Date
w32tm /query /status
timedatectl status
date -u

Сильный рассинхрон времени ломает HTTPS и токены.


Рецепты: кодировка и CRLF

Симптом: $'\r': command not found в bash.

file script.sh
dos2unix script.sh
(Get-Content .\script.sh -Raw).Replace("`r`n","`n") | Set-Content -NoNewline .\script.sh

Рецепты: длинные пути Windows

subst X: C:\Users\zephyr\Projects\purple-llama-nested-deep
X:
cd \

Или включить длинные пути в политике Windows — для enterprise.


Рецепты: антивирус тормозит node_modules

Исключения добавляют через UI защитника; в терминале только проверка, что сканер не держит файлы:

Get-MpPreference | Select-Object ExclusionPath

Не отключайте защиту глобально «ради скорости npm» без понимания рисков.


Рецепты: несколько версий Node (nvm, fnm, nvs)

nvm ls
nvm use 20
which node
fnm list
fnm use 20
node -v

После смены версии — переоткрыть терминал и npm install в проекте.


Рецепты: Python poetry / pipenv

poetry env info
poetry run python -m http.server 8765
pipenv run uvicorn main:app --reload

Рецепты: MS SQL / LocalDB (Windows)

Get-Service | Where-Object { $_.Name -match 'MSSQL' }
Get-NetTCPConnection -LocalPort 1433 -State Listen -ErrorAction SilentlyContinue

Рецепты: IIS Express / Visual Studio

Get-Process iisexpress -ErrorAction SilentlyContinue
Get-NetTCPConnection -LocalPort 44300 -State Listen -ErrorAction SilentlyContinue

Остановка — через Stop в Visual Studio, не произвольный taskkill.


Рецепты: Steam / лаунчеры (игровые порты)

Игровые клиенты тоже открывают порты. Перед обвинением node проверьте:

Get-NetTCPConnection -State Listen | Sort-Object LocalPort | Format-Table

Ищите PID → имя процесса.


Рецепты: принтеры и сканеры (редкий конфликт)

Служба спулера:

Get-Service Spooler

Обычно не связана с портом 3000; упоминаем, чтобы не путать с dev.


Рецепты: Bluetooth / Wi‑Fi Direct

При «нет сети» для npm install:

Get-NetAdapter | Where-Object Status -eq 'Up'
nmcli device status

Рецепты: USB-тетеринг телефона

Проверка шлюза:

ip route | head -5
Get-NetRoute -DestinationPrefix '0.0.0.0/0'

Рецепты: LDAP / корпоративный домен (кратко)

whoami /user
gpresult /r

Проблемы с proxy и сертификатами часто корпоративные — к IT, не к taskkill.


Рецепты: WSL — диск D: в /mnt

ls /mnt/d/sandboxes/purple-llama
cd /mnt/d/sandboxes/purple-llama
npm install

Медленный npm на /mnt/c — по возможности держите проект в файловой системе WSL (~/src/...).


Рецепты: Git LFS

git lfs install
git lfs pull
git lfs ls-files

Рецепты: submodules

git submodule update --init --recursive
git submodule status

Рецепты: pre-commit / husky

pre-commit run --all-files
npx husky install

Падение на хуке — читать вывод хука, не отключать без причины.


Рецепты: Makefile

make help
make test
make -n install

-n — dry-run (показать команды без выполнения).


Рецепты: just, task, mage

just --list
task --list

Альтернативы Make — смотрите README проекта.


Рецепты: Terraform local

terraform init
terraform plan
lsof -i :45679

LocalStack и эмуляторы AWS занимают свои порты.


Рецепты: AWS CLI профиль

aws sts get-caller-identity
aws configure list

Рецепты: Azure CLI

az account show
az login

Рецепты: gcloud

gcloud auth list
gcloud config list

Рецепты: Vercel / Netlify CLI

vercel dev
netlify dev

Локальные порты смотрите в выводе CLI.


Рецепты: Storybook

npm run storybook
lsof -i :6006

Порт 6006 по умолчанию у Storybook.


Рецепты: Playwright / Cypress

npx playwright test
npx cypress open

Падение E2E — проверить, что dev-сервер уже слушает PORT из конфига.


Рецепты: Jest / Vitest watch

Watch держит терминал. Остановка — q в интерактивном режиме или Ctrl+C.


Рецепты: ESLint / Prettier один файл

npx eslint src/widgets/fluffy.ts
npx prettier --write src/widgets/fluffy.ts

Рецепты: TypeScript компилятор

npx tsc --noEmit
npx tsc -p tsconfig.json --listFilesOnly | head

Рецепты: SWC / esbuild зависли

Get-Process esbuild -ErrorAction SilentlyContinue | Stop-Process -Force

Только если CommandLine указывает на ваш проект.


Рецепты: Prisma migrate

npx prisma migrate dev
npx prisma studio

Studio часто 5555 — проверьте lsof.


Рецепты: Supabase local

supabase status
supabase stop

Рецепты: Firebase emulator

firebase emulators:start

Порты в firebase.json.


Рецепты: Mailhog / Mailpit (почта dev)

curl -sS http://localhost:8025

Типичные порты 1025 (SMTP), 8025 (UI).


Рецепты: MinIO S3 local

curl -sS http://localhost:9000/minio/health/live

Рецепты: Temporal / Kafka UI (порты из доки)

Всегда ss / docker ps — номера из README стека, не угадывать.


Итоговая шпаргалка на одной странице (текст)

  1. Портnetstat / ss / Get-NetTCPConnection → PID.
  2. PIDtasklist / ps / CIM CommandLine.
  3. Свой? → Ctrl+C или kill / docker stop.
  4. Не свой? → другой PORT или остановить правильный сервис.
  5. Проверкаcurl -I http://127.0.0.1:PORT.
  6. Снова dev → из корня проекта, одно окно терминала.

Полная теория терминала — раздел 2.05. Опасные команды — стоп-лист.


Смежные материалы

Задача Куда
Git: ветки, merge, откат Git — шпаргалка
Bash, grep, find Bash — однострочники
HTTP из консоли curl / fetch
Compose-стеки Docker Compose
Prometheus/Grafana порты практикум usage
500+ утилит Справочник CLI

Что попробовать самому

  1. Запустите npm run dev в WIN_ROOT, найдите PID через PowerShell, завершите через kill, убедитесь, что порт свободен.
  2. Поднимите контейнер на 3000, найдите его через docker ps, остановите docker stop.
  3. Сымитируйте «нет места»: du -sh в каталоге проекта, очистите node_modules в копии репозитория.
  4. Сравните вывод curl -I и браузера для health.

В подборках

Материал дополняет Терминал — о разделе и локальный dev-сервер.