CLI — типовые сценарии (порты, процессы, dev-сервер)
Галерея готовых команд под повседневную разработку и администрирование на своём ПК: не «выучить терминал целиком», а найти сценарий → скопировать → подставить свои числа (порт, PID, путь).
Сюда же попадают цепочки, которые часто запускают ИИ-агенты (Cursor, Copilot CLI и др.): диагностика порта, поиск процесса по командной строке, очистка кэша, проверка localhost.
Теория: Windows, Linux, знаки | и >. Соседние рецепты: Bash 1151, Git 1123, curl 1133.
Сначала смотрите 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-сервер — порядок при «порт занят»
- Кто слушает порт / Unix / Docker → записать PID или имя контейнера.
- CommandLine → это ваш
npm run dev, а не PostgreSQL или чужой IDE? - Ctrl+C в исходном терминале (советы).
- taskkill / kill по PID или
docker stop. - Из корня
WIN_ROOT: снова команда из README. - Кэш:
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
Полная шпаргалка — 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
Типовые ошибки — что делать
| Ошибка / симптом | Первая команда | Раздел |
|---|---|---|
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
- Есть PID из
netstat,ssилиGet-NetTCPConnection? - Прочитали CommandLine — это ваш
PROJECT, а неpostgres/com.docker? - Пробовали Ctrl+C в терминале запуска?
- Для Node — фильтр по пути проекта, не «все node.exe»?
- На Windows — не трогали
svchost,System,lsass? - После 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
Приложение 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"
Подробнее — 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 (пошагово)
Get-NetTCPConnection -State Listen | Where-Object { $_.OwningProcess -ne 0 }— список PID.- Для каждого PID с
node/esbuild—CommandLineчерез CIM. - Отметить PID, где путь не содержит ваш
WIN_ROOT. - Завершить только отмеченные ваши PID через
Stop-Process. netstat -ano | findstr :3000— пусто?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
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)
| Шаг | Действие |
|---|---|
| 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 → ps → kill.
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)
Ещё 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 стека, не угадывать.
Итоговая шпаргалка на одной странице (текст)
- Порт →
netstat/ss/Get-NetTCPConnection→ PID. - PID →
tasklist/ps/ CIM CommandLine. - Свой? → Ctrl+C или kill / docker stop.
- Не свой? → другой PORT или остановить правильный сервис.
- Проверка →
curl -I http://127.0.0.1:PORT. - Снова dev → из корня проекта, одно окно терминала.
Полная теория терминала — раздел 2.05. Опасные команды — стоп-лист.
Смежные материалы
| Задача | Куда |
|---|---|
| Git: ветки, merge, откат | Git — шпаргалка |
| Bash, grep, find | Bash — однострочники |
| HTTP из консоли | curl / fetch |
| Compose-стеки | Docker Compose |
| Prometheus/Grafana порты | практикум usage |
| 500+ утилит | Справочник CLI |
Что попробовать самому
- Запустите
npm run devвWIN_ROOT, найдите PID через PowerShell, завершите через kill, убедитесь, что порт свободен. - Поднимите контейнер на 3000, найдите его через docker ps, остановите
docker stop. - Сымитируйте «нет места»:
du -shв каталоге проекта, очиститеnode_modulesв копии репозитория. - Сравните вывод
curl -Iи браузера для health.
В подборках
Материал дополняет Терминал — о разделе и локальный dev-сервер.