Перейти к основному содержимому

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

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

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

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

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

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


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

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

ПлейсхолдерПример значенияЗамените на
PROJECTmoonlit-apiимя папки репозитория
WIN_ROOTC:\Users\zephyr\Projects\moonlit-apiваш путь в Windows
WSL_ROOT/home/zephyr/src/moonlit-apiпуть в WSL
MAC_ROOT/Users/zephyr/dev/purple-llamaпуть на macOS
PORT_WEB3000порт фронта / SSR
PORT_VITE5173Vite по умолчанию
PORT_API8080Spring, Go, PHP built-in
PID_X32088число из netstat / ss

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

Порты и сеть

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

Процессы

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

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

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

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

СитуацияРаздел
PostgreSQL / MySQL / Redis / MongoЛокальные БД
Git «застрял»Git из CLI
Место на дискеДиск и кэши
PATH — команда не найденаPATH
Службы WindowsСлужбы
systemd на Linuxsystemd
Хвост логовЛоги 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-портов (часто встречаются в учебных проектах):

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

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
Vite5173vite
Next.js3000next dev
Create React App3000react-scripts start
Webpack dev8080 / из конфигаwebpack serve
Astro4321astro dev
Angular4200ng 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

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

СервисПортПроверка
PostgreSQL5432ss -tlnp | grep 5432
MySQL3306Get-NetTCPConnection -LocalPort 3306
Redis6379redis-cli ping
MongoDB27017mongosh --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

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

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

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

Ошибка / симптомПервая командаРаздел
EADDRINUSEnetstat / Get-NetTCPConnectionпорты
command not foundGet-Command / whichPATH
EACCES permission deniedправа на файл / sudoправа
Cannot find modulenpm installNode
Port 3000 is already in useнайти PIDdev-flow
Docker: port allocateddocker psDocker
git index.lockзакрыть IDE, rm .git/index.lockGit
Страница белая, сервер молчитcurl -I localhost:PORThealth
WSL не открывается с Windowswsl hostname -IWSL
Диск полный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 — см. 104.

Нужен ли 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_ENVproduction / development
PORTмногие Node-серверы
HOST0.0.0.0 vs 127.0.0.1
DATABASE_URLPrisma, Rails, Django
HTTP_PROXYnpm, curl, git
JAVA_HOMEJDK для 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 — типовые порты (шпаргалка)

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

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

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"

Подробнее — 1133.


Приложение 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 — таблица «симптом → первая команда» (расширенная)

СимптомWindowsLinux/macOS
Сайт localhost не открываетсяcurl.exe -I http://127.0.0.1:PORTcurl -I http://127.0.0.1:PORT
Порт занятnetstat -ano | findstr :PORTss -tlnp | grep :PORT
Высокая CPUGet-Process | sort CPU -descps aux --sort=-%cpu
Нет местаGet-PSDrive Cdf -h
Git не пушитgit remote -v · ssh -T git@github.comто же
npm 404 registrynpm config get registryто же
SSL ошибка curlcurl -vk https://...то же
Docker не стартуетwsl -l -v · перезапуск Docker Desktopsystemctl status docker
БД connection refusedTest-NetConnection localhost -Port 5432nc -zv localhost 5432
Два IP на localhostпроверить 127.0.0.1 vs localhost IPv6ping -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‑FiGUI сети
Антивирусная карантинUI защитника
Форматирование дискаосознанный мастер, не format из чата

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


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

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

Windows CMD

netstat -ano | findstr :3000
netstat -ano | findstr LISTENING
tasklist /FI "PID eq 32088"
taskkill /PID 32088 /T /F
taskkill /IM node.exe /F
where node
where git
cd /d C:\Users\zephyr\Projects\moonlit-api
dir /s /b *.log
type logs\app.log
findstr /I error logs\app.log
ping -n 3 127.0.0.1
curl.exe -I http://localhost:3000
ipconfig /all
arp -a
route print
hostname
whoami
systeminfo
schtasks /query /fo LIST
sc query type= service state= all

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

ss -tlnp | grep :3000
lsof -i :3000
ps -p 32088 -o pid,cmd
kill 32088
pkill -f vite
pgrep -af node
curl -I http://localhost:3000
dig +short example.com
nc -zv localhost 3000
df -h
du -sh .
find . -name '*.ts' -mtime -1
grep -RIn TODO src/
tail -f logs/app.log
tar -czf /tmp/backup.tgz .
chmod +x script.sh

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)

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

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

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

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

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

4. Docker занял 3000

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

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

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

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

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

7. command not found: node

ШагДействие
1where node / which node
2Переустановить Node LTS или winget install OpenJS.NodeJS.LTS
3Новое окно терминала
4node -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
2wsl hostname -I
3Пробовать IP в браузере
4Обновить WSL2

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

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

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

ШагДействие
1Проверить proxy: npm config get proxy
2npm 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ждёт подключений
32088PID

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=32088PID

Get-NetTCPConnection

СвойствоСмысл
LocalPortпорт на вашей машине
OwningProcessPID
StateListen для серверов
LocalAddress0.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

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

ИнструментОСПлюсМинус
netstatWin/Linuxвездеустаревающий стиль
Get-NetTCPConnectionWindowsобъектная модель PSнужен PowerShell
ssLinuxбыстрыйбез root имя иногда скрыто
lsofUnixнагляднонужен install на некоторых Linux
docker psкроссвидит контейнерыне видит «голый» node на хосте
Resource MonitorWindowsGUI, кто держит файлручной труд

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

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


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


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

#ПроблемаКоманда-подсказка
1Узнать IP ПКipconfig / hostname -I
2Очистить терминалcls / clear
3Предыдущая командастрелка ↑ / Get-History
4Прервать командуCtrl+C
5Завершить сессию SSHexit
6Проверить 443Test-NetConnection host -Port 443
7Список дисковwmic logicaldisk / lsblk
8Время системыdate / Get-Date
9Перезагрузкаshutdown /r /t 0 (осторожно)
10Список пользователейwhoami / id
11Открыть папку в Explorerexplorer .
12Открыть папку в Finderopen .
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 (осторожно)
18JVM портjps -lv
19Maven зависmvn -X
20Gradle daemon./gradlew --stop
21Pip зависаетpip install -v package
22Poetrypoetry run uvicorn ...
23Conda envconda activate moonlit
24nvm версияnvm use 20
25fnmfnm use 20
26Брандмауэр WinGet-NetFirewallRule (много вывода)
27Linux ufw allowsudo ufw allow 3000/tcp
28journal OOMdmesg | grep -i kill
29Windows OOMEvent Viewer
30Проверить MIMEcurl -I заголовок Content-Type

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

ТерминПростыми словами
PIDНомер процесса в ОС
PPIDPID родительского процесса
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, findBash — однострочники
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-сервер.

Содержание
Освоение главы0%