Linux && Windows
- Установка веб-серверов Nginx и Apache.
- Windows Ubuntu WSL
- Установка Ubuntu через WSL под Windows.
- Создание пользователя - администратора
- Что такое WSL
- Настройка Git в WSL-Ubuntu && Windows
- Установка MinIO
- Настройка VPN через туннель к VPS
- Настройка SSH для VPS (Windows && Linux-WPS)
- Работа с MS Vs Code
- Работа с AI
- Windows: чистка системного диска
- Windows: установка системного времени
Установка веб-серверов Nginx и Apache.
Итоговая архитектура для разработки предполагается такая:
Internet
↓
┌─────────────────────┐
│ Nginx │ ← порт 8081 (вход)
└─────────────────────┘
↓ ↓
WordPress .NET apps (опционально)
(Apache) (Kestrel)
↓
MariaDB
PostgreSQL
🥇 Роли компонентов
🌐 Nginx (front door)
- SSL (HTTPS)
- маршрутизация
- защита
- статика
🟦 Apache (только WordPress)
Apache HTTP Server
- PHP обработка
- WordPress
- .htaccess
🚀 ШАГ 1 — установка пакетов
В Ubuntu:
sudo apt install -y nginx
sudo apt install -y apache2
sudo apt install -y mariadb-server
sudo apt install -y postgresql
⚙️ ШАГ 2 — порты (ВАЖНО)
Apache уводим с 80:
Примерное содержимое:
Listen 8082
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
И в site config:
Примерное содержимое с учетом проекта на wordpress:
<VirtualHost *:8082>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
Alias /portfolio /mnt/d/Soft/Freelance/Wordpress/portfolio/site
<Directory /mnt/d/Soft/Freelance/Wordpress/portfolio/site>
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Устанавливаем
Эта установка запустит триггеры, один из которых запустит Apache, теперь он будет на правильном порту, если запуска Apache не произойдет, перезапустим его вручную:
🌐 ШАГ 3 — WordPress (Apache backend)
Документа root:
ШАГ 4 — включить mod_rewrite (нужно для WordPress)
ШАГ 5 — права доступа (очень важно в WSL)
Иногда Apache не может читать Windows-диск:
База:
GRANT ALL PRIVILEGES ON *.* TO 'dev'@'%';
FLUSH PRIVILEGES;
🟨 ШАГ 6 — MariaDB
sudo systemctl start mariadb
Проброс порта 3306 наружу (в windows)
🧠 Что это за файл
fix-mysql-port.ps1 — это PowerShell-скрипт, который:
- берёт актуальный IP WSL
- пересоздаёт проброс порта 3307 → 3306
- чтобы не зависеть от смены IP
🥇 ГДЕ СОЗДАТЬ
Создай его в любом удобном месте, например:
👉 главное — чтобы путь был простой
🧪 КАК СОЗДАТЬ
- Откройте Блокнот или VS Code
- Вставьте код:
$ip = (wsl hostname -I).Trim()
netsh interface portproxy delete v4tov4 listenport=3307 listenaddress=127.0.0.1 2>$null
netsh interface portproxy add v4tov4 `
listenport=3307 listenaddress=127.0.0.1 `
connectport=3306 connectaddress=$ip
Write-Host "WSL MariaDB → localhost:3307 → $ip"
- Сохраните как:
🚀 КОГДА ЕГО ЗАПУСКАТЬ
✔ Вручную (пока проще всего)
Каждый раз:
- после перезапуска WSL
- после перезагрузки Windows
- если не работает порт 3307
👉 запуск:
Откройте PowerShell:
🧠 ПОЧЕМУ ЭТО НУЖНО
WSL меняет IP:
👉 поэтому static portproxy НЕ работает стабильно
🧪 КАК ПРОВЕРИТЬ ЧТО ВСЁ ОК
После запуска скрипта:
Должно быть:
🧠 ВАЖНО (частая ошибка)
❌ НЕ подключайтесь в DBeaver к WSL IP
✔ всегда используйте:
🟪 ШАГ 7 — PostgreSQL
sudo systemctl start postgresql
Зайдите через системного пользователя:
Потом:
И сразу:
(введите новый пароль вручную дважды)
Выйти:
✅ Проверить в WSL
Выполните:
Что должно быть хорошо:
или
Если плохо:
или
Тогда внешний доступ из Windows через portproxy не работает.
🥇 Как исправить
1. Открыть конфиг PostgreSQL
Найдите:
Замените на:
2. Разрешить подключение
Откройте:
Добавьте строку:
(если у вас в Windows есть уже запущенный Postgres и у него адрес именно такой)
3. Перезапустить PostgreSQL
🥇 Потом проверить снова
Проброс порта:
По аналогии с mySql нужно внести изменения в файл start-dev-db.ps1
$ip = (wsl hostname -I).Trim()
# Удаляем старые правила (на всякий случай чистим и 127.0.0.1, и 0.0.0.0)
netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=3307
netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=5433
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=3307
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=5433
# Создаем новые правила с listenaddress=0.0.0.0
netsh interface portproxy add v4tov4 `
listenport=3307 listenaddress=0.0.0.0 `
connectport=3306 connectaddress=$ip
netsh interface portproxy add v4tov4 `
listenport=5433 listenaddress=0.0.0.0 `
connectport=5432 connectaddress=$ip
Write-Host ""
Write-Host "Portproxy rules:"
netsh interface portproxy show all
Write-Host ""
Write-Host "Ready:"
Write-Host "MariaDB -> 0.0.0.0:3307"
Write-Host "PostgreSQL -> 0.0.0.0:5433"
🌐 ШАГ 8 — Nginx (главный вход)
Конфиг:
📌 Конфигурация
Примерное содержимое файла:
server {
listen 8081 default_server;
listen [::]:8081 default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
proxy_pass http://127.0.0.1:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Перезапуск Nginx:
Windows Ubuntu WSL
Установка Ubuntu через WSL под Windows.
Речь про WSL и дистрибутив Ubuntu.
🧱 ЧАСТЬ 1 — УСТАНОВКА WSL (правильно с нуля)
1. Установить WSL
Откройте PowerShell от администратора:
wsl --install
👉 Это:
-
включает WSL
-
включает WSL2
-
устанавливает Ubuntu (по умолчанию)
2. Перезагрузка
После установки:
👉 обязательно перезагрузи ПК
3. Проверка
wsl -l -v
Ожидаемо:
Ubuntu Stopped 2
4. Первый запуск Ubuntu
Запусти:
wsl -d Ubuntu
или через меню Пуск
👉 создаёшь:
-
username
-
password
5. Обновление системы
sudo apt update
sudo apt upgrade -y
⚙️ ЧАСТЬ 2 — ПОДГОТОВКА К ПЕРЕНОСУ НА D:
⚠️ Важно:
По умолчанию Ubuntu хранится на диске C:
Путь выглядит так:
C:\Users\<USER>\AppData\Local\Packages\...\LocalState\
🚚 ЧАСТЬ 3 — ПЕРЕНОС WSL НА ДИСК D (ПРАВИЛЬНЫЙ СПОСОБ)
1. Остановить WSL
wsl --shutdown
2. Экспорт Ubuntu (создание бэкапа)
wsl --export Ubuntu D:\wsl\ubuntu.tar
👉 создаётся резервная копия всей системы
3. Удаление старой Ubuntu из WSL
wsl --unregister Ubuntu
⚠️ Это удаляет привязку к старому ext4.vhdx
4. Импорт Ubuntu на диск D
wsl --import Ubuntu D:\wsl\Ubuntu D:\wsl\ubuntu.tar --version 2
👉 теперь система живёт на D:
5. Проверка
wsl -l -v
📍 ЧАСТЬ 4 — ПРОВЕРКА ПУТИ
Проверьте, где реально хранится система:
Get-ItemProperty HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\* |
Select DistributionName, BasePath
👉 должно быть:
D:\wsl\Ubuntu\
🧹 ЧАСТЬ 5 — УДАЛЕНИЕ СЛЕДОВ НА C:
После успешного переноса:
Можно удалить:
C:\Users\<USER>\AppData\Local\Packages\...\LocalState\
(если осталась)
Также удалить архив:
D:\wsl\ubuntu.tar
(если перенос завершён успешно)
🧠 ЧАСТЬ 6 — ЧТО В ИТОГЕ ПОЛУЧАЕТЕ
Было:
-
Ubuntu на C ❌
-
диск быстро забивается
Стало:
-
Ubuntu на D ✅
-
C освобождён
-
можно ставить:
-
nginx
-
MariaDB
-
PostgreSQL
-
GitLab
-
.NET
-
🚀 ЧАСТЬ 7 — РЕКОМЕНДАЦИИ (ВАЖНО)
После переноса:
включите systemd (для сервера):
sudo nano /etc/wsl.conf
Добавьте:
[boot]
systemd=true
Потом:
wsl --shutdown
Дополнительные сведения.
WSL запускается в окне Power Shell, после запуска вы попадаете в терминал, выйти из терминала можно через команду exit при этом WSL останется работающим, если же окно Power Shell закрыть, то WSL будет остановлен.
Если в системе есть еще установленные дистрибутивы WSL, то дистрибутив Ubuntu может оказаться не основным по умолчанию и команда
wsl -l -v
может выдать примерно следующее:
NAME STATE VERSION
*docker-desktop Stopped 2
Ubuntu Stopped 2
docker-desktop-data Stopped 2
Чтобы сделать Ubuntu основным дистрибутивом по умолчанию выполните следующую команду:
wsl --set-default Ubuntu
В разных окнах Power Sell можно несколько раз выполнить команду wsl но среда WSL будет запущена только один раз, все остальные команды откроют терминалы к этой среде.
❌ Остановка WSL
👉 тогда:
- ВСЕ процессы останавливаются
- WSL полностью выгружается
🎯 ИТОГ
✔ WSL ставится через wsl --install
✔ Ubuntu создаётся на C по умолчанию
✔ перенос делается через:
-
export -
unregister -
import
✔ после этого ext4.vhdx на C больше не нужен
Создание пользователя - администратора
Текущая работа от root в WSL неудобна и рискованна. Лучше создать обычного пользователя devadmin, дать ему sudo-права и перевести dev-среду на него. Создать пользователя admin не получится, так как уже есть группа с таким названием.
🏆 Что важно понять заранее
Не все сервисы нужно “переводить” на пользователя devadmin.
Системные сервисы уже работают правильно:
-
nginx → пользователь
www-data -
Apache HTTP Server →
www-data -
MariaDB →
mysql -
PostgreSQL →
postgres
Это нормально и менять не надо.
Что реально перевести на admin
✔ вход в WSL
✔ твои проекты
✔ MinIO
✔ dotnet run / build / git / npm
✔ домашние папки
🥇 План действий
1. Создать devadmin
2. Дать sudo
3. Сделать default user
4. Перенести dev-файлы
5. MinIO запускать от admin
6. root оставить только для администрирования
🥇 ШАГ 1 — создать пользователя
Сейчас все работает под root, это удобно.
adduser devadmin
Задайте пароль.
🏆 ШАГ 2 — дать sudo права
Проверить:
Должно быть:
🏆 ШАГ 3 — проверить домашнюю папку
Должно появиться:
devadmin
🏆 ШАГ 4 — сделать default user для WSL
В Windows PowerShell:
🏆 ШАГ 5 — проверить
Закройте WSL и снова откройте:
Потом:
Должно быть:
🏆 ШАГ 6 — дать доступ к проектам
Если проекты лежат в:
или на D: — отдельно настроим.
Создайте dev-папки:
mkdir -p /home/devadmin/services
mkdir -p /home/devadmin/backups
🏆 ШАГ 7 — MinIO перевести на devadmin
Когда пользователь будет создан:
sudo mkdir -p /home/devadmin/minio-config
sudo chown -R devadmin:devadmin /home/devadmin/minio-data
sudo chown -R devadmin:devadmin /home/devadmin/minio-config
🧠 Что с nginx/apache/db
Оставляем как есть:
apache -> www-data
MariaDB -> mysql
Postgres -> postgres
Это правильно.
Что такое WSL
WSL (Windows Subsystem for Linux) — это подсистема Linux внутри Windows, которая позволяет запускать полноценное Linux-окружение без отдельной виртуальной машины.
Что даёт WSL
Linux-команды
Можно выполнять:
ls
grep
find
ssh
curl
как на обычном сервере Ubuntu.
Разработка как на сервере
Если ваш хостинг работает на Ubuntu, то WSL очень удобен:
Продакшен: Ubuntu
Разработка: Ubuntu (WSL)
Меньше различий между средами.
Docker
Большинство разработчиков под Windows используют Docker через WSL.
.NET
Можно поставить Linux-версию SDK:
dotnet --version
и собирать проект так же, как на сервере.
React / Node.js
Обычно работают быстрее и стабильнее в WSL, чем в некоторых конфигурациях Windows.
Как это устроено
В современных версиях используется лёгкая виртуализация.
У WSL есть собственная сеть:
Windows
172.31.32.1
WSL
172.31.xx.xx
Именно поэтому вы можете видеть:
cat /etc/resolv.conf
nameserver 172.31.32.1
Это адрес Windows, который виден из WSL.
Чем WSL отличается от виртуальной машины
Виртуальная машина
Например, через Oracle VM VirtualBox или VMware Workstation:
Windows
└─ Полноценная VM
└─ Ubuntu
Плюсы:
-
полная изоляция
Минусы:
-
больше памяти
-
больше диска
-
медленнее старт
WSL
Windows
└─ Ubuntu
Плюсы:
-
быстрый запуск
-
меньше ресурсов
-
интеграция с Windows
Почему VS Code любит WSL
Когда открываете проект через:
Remote - WSL
VS Code устанавливает внутри Linux свой сервер:
~/.vscode-server
Поэтому вы видели каталоги вроде:
~/.vscode-server/data/logs
Именно там лежат логи Copilot и Continue.
Настройка Git в WSL-Ubuntu && Windows
Зайдите в папку проекта.
Проверка версии Git
Чтобы узнать, какая версия Git установлена в Ubuntu:
git --version
(Если нужно обновить Git до актуальной версии в Ubuntu: sudo apt update && sudo apt install git -y).
Проверить, установлена ли утилита GitHub CLI (gh) в вашей системе (в WSL Ubuntu, PowerShell на Windows или Linux), можно с помощью любой из следующих команд:
Проверка версии (Самый простой способ)
Выполните в терминале:
gh --version
-
Если
ghустановлен: Вы увидите версию утилиты и архитектуру, например:gh version 2.52.0 (2024-06-20) -
Если
ghНЕ установлен:-
В WSL / Ubuntu вы получите сообщение:
Command 'gh' not found... -
В Windows PowerShell вы получите ошибку:
gh : Имя "gh" не распознано как имя командлета...
-
Проверка пути к исполняемому файлу
-
В WSL / Ubuntu / Linux:
which gh(Если установлен, вернет путь вида
/usr/bin/ghили/usr/local/bin/gh). -
В Windows PowerShell:
Get-Command gh
Как быстро установить gh, если его нет:
В WSL / Ubuntu:
sudo apt update && sudo apt install gh -y
В Windows (через winget в PowerShell):
winget install --id GitHub.cli
Перед началом работы с репозиторием в GitHub вам нужно к нему подключиться с помощью команды
gh auth login
Далее последует небольшой диалог, в приведенном примере я использую ключ GitHub для авторизации:
gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations on this host? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Paste an authentication token
Tip: you can generate a Personal Access Token here https://github.com/settings/tokens
The minimum required scopes are 'repo', 'read:org', 'workflow'.
? Paste your authentication token: **************************************************
- gh config set -h github.com git_protocol https
✓ Configured git protocol
! Authentication credentials saved in plain text
✓ Logged in as YourGitLogin
Чтобы склонировать репозиторий с GitHub со всеми ветками и полной историей, достаточно выполнить стандартную команду git clone:
git clone git@github.com:username/repository.git
(Или через HTTPS / GitHub CLI, например: gh repo clone username/repository).
Вопреки распространенному заблуждению, стандартный git clone по умолчанию скачивает абсолютно ВСЕ ветки, теги и всю историю проекта.
Однако локально Git сразу создает текстовую указательную ветку только для главной (обычно main или master). Остальные ветки остаются в так называемом режиме отслеживания (remote-tracking branches).
Как увидеть все забранные ветки и работать с ними
1. Посмотреть список всех веток
Перейдите в папку проекта (cd repository) и выполните:
git branch -a
Вы увидите список:
* main
remotes/origin/HEAD -> origin/main
remotes/origin/main
remotes/origin/dev
remotes/origin/feature-login
Все ветки с префиксом remotes/origin/ уже находятся на вашем компьютере, их не нужно скачивать заново из интернета.
2. Как переключиться на нужную ветку
Чтобы начать работать с любой из локально загруженных веток (например, dev), просто переключитесь на нее:
git checkout dev
(В современных версиях Git также можно использовать git switch dev).
Git автоматически создаст локальную ветку dev, свяжет ее с origin/dev и переключит ваш рабочий каталог.
Если вам нужно гарантированно развернуть ЛОКАЛЬНЫЕ копии ВСЕХ веток сразу
Если ваша цель — не просто скачать проект, а сделать так, чтобы команда git branch (без флага -a) сразу показывала полный список всех веток как локальных, используйте короткий однострочник прямо в терминале:
В WSL / Ubuntu (Bash):
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
В Windows PowerShell:
git branch -r | Where-Object { $_ -notmatch '->' } | ForEach-Object {
$branch = $_.Trim().Replace('origin/', '')
git branch --track $branch $_.Trim()
}
git fetch --all
После выполнения этого скрипта каждая удаленная ветка превратится в полноценную локальную ветку.
Рекомендуемый файл .gitignore для проекта в связке с .NET и REACT:
# ==========================================
# .NET / C# (Правила сработают для любой подпапки)
# ==========================================
## --- Build & Output directories ---
bin/
obj/
out/
[Bb]in/
[Ob]j/
## --- Visual Studio & Rider temporary files ---
.vs/
.idea/
*.user
*.userosscache
*.sln.docstates
*.suo
*.userprefs
## --- NuGet Packages & Cache ---
*.nupkg
*.snupkg
**/packages/
project.lock.json
project.assets.json
## --- Local settings & Secrets ---
# Локальные пользовательские конфигурации (раскомментируйте, если не хотите коммитить appsettings.Development.json)
# appsettings.Development.json
# appsettings.*.local.json
secrets.json
## --- Test Results & Coverage ---
[Tt]est[Rr]esult*/
*.coverage
*.coveragexml
# ==========================================
# Node.js / Frontend (Vue, React и т.д.)
# ==========================================
node_modules/
dist/
.npm
*.log
# ==========================================
# Общие временные файлы ОС
# ==========================================
.DS_Store
Thumbs.db
Установка MinIO
Инструкция по установке под пользователем devadmin в WSL Ubuntu Windows с автозапуском через systemd.
🏆 Что получим
User: devadmin
Data: /home/devadmin/minio-data
Console: http://localhost:9001
API: http://localhost:9000
Autostart: yes
🥇 ШАГ 0 — зайти под devadmin
Проверьте:
whoami
Должно быть:
devadmin
Если нет:
su - devadmin
🥇 ШАГ 1 — скачать MinIO
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/
Проверка:
minio --version
🥇 ШАГ 2 — создать каталоги
mkdir -p /home/devadmin/minio-data
mkdir -p /home/devadmin/minio-config
🥇 ШАГ 3 — создать env файл
nano /home/devadmin/minio-config/minio.env
Вставьте:
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=StrongPass123!
MINIO_VOLUMES=/home/devadmin/minio-data
MINIO_OPTS=--console-address :9001
Сохраните.
Нужно иметь в виду, что
MINIO_ROOT_USER=admin
это пользователь-администратор внутри MinIO и к текущему пользователю devadmin отношения не имеет.
🥇 ШАГ 4 — создать systemd сервис
sudo nano /etc/systemd/system/minio.service
Вставьте:
[Unit]
Description=MinIO Object Storage
After=network.target
[Service]
User=devadmin
Group=devadmin
WorkingDirectory=/home/devadmin
Environment="MINIO_ROOT_USER=admin"
Environment="MINIO_ROOT_PASSWORD=StrongPass123!"
ExecStart=/usr/local/bin/minio server /home/devadmin/minio-data --console-address :9001
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
🥇 ШАГ 5 — включить автозапуск
sudo systemctl daemon-reload
sudo systemctl enable minio
sudo systemctl start minio
🥇 ШАГ 6 — проверить статус
sudo systemctl status minio
Должно быть:
active (running)
🥇 ШАГ 7 — открыть в Windows
Браузер:
http://localhost:9001
Логин:
admin
Пароль:
StrongPass123!
🥇 ШАГ 8 — создать bucket
В UI:
uploads
🧠 Если localhost не открывается
Проверь:
sudo ss -tulpn | grep 900
🏆 После этого можно использовать в .NET
Endpoint: http://localhost:9000
AccessKey: admin
SecretKey: StrongPass123!
Bucket: uploads
🥇 Важно
Если systemd ещё не включён:
sudo nano /etc/wsl.conf
Добавить:
[boot]
systemd=true
Затем из Windows:
wsl --shutdown
Настройка VPN через туннель к VPS
Окружение для настройки.
- Имеется VPS с выделенным IP где-то в Европе. Там стоит Linux, в моем случае это Ubuntu. Нужно иметь на сервер права администратора. Сервер должен принимать соединения по ssh.
- Машина с Windows 10 или 11.
- VPS должен быть виден через ваше интернет-соединение. В моем случае у меня было два интернет-подключения: через мобильное соединение VPS виден не был, через проводное соединение видимость была.
- Не должно быть работающих VPN-соединений.
Установка туннеля.
Нужно открыть windows PowerShell от лица администратора.
В windows PowerShell нужно подключиться к вашему VPS:
ssh -D 0.0.0.0:1080 -N root@[IP_your_vps]
Windows может попросить подтвердить использование туннеля.
Если у вас нет ключа доступа к VPS, то потребуется ввести пароль для root.
Сессия откроется, это окно PowerShell нужно оставить открытым, оно "зависнет", то есть через туннель пойдет обмен.
Откройте другое окно PowerShell с обычными правами. Проверка соединения:
curl.exe --proxy socks5h://127.0.0.1:1080 https://api.ipify.org
Команда должна показать IP вашего VPS.
В настройках Windows есть раздел "proxy" его можно использовать для включения обмена, но с оговорками. Нужно иметь в виду, что туннель открывается только для протокола socks, для протоколов http и https он не работает. В поле "Proxy IP address" нужно прописать
socks=127.0.0.1:1080
в поле для значения порта ничего быть не должно.
После того, как вы запишите эти настройки, они корректно пропишутся в реестр windows, но при редактировании оттуда будут взяты неверные значения. при повторной записи работа прокси сломается, ниже пример того, как интерпретирует эти настройки интерфейс windows:
для корректной настройки лучше пользоваться PowerShell, чтобы посмотреть настройки используйте команду
Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings'
для установки протокола socks:
Set-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' ProxyServer 'socks=127.0.0.1:1080'
Нужно иметь в виду, что с таким proxy в вашем случае будут работать только те приложения, которые используют протокол socks.
Не все приложения Windows используют системный SOCKS-прокси.
Например:
- браузеры обычно умеют
- некоторые программы используют WinINET/WinHTTP
- некоторые (включая часть Electron/Node-приложений) игнорируют системный SOCKS и требуют отдельной настройки
Для включения proxy используйте команду
Set-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' ProxyEnable 1
В обычном cmd.exe (или FAR например) аналог делается через reg add.
Включить прокси:
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
Отключить прокси:
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
Установить SOCKS-прокси:
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d "socks=127.0.0.1:1080" /f
Проверить текущие значения:
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer
После изменения реестра некоторые программы сразу подхватывают настройки, а некоторые — только после перезапуска. Чтобы уведомить Windows о смене настроек прокси без выхода из системы, можно выполнить:
RUNDLL32.EXE inetcpl.cpl,LaunchConnectionDialog
или просто перезапустить приложение (браузер, VS Code и т.п.).
Пояснения по открытию туннеля от ChatGPT.
Вопрос:
что конкретно делает эта команда ssh -D 0.0.0.0:1080 -N root@[IP_your_vps]
На вашем компьютере запускается локальный SOCKS5-прокси на порту 1080.
Все программы, которые используют этот SOCKS-прокси, будут выходить в интернет через VPS.
Схема:
Приложение
↓
SOCKS5 127.0.0.1:1080
↓
SSH-соединение
↓
VPS
↓
Интернет
Разбор параметров
ssh
Запускает SSH-клиент.
root@IP_VPS
Подключается к VPS:
Пользователь: root
Сервер: IP_VPS
Например:
ssh root@38.242.220.114
-D
Означает Dynamic Port Forwarding.
То есть SSH создаёт SOCKS-прокси.
Например:
-D 1080
создаёт:
SOCKS5 localhost:1080
Любая программа, умеющая SOCKS5, может его использовать.
0.0.0.0:1080
Очень важный момент.
Если написать:
-D 1080
или
-D 127.0.0.1:1080
то SOCKS будет доступен только на локальном интерфейсе Windows.
WSL обычно не сможет к нему подключиться напрямую.
Если написать:
-D 0.0.0.0:1080
то SSH слушает на всех интерфейсах:
127.0.0.1
LAN IP
WSL gateway
и т.д.
-N
Означает:
Не запускать shell на VPS
То есть:
❌ не открывать консоль Linux
✅ только держать туннель
Окно просто висит:
ssh -D ...
и прокси работает.
Что НЕ делает эта команда
Она НЕ создаёт полноценный VPN.
Не происходит автоматического перенаправления всего трафика.
Например в WSL:
curl https://api.ipify.org
по умолчанию всё ещё идёт напрямую.
А вот:
curl --proxy socks5h://172.31.32.1:1080 https://api.ipify.org
идёт через VPS.
Чем отличается от VPN
VPN:
Весь трафик
↓
VPN
↓
VPS
SSH SOCKS:
Только программы,
которые настроены на SOCKS
↓
VPS
Почему это удобно
Для связки:
Windows
└─ WSL
└─ VS Code
└─ Continue
достаточно настроить Continue, VS Code или переменные окружения на использование SOCKS.
Тогда:
- Continue
- OpenAI API
- Gemini API
- GitHub Copilot
будут работать через VPS,
а остальной интернет останется обычным.
Для дополнительной безопасности я бы рекомендовал использовать не root, а отдельного пользователя на VPS:
ssh -D 0.0.0.0:1080 -N devadmin@IP_VPS
Это не влияет на работу туннеля, но считается хорошей практикой администрирования.
Настройка SSH для VPS (Windows && Linux-WPS)
Настройка под Windows.
Для настройки соединения у вас обязательно должен быть файл с приватным ключом и желательно с публичным тоже. В моем примере я использую ключи в формате ED25519, которые приходят сейчас на смену ключам RSA. На VPS вы сгенирировали файлы с ключами, в моем случае они назывались id_ed25519 и id_ed25519.pub, лучше их переименовать в виде id_ed25519_myproxy и id_ed25519_myproxy,pub. Если у вас имеется несколько серверов с различными ключами, то названия файлов будут различаться и подключение будет управляться через файл config.
Положите файлы в папку C:\Users\[your_user_name]\.ssh\, в той же папке создайте файл config без расширения примерно с таким содержанием:
Host myproxy
HostName 11.22.33.44 # IP-адрес или домен вашего VPS
User root # Логин для подключения
IdentityFile ~/.ssh/id_ed25519_myproxy # Путь к файлу ключа
DynamicForward 0.0.0.0:1080
IdentitiesOnly yes
SessionType none
Port 22 # Порт (если меняли стандартный)
Строка DynamicForward 0.0.0.0:1080 это прямой аналог флага -D 0.0.0.0:1080 в файле конфигурации. Он включает локальный SOCKS5-прокси на порту 1080 для всех сетевых интерфейсов (0.0.0.0), строка SessionType none это директива RequestTTY no которая аналогична флагу -N и позволяет не выполнять команды на удаленном сервере, а только держать туннель.
Запуск туннеля на ваш сервер будет теперь выполняться одной командой:
ssh myproxy
Способ 1. Проверка через PowerShell (Windows) — Самый удобный
Get-NetTCPConnection -LocalPort 1080 -ErrorAction SilentlyContinue
-
Если порт открыт и прослушивается: Команда выведет таблицу с состоянием подключения (
State: Listen), а в колонкеOwningProcessбудет указан PID (идентификатор процесса, например, вашегоssh.exe). -
Если порт закрыт: Команда ничего не выведет (вернется пустая строка).
Способ 2. Классическая команда netstat (Windows CMD / PowerShell)
netstat -ano | findstr :1080
-
Ожидаемый результат (порт открыт):
PlaintextTCP 0.0.0.0:1080 0.0.0.0:0 LISTENING 1234(ЗначениеLISTENINGозначает, что SOCKS-туннель успешно поднят и ждет подключений, а1234в конце — это PID процесса SSH). -
Если порт закрыт: Вывод будет абсолютно пустым.
Способ 3. Проверка через терминал WSL (Linux)
# Через ss (современный аналог netstat)
ss -tulpn | grep 1080
# Или через классический netstat
netstat -tulpn | grep 1080
Способ 4. Экспресс-проверка подключения (Test-NetConnection)
Test-NetConnection -ComputerName 127.0.0.1 -Port 1080
-
TcpTestSucceeded : True— порт открыт и принимает соединения. -
TcpTestSucceeded : False— порт закрыт (SSH-туннель не запущен или упал).
Узнать, какая программа заняла порт:Если порт 1080 занят, но вы не уверены, чем именно, узнайте PID из командыnetstat(последнее число в строке) и выполните в PowerShell:PowerShellGet-Process -Id <PID>
Работа с MS Vs Code
Настройка, работа в Windows и Linux, подключение AI-агентов и плагинов.
Настройка VS Code для работы в WSL
WSL - это среда Linux под Windows подробнее о WSL.
Для стека Ubuntu-хостинг + .NET 10 + React + SSH-туннели VS Code через WSL обычно удобнее, чем запуск проекта напрямую в Windows.
1. Среда разработки совпадает с сервером
Если у вас продакшен на Ubuntu.
Когда VS Code открыт как:
WSL: Ubuntu
команды выполняются в Linux:
dotnet build
npm install
npm run dev
То есть почти в той же среде, что и сервер.
Меньше сюрпризов вида:
"На Windows работает, а на Ubuntu нет".
2. Лучше работает Node.js и React
Многие инструменты фронтенда изначально ориентированы на Linux/macOS.
Например:
-
Vite
-
Webpack
-
ESLint
-
npm
-
pnpm
обычно чувствуют себя в WSL стабильнее, чем при работе с проектом на диске Windows.
Особенно это заметно на больших проектах.
3. Нормальные Linux-инструменты
Сразу доступны:
grep
find
sed
awk
ssh
rsync
curl
Не нужно искать Windows-аналоги.
4. Удобнее работать с сервером
Если вы постоянно используете SSH к VPS.
В WSL можно:
ssh server
scp file
rsync project
без дополнительных утилит.
5. AI-инструменты работают рядом с кодом
Когда VS Code открыт в WSL:
VS Code
↓
VS Code Server (в WSL)
↓
Continue / Copilot
↓
Файлы проекта
AI видит проект напрямую в Linux-среде.
6. .NET ближе к реальному продакшену
Если сервер Ubuntu, то:
dotnet publish
в WSL собирает проект в Linux-окружении.
Легче ловить проблемы:
-
путей (
/против\) -
регистра файлов
-
прав доступа
-
конфигурации Linux
Когда лучше открывать через Windows
Есть случаи, когда удобнее работать напрямую из Windows:
-
WinForms
-
WPF
-
MAUI под Windows
-
COM-компоненты
-
специфичные Windows SDK
Но если у вас:
React
ASP.NET Core
Ubuntu
то WSL выглядит более естественным вариантом.
Важный момент
Если вы используете WSL, держите проект внутри Linux-файловой системы:
/home/devadmin/projects/myapp
а не в:
/mnt/c/Users/...
На небольших проектах разница может быть незаметна, но на React-проектах с большим количеством файлов производительность и скорость работы инструментов обычно лучше внутри файловой системы WSL.
Для работы в WSL вам нужно выполнить сначала установку VS Code под Windows, скачайте его с официального сайта по ссылке.
После запуска установленного VS Code вам нужно установить расширение WSL. Перейдите на вкладку расширений и в строке поиска наберите:
wsl
В результатах поиска найдите расширение с названием WSL и примерно таким описанием:
Open any folder in the Windows Subsystem for Linux (WSL) and take advantage of Visual Studio Code's full feature set.
Установите это расширение. После установки вы сможете работать с WSL. Для этого нужно сделать к нему подключение.
Нажмите Ctrl->Alt->O или кликните в нижнем левом углу по иконке "><",откроется Remote Menu, в нем выберите "Connect to WSL", после запуска будет загружен и запущен сервер VS Code в WSL, затем вы сможете работать в проводнике с папками в вашем WSL-хранилище.
Установка плагина Continue и настройка под ним AI-моделей.
-- Что ниже пока неизвестно, нужно или нет --
Откройте:
nano ~/.bashrc
добавьте в конец:
export ALL_PROXY=socks5://172.31.32.1:1080
export HTTP_PROXY=socks5://172.31.32.1:1080
export HTTPS_PROXY=socks5://172.31.32.1:1080
Сохраните:
Ctrl+O
Enter
Ctrl+X
Применить:
source ~/.bashrc
Для VS Code Remote WSL
В settings.json:
{
"http.proxy": "socks5://172.31.32.1:1080",
"http.proxySupport": "override",
"http.proxyStrictSSL": false
}
После этого:
- Continue
- Copilot
- npm
- dotnet restore
- git clone
- curl
из WSL будут идти через VPS.
Ваша итоговая схема теперь:
Windows
|
| SSH -D 0.0.0.0:1080
|
v
VPS (38.242.221.111)
|
v
Internet
WSL
|
v
172.31.32.1:1080
Работа с AI
Аккаунт DeepSeek
На момент написания этой статьи DeepSeek требует регистрации даже для использования бесплатного чата в веб-интерфейсе. В статье рассматривается работа с API DeepSeek. Ссылка на страницу:
Если у вас есть аккаунт, то укажите логин и пароль, если аккаунта нет, его нужно создать.
Для использования API DeepSeek вам нужно создать как минимум один ключ. Перейдите на страницу API Keys и создайте ключ. Для ключа нужно указать название. После создания ключа вам будет показано окно со значением ключа, ключ нужно скопировать в надежное место, после закрытия окна ключ вы больше увидеть не сможете.
Я не рассматриваю в этой статье использование бесплатных моделей, поэтому для работы с платными вам нужно пополнить баланс. Если у вас есть банковская карта, выпущенная не в России, то баланс вы можете пополнить обычным способом. Если вы из России, то можно использовать платежные сервисы. Я не рекомендую никакие платежные сервисы, вы можете просмотреть их например вот здесь
и выбрать, какой вам понравится.
DeepSeek для API использует протоколы OpenAI/Anthropic, пока мной проверен только OpenAI.
Самый простой способ - использовать переменные окружения.
Настройка переменных окружения
Для Windows (CMD):
set DEEPSEEK_API_KEY=ваш_ключ_здесь set OPENAI_API_BASE=https://api.deepseek.com/v1
Для Windows (PowerShell):
$env:DEEPSEEK_API_KEY="ваш_ключ_здесь" $env:OPENAI_API_BASE="https://api.deepseek.com/v1"
Для Linux/Mac:
bash
export DEEPSEEK_API_KEY="ваш_ключ_здесь"
export OPENAI_API_BASE="https://api.deepseek.com/v1"
В некоторых случаях ключ OPENAI_API_BASE не нужен, его наличие может внести путаницу при обращении к API моделей, которые могут работать одновременно с моделями DeepSeek, некоторые агенты для работы с AI моделями знают эти URL, поэтому попробуйте сначала устанавливать просто ключ DEEPSEEK_API_KEY.
У DeepSeek на момент написания этой статьи есть скидки на работу в часы off-peak, посмотрите актуальную информацию об этом в документации, сейчас она находится на странице
https://api-docs.deepseek.com/quick_start/pricing
Для экономии средств есть рекомендация писать промпты на английском языке, так как обработка английских букв примерно на 40% дешевле, чем, например, русских.
Работа с AIDER
Aider — это Open Source CLI-инструмент (консольная утилита), созданный специально для парного программирования с LLM прямо в вашем терминале.
В отличие от классических плагинов для VS Code, Aider спроектирован вокруг глубокой интеграции с Git и концепции Репозиторной карты (Repository Map).
Как устроено общение с моделью в Aider
Процесс взаимодействия с моделью в Aider строится по схеме «Чат \ Понимание контекста \ Правка файлов \ Git Commit»:
-
Контекст файлов (In-Chat Files):
Вы явно добавляете в чат файлы, которые модель должна редактировать или читать, с помощью команды
/add path/to/file.cs. Aider держит их содержимое в актуальном состоянии в окне контекста. -
Автоматическая карта репозитория (Repo Map):
Даже если вы добавили в чат всего один файл, Aider сканирует весь ваш Git-репозиторий с помощью парсеров
tree-sitter. Он строит компактную карту архитектуры: имена классов, методов, сигнатуры и их взаимосвязи по всему проекту. Эта карта автоматически передается модель в сжатом виде — нейросеть «знает» о существовании остальных сервисов и DTO, не перегружая контекстное окно лишним кодом. -
Специальный формат edits (Edit Formats):
Aider не заставляет модель переписывать 500 строк файла целиком. В зависимости от выбранной модели он заставляет её отвечать в формате
SEARCH/REPLACEблоков (показывает, какой кусок кода найти и на что заменить). Это резко снижает рассуждения и экономит токены. -
Автоматические Git-коммиты:
Как только модель присылает правки, Aider сам применяет их к файлам на диске и автоматически делает аккуратный
git commitс понятным описанием (например,git commit -m "Add UserDTO mapping"). Если результат вам не понравился, достаточно ввести/undo— и Aider откатит изменения.
Установка AIDER
pipx — это официальный и наиболее рекомендуемый способ, так как он изолирует зависимости Aider от системного Python и других пакетов в WSL/Linux.Описанные ниже действия проверялись мной в системе WSL.
Шаг 1. Установите pipx (если он еще не установлен)
sudo apt update
sudo apt install -y pipx
pipx ensurepath
pipx ensurepath может потребоваться перезапустить терминал или выполнить source ~/.bashrc, чтобы пути к бинарникам обновились).Шаг 2. Установите Aider
pipx install aider-chat
Шаг 3. Доустановите SOCKS и сетевые зависимости (Обязательно для OpenRouter / WSL)
Missing dependencies for SOCKS support при работе через OpenRouter или прокси, сразу внедрите сетевые пакеты в изолированное окружение Aider:pipx inject aider-chat PySocks requests[socks] urllib3
Шаг 4. Проверьте установку
aider --version
Полезные команды для обслуживания pipx в будущем
-
Обновить Aider до последней версии:
Bashpipx upgrade aider-chat -
Переустановить с нуля:Bash
pipx reinstall aider-chat
Настройки proxy.
Если вы находитесь в России, то большинство AI моделей не будет работать с вашим регионом, если к ним обращаться напрямую. Ниже описан рабочий вариант при открытом туннеле на внешний VPS для порта 1080, используются SOCKS. Как настроить туннель на внешний VPS описано здесь и здесь.
- Запустите туннель в отдельном окне терминала WSL на порту 1080
- Настройте переменные окружения для работы с proxy:
Если вы планируете постоянно использовать прокси, то можете прописать эти команды в файл ~/.bashrcexport ALL_PROXY=socks5h://127.0.0.1:[ваш порт SOCKS] export HTTP_PROXY=socks5h://127.0.0.1:[ваш порт SOCKS] export HTTPS_PROXY=socks5h://127.0.0.1:[ваш порт SOCKS]
Настройка AI моделей.
- weak-model - слабая / вспомогательная модель, используется для экономии денег и токенов
- editor-model - модель-редактор) отвечает за непосредственное применение изменений к файлам вашего проекта
- model - главная модель выполняет «тяжелую» умственную работу: пишет код, строит архитектуру и анализирует сложные взаимосвязи.
weak-model
weak-model (слабая / вспомогательная модель) используется для экономии денег и токенов.--model) выполняет «тяжелую» умственную работу: пишет код, строит архитектуру и анализирует сложные взаимосвязи. weak-model берет на себя рутинные служебные задачи, которые не требуют высокой экспертизы или сложного Reasoning.Основные функции weak-model:
-
Генерация сообщений для Git-коммитов (Commit Messages)
-
Когда Aider вносит изменения в файлы, он автоматически создает commit в вашем Git-репозитории.
-
weak-modelсмотрит наgit diffи формирует короткое понятное описание изменений (например:feat: add FluentValidation for LoginRequest).
-
-
Сжатие и саммаризация истории чата (Chat Summarization)
-
Когда диалог становится слишком длинным и подбирается к лимиту контекста, Aider автоматически сжимает старые сообщения.
-
weak-modelпересказывает старую часть переписки краткой выжимкой, чтобы освободить место для нового кода.
-
-
Оценка и фильтрация Repo Map (Карты репозитория)
-
При сборке дерева файлов проекта
weak-modelпомогает отсеивать нерелевантные куски кода, не перегружая контекст основной модели.
-
-
Простые вспомогательные проверки
-
Форматирование служебных ответов и обработка системных вызовов CLI.
-
Почему важно правильно настроить weak-model?
-
Экономия средств: Если ваша главная модель — дорогая (например, Claude 3.5 Sonnet или GPT-4o), использование её же для написания строчки
git commit— это пустая трата денег. -
Скорость: Легкие модели (вроде
gemini-2.0-flash,deepseek-chatилиox-alpha) генерируют коммиты и сжимают контекст за доли секунды, не заставляя вас ждать.
editor-model
editor-model (модель-редактор) отвечает за непосредственное применение изменений к файлам вашего проекта.--model) придумывает что и как изменить в коде, editor-model занимается рутинной «хирургической» работой — она берет предложенный код и аккуратно вставляет его в нужные места исходных файлов.Основные функции editor-model:
-
Форматирование diff'ов и замена кода (Editing / Search-Replace)
-
Модель принимает инструкции от главной модели и переводит их в точный формат правок Aider (обычно блоки
<<<<<<< SEARCH...=======...>>>>>>> REPLACE). -
Она находит нужные строки в файле и перезаписывает их, сохраняя форматирование, отступы и структуру вокруг.
-
-
Работа в режиме Architect (
/architect)
-
Это главный сценарий, где выделение
editor-modelраскрывает себя на 100%. -
В режиме Архитектора Main model (например,
deepseek-r1илиclaude-3-5-sonnet) выступает в роли «мозга»: пишет план, проектирует архитектуру и описывает изменения на верхнем уровне. -
Затем Editor model (более быстрая и дешевая модель) берет этот план и превращает его в реальные правки в файлах на диске.
-
-
Исправление ошибок синтаксиса при записи
-
Если при применении изменений произошел сбой (например, не совпал фрагмент кода для поиска),
editor-modelпытается скорректировать замену, чтобы не сломать файл.
-
Зачем разделять Main Model и Editor Model?
-
Экономия ресурсов и денег: Вы можете использовать супер-интеллектуальную (и дорогую) модель для рассуждений как Main Model, а для утилитарной задачи «найти строку X и заменить на Y» назначить гораздо более дешевую или бесплатную модель.
-
Повышение надежности: Не все «рассуждающие» модели (Reasoning Models, такие как
deepseek-r1) хорошо умеют строго следовать синтаксису блоков замены файлов Aider. Назначение отдельнойeditor-model(например,deepseek-chatилиgemini-2.0-flash) гарантирует, что файлы будут отредактированы без синтаксических сбоев.
model
--model) — это главный «мозг» Aider. Она отвечает за весь высокий интеллект, понимание логики проекта и принятие архитектурных решений.Основные функции основной модели:
-
Глубокий анализ и понимание кода
-
Разбирает структуру репозитория через карту
Repo Mapи контекст добавленных файлов. -
Находит взаимосвязи между классами, методами, контроллерами и базой данных.
-
Диагностирует баги, утечки памяти, проблемы с производительностью и уязвимости.
-
-
Проектирование и планирование (Reasoning & Architecture)
-
Составляет пошаговые планы рефакторинга и внедрения новых фич.
-
Принимает решения, какие именно файлы нужно изменить и какую архитектуру (SOLID, Clean Architecture и т.д.) использовать.
-
-
Генерация нового кода и алгоритмов
-
Пишет сложную бизнес-логику, запросы к БД, обработчики ошибок и тесты.
-
-
Управление другими моделями (в режиме
/architect)
-
Выступает в роли Senior-разработчика: формирует детальную инструкцию по правке файлов и передаёт её модели-редактору (
editor-model) для физического применения.
-
Сводная матрица всех трех ролей в Aider
| Роль | Главная задача | Важные качества | Пример модели |
Main Model (--model) |
Придумывает что и как делать, проектирует код. | Максимальный интеллект, логика (Reasoning), понимание контекста. | deepseek-chat (V3), deepseek-r1, claude-3-5-sonnet, gemini-2.0-flash |
Editor Model (--editor-model) |
Вставляет придуманный код в конкретные строки файлов. | Строгое следование формату SEARCH/REPLACE, точность. |
deepseek-chat, gemini-2.0-flash |
Weak Model (--weak-model) |
Пишет git commit, сжимает историю чата, фильтрует карту. |
Высокая скорость, минимальная стоимость / бесплатность. | gemini-2.0-flash-exp:free, ox-alpha |
Приведенные в таблице названия моделей могут быть неактуальны, лучше вам подобрать их самостоятельно, разобравшись со стоимостью.
Подключение моделей.
Ниже описан способ подключения моделей, который был мною протестирован. У каждой модели есть провайдер, одинаковые модели могут работать у разных провайдеров. Изначально я использовал провайдера OpenRouter, там у меня был небольшой баланс и он предлагал достаточно большой выбор моделей. Затем я немного изучил рынок и решил попробовать DeepSeek. DeepSeek был выбран потому что в России он работает без VPN и существуют вполне официальные способы пополнения баланса для аккаунтов на этой платформе, недорогие модели DeepSeek сопоставимы по эффективности с моделями флагманов индустрии.
Оба провайдера используют протокол обмена от OpenAI и aider не требует дополнительных настроек для его использования.
Подключение провайдеров производится через указание ключей в переменных окружения сессии:
export OPENROUTER_API_KEY="ваш_ключ_для_openrouter"
export DEEPSEEK_API_KEY="ваш_ключ_для_deepseek"
вы можете прописать эти команды в файл ~/.bashrc
Если вы определились с моделями и не собираетесь их менять в интерфейсе aider-a, то лучше запустить его сразу с указанием всех трех моделей
aider --model deepseek/deepseek-chat \
--editor-model openrouter/google/gemini-2.0-flash \
--weak-model openrouter/poolside/laguna-s-2.1:free
Модель openrouter/poolside/laguna-s-2.1:free бесплатная и на момент написания статьи работает, остальные модели даны для примера.
Работа с интерфейсом aider
После запуска приложения в терминале вы увидите символ приглашения ">", внутренние команды вводятся через слэш, например "/exit", после ввода слэша вам будет предложено выпадающее меню из доступных команд, после набора первых букв команды количество команд будет уменьшатся в соответствии с первыми введенными буквами.
Не забывайте для указания команды сначала вводить слэш. Если вы забудете это сделать, то текущая модель, получив эту команду, начнет фантазировать, что ей делать в соответствии с предыдущей историей сообщений в сессии и вы гарантированно просто потратите деньги и время на вывод чуши, которую она придумает.
Если вы сначала хотите провести анализ проекта, то лучше отключить модель для редактирования, это можно сделать двумя способами:
- команда /ask
- команда /editor-model none
Такое отключение я нахожу необходимым, потому что у меня не получалось дать команду главной модели просто сделать анализ и не делать правок, видимо это баг aider, сразу после анализа включается все равно редактирование и вы можете испортить проект, потратить деньги на редактирование и потом откатывать изменения в Git.
Основные режимы работы aider
Сравнительная таблица
| Характеристика | /ask (Запрос / Консультация) | /architect (Архитектор) | /code (Редактирование) |
| Редактирование файлов | ❌ Строго запрещено | ✅ Запрашивает подтверждение перед записью | ✅ Автоматически при согласии |
| Режим работы | Текстовый диалог (Read-only) | Двухэтапный (План $\rightarrow$ Правки) | Прямой (Код $\rightarrow$ Файлы) |
| Используемые модели | Только Main Model | Main Model + Editor Model | Main Model |
| Идеально для... | Аудита, поиска багов, вопросов по коду | Сложного рефакторинга, архитектурных фич | Точечных правок, быстрых багфиксов |
1. Режим /ask (Только чтение / Консультация)
Repo Map и добавленные файлы, но не генерирует инструкции редактирования (SEARCH/REPLACE).-
Что делает: Отвечает на вопросы, объясняет логику работы кода, проводит статический аудит и поиск ошибок.
-
Главный плюс: Абсолютная безопасность. Вы гарантированы от того, что модель случайно изменит или испортит код.
-
Пример использования:
Plaintext/ask Как устроена авторизация в этом проекте и где слабые места в защите?
2. Режим /architect (Проектирование + Применение)
-
Этап 1 (Планирование): Основная модель (
--model, например, DeepSeek-R1 или Claude 3.5 Sonnet) анализирует задачу, проводит глубокие рассуждения и пишет подробный текстовый план решения. -
Этап 2 (Реализация): Модель-редактор (
--editor-model, например, DeepSeek-Chat) берет предложенный план и переводит его в точечные блоки правок кода. -
Подтверждение: Aider показывает вам предложенный план и спрашивает: "Применить эти изменения в файлы?"
-
Главный плюс: Высокое качество кода при сложных задачах. Умная модель не отвлекается на синтаксис файлов, а модель-редактор гарантирует точное нанесение правок.
-
Пример использования:
Plaintext/architect Переведи авторизацию с JWT-токенов в localStorage на httpOnly Cookie с защитой от CSRF.
3. Режим /code (Стандартный / Прямое редактирование)
-
Что делает: Основная модель сразу пытается сгенерировать готовые блоки кода (
SEARCH/REPLACE) и записать их в файлы. -
Главный плюс: Максимальная скорость при простых и понятных задачах.
-
Пример использования:
Plaintext/code Добавь проверку на null в контроллере LoginRequest и верни BadRequest 400.
Рекомендуемый workflow при работе с проектом
-
Анализ: Запустите
/askдля безопасного аудита и составления списка проблем. -
Проектирование: Переключитесь в
/architectдля реализации сложных архитектурных изменений. -
Исправления: Используйте
/codeдля быстрых точечных правок и написания валидаторов/тестов.
Общие сведения о командах aider
/. Их можно разделить на четыре группы по уровню критичности для повседневной работы.1. Управление файлами и контекстом (Самый высокий приоритет)
-
/add <files>— добавляет файлы в контекст. Модель видит их содержимое целиком. Работает по автодополнению (Tab) и маскам (/add src/*.cs). -
/drop <files>— удаляет конкретный файл из контекста. Без параметров (/drop) очищает весь список файлов. -
/ls— выводит список всех файлов, которые находятся в контексте прямо сейчас.
2. Режимы работы (Архитектура и Безопасность)
-
/code— стандартный режим прямого редактирования. Модель сразу создает правки в виде блоковSEARCH/REPLACEи записывает их в файлы. -
/architect— двухэтапный режим. Модель сначала пишет подробный текстовый план решения, а затем переводит его в код. Идеально для сложного рефакторинга. -
/ask— режим консультации и аудита (Read-Only). Запрещает модели изменять файлы. Безопасен для анализа базы кода.
3. Контроль изменений и история (Управление сессией)
-
/undo— отменяет последний коммит и все изменения файлов, сделанные Aider за предыдущий шаг. -
/diff— показывает разницу между текущим состоянием файлов и последним коммитом Git. -
/clear— очищает историю текстового диалога, сохраняя при этом добавленные файлы в контексте. Помогает, когда чат переполняется.
4. Настройка моделей и системные вызовы (Конфигурация)
-
/model <name>— меняет основную модель (например,/model openrouter/deepseek/deepseek-chat). /editor-model <name>— меняет модель для редактирования и внесения правок в файлы-
/weak-model <name>— назначает легкую модель для служебных задач (генерация коммитов, сжатие контекста). -
/run <command>(или!<command>) — выполняет bash-команду в системе прямо из чата (например,/run dotnet buildили/run npm test). -
/exit— завершает работу Aider.
Полезная информация.
При работе с aider в терминале VS Code начинает теряться история.
1. Увеличить размер буфера терминала в VS Code
-
Откройте настройки VS Code (
Ctrl + ,на Windows/Linux илиCmd + ,на macOS). -
В поисковой строке введите:
terminal.integrated.scrollback. -
Увеличьте значение (по умолчанию обычно стоит 1000 или 10000). Установите, например,
50000или100000строк.
2. Использовать встроенную историю самого Aider
-
Файлы истории: Aider по умолчанию сохраняет логи сессий в скрытой папке
.aider.chat.history.md(в корне вашего проекта или в домашней директории). Вы можете открыть этот файл и посмотреть весь текст прошлых сессий. -
Перезапуск с историей: При повторном запуске Aider подхватывает контекст из git-репозитория и файлов, но если нужно восстановить именно диалог, можно использовать флаги запуска или посмотреть упомянутый выше файл логов.
3. Запускать Aider во внешнем терминале (или tmux)
-
Попробуйте запускать Aider в отдельном окне терминала (например, в системном PowerShell / Windows Terminal на Windows или во внешнем терминале на Linux/macOS). У внешних терминалов буфер прокрутки часто работает стабильнее.
-
Если вы работаете в WSL Ubuntu, отлично помогает связка с
tmux. Запустив сессиюtmuxвнутри WSL перед вызовом Aider, вы гарантируете, что история сохранится даже при случайном закрытии вкладки или обрыве связи с терминалом.
4. Использовать режим /clear или /undo
-
Вместо бесконечной прокрутки вниз используйте команды внутри Aider:
-
/undo— отменить последние изменения в коде и в диалоге. -
/clear— очистит текущий контекст чата (при этом файлы на диске останутся измененными), начав чистый лист, но сохранив историю в файл логов.
-
Windows: чистка системного диска
Проблема: забился системный диск, далее у меня диск C:. Чистка кэшей браузеров и использование системной утилиты результатов не дало. Пришлось прибегнуть к развернутому анализу.
Установил WizTree, portable - версию.
Сначала нашел все большие файлы, которые можно удалять безопасно, дальше начались сложности. Работаю с Gemini.
Вопрос: что находится в файле $MFT (трогать его не надо)?
$MFT (Master File Table) — это не обычный файл с документами или программами, а главная служебная база данных файловой системы NTFS, которая хранит информацию абсолютно обо всех файлах и папках на диске. $MFT тоже физически оформлен как файл, который лежит в начале каждого диска NTFS. Что именно записано внутри $MFT?
-
Атрибуты файла: Полное имя файла, путь к нему и родительский каталог.
-
Временные метки (Timestamps): Точное время создания, последнего изменения, доступа и модификации файла (поэтому этот файл так любят программы для цифровой криминалистики).
-
Права доступа (Security Descriptors): Информация о том, какому пользователю или группе разрешено открывать или менять этот файл.
-
Физическое расположение (Указатели/Pointers):
-
Если файл очень маленький (например, текстовый файл на пару строчек), то его содержимое может поместиться прямо внутри самой записи
$MFT. -
Если файл большой,
$MFTхранит карту секторов (кластеров) диска, где физически разбросаны кусочки этого файла.
-
Почему программы вроде WizTree используют $MFT?
$MFT целиком. Поскольку $MFT — это уже готовая, структурированная таблица, где собраны размеры и имена всех файлов на диске, программа мгновенно «видит» всю структуру за пару секунд и сразу понимает, какие папки занимают больше всего места.Вопрос: файл $MFT заполнен на 25%, можно ли его сжать (я не сжимал, оставил как есть)?
$MFT на работающем диске нельзя. Почему так происходит?
-
Архитектура NTFS: Когда файловая система Windows создает новые файлы,
$MFTавтоматически расширяется под их количество. Однако когда вы удаляете файлы, их записи в таблице помечаются как «пустые» и могут использоваться заново, но физически выделенное под$MFTдисковое пространство назад не возвращается и размер файла не уменьшается. -
Ограничения ОС: Windows не умеет «усекать» (shrink) занятые зоны
$MFT"на лету", так как этот файл критически важен для работы всей файловой системы и закреплен за определенными областями диска.
Что можно сделать?
-
Стороннее ПО: Существуют специализированные утилиты для работы с разметкой дисков (например, Paragon Hard Disk Manager), в которых есть функции оптимизации и дефрагментации/сжатия
$MFT. Они умеют переносить служебные записи и усекать пустые хвосты. -
Радикальный способ: Полное уменьшение физического размера
$MFTбез сторонних рискованных утилит достигается только одним путем — полным форматированием раздела или переустановкой системы, после чего размер таблицы сбросится до минимального начального значения.
$MFT заполнен всего на 25%, это абсолютно нормальное рабочее состояние (система держит большой запас на будущее, чтобы избежать сильной фрагментации таблицы при создании новых файлов). Сами по себе эти «пустые» 75% внутри $MFT не блокируют свободное место на диске критическим образом, если у вас не стоит задача высвободить каждый мегабайт под сжатие самого раздела.Вопрос: в папке с MS SQLServer есть папка PYTHON_SERVICES_20f02472-8f99-49e8-b8c0-5059b8cf545b большого размера, что это такое?
PYTHON_SERVICES_<уникальный_id> связана с компонентом SQL Server Machine Learning Services.Что это такое?
sp_execute_external_script), SQL Server изолирует выполнение кода и автоматически создает временные рабочие директории для каждого сеанса или задачи.Почему папка стала большого размера?
-
Зависание сеансов или утечка данных: Иногда при выполнении тяжелых скриптов (обработка больших датафреймов через Pandas/NumPy, сохранение моделей машинного обучения или кэширование) временные файлы не удаляются автоматически после завершения скрипта.
-
Накопление мусора: Со временем в таких папках могут оставаться временные файлы сессий, лог-файлы или кэш пакетного менеджера, если скрипты выполнялись часто.
Что с этим делать?
-
Безопасная очистка: Сначала убедитесь, что в данный момент не выполняются активные расчеты или хранимые процедуры с использованием Python.
-
Перезапуск службы: Перезапустите службу SQL Server Launchpad (через оснастку
services.msc), чтобы она сбросила текущие активные процессы. -
Удаление: Если служба остановлена и файлы не заблокированы системой, содержимое старых неактивных папок с длинными GUID-номерами можно удалить вручную для освобождения места на диске.
Вопрос: для чего нужна служба SQL Server Launchpad (я остановил службу и отключил)
MSSQLLaunchpad) — это специальный менеджер изоляции и запуска внешних скриптов.1. Безопасный запуск внешнего кода
2. Изоляция процессов (Песочница)
3. Контроль ресурсов
Нужно ли она вам?
-
Если вы активно используете Machine Learning Services в базах данных (например, запускаете сложные математические модели, анализ данных или нейросети прямо внутри SQL): служба нужна, отключать её нельзя.
-
Если вы не используете Python или R в SQL Server, но эта служба установлена и работает (или даже запускается автоматически при старте Windows), она просто тратит оперативную память. Её можно перевести в «Ручной» (Manual) режим запуска в диспетчере служб (
services.msc), чтобы она не запускалась зря и не плодила временные файлы.
Вопрос: в папке PYTHON_SERVICES_20f02472-8f99-49e8-b8c0-5059b8cf545b большую часть места занимают библиотеки, можно как-то отказаться от этой службы?
Как полностью отключить и удалить этот компонент:
1. Остановка и отключение службы
-
Нажмите комбинацию клавиш
Win + R, введитеservices.mscи нажмитеEnter. -
Найдите в списке службу
SQL Server Launchpad (MSSQLLaunchpad)(она может содержать имя вашего экземпляра SQL Server, например,MSSQLLaunchpad$SQLEXPRESS). -
Нажмите по ней правой кнопкой мыши -> «Остановить» (Stop).
-
Затем зайдите в её «Свойства» и измените «Тип запуска» с Автоматически на «Отключено» (Disabled).
2. Удаление компонента через установщик MS SQL
-
Откройте Панель управления -> Установка и удаление программ (или «Установленные приложения» в Windows 10/11).
-
Найдите в списке Microsoft SQL Server (версия) и нажмите «Изменить / Удалить» (Uninstall/Change).
-
В появившемся окне мастера установки выберите пункт «Удалить» (Remove).
-
Выберите нужный экземпляр SQL Server.
-
На шаге выбора компонентов найдите и снимите галочку с Machine Learning Services (Database In-Database) (или компонента интеграции Python/R).
-
Завершите работу мастера.
3. Ручная очистка хвостов
PYTHON_SERVICES_... (и аналогичные ей, если их несколько), чтобы вернуть свободное место на диске C:. Если система напишет, что файлы заняты, перезагрузите компьютер и повторите удаление.Я остановил и отключил службу и вручную удалил папку через проводник. Через MS SQL Installer удалить не получилось.
Вопрос: у MS SQL Server есть папка Upate Cache, что в ней находится (я почистил)?
C:\Program Files\Microsoft SQL Server\140\Setup Bootstrap\Update Cache для SQL Server 2017) хранит резервные копии файлов обновлений (кумулятивных патчей и пакетов исправлений), которые когда-либо устанавливались на ваш сервер.Зачем она нужна?
-
Корректно откатить обновление (удалить конкретный патч через Панель управления, если он вызвал сбой).
-
Вернуть систему к предыдущей сборке (build).
Можно ли её удалить?
-
Официальная позиция Microsoft: Удалять эту папку не рекомендуется. Если вы её очистите, то пункт «Удалить обновление» для SQL Server в панели управления перестанет работать, так как установщик больше не найдет файлы для отката. Сама база данных и текущая версия SQL Server от этого не сломаются и работать хуже не станут.
-
На практике для экономии места: Многие администраторы удаляют содержимое этой папки, если на диске критически мало места и они точно уверены, что откатывать установленные обновления назад никто не планирует.
Вопрос: имеется docker под windows, несколько контейнеров, томов и образов находится на диске C:, как перенести все на другой диск
В итоге я перенес через настройки Docker Desktop. Папки хранилища почистились при переносе.
Способ 1. Через настройки Docker Desktop (Самый простой и официальный)
-
Откройте Docker Desktop.
-
Нажмите на иконку шестеренки (Settings) в правом верхнем углу.
-
В левом меню выберите раздел Resources (Ресурсы) -> вкладка Advanced.
-
Найдите поле Disk image location.
-
Нажмите кнопку Browse и выберите пустую папку на другом диске (например,
D:\DockerData). -
Нажмите Apply & restart.
-
Примечание: Docker сам автоматически скопирует все ваши виртуальные диски (
ext4.vhdx), контейнеры и образы в новое место и переключит пути. Это может занять некоторое время в зависимости от объема данных.
-
Способ 2. Через терминал WSL (Если первая кнопка недоступна или зависает)
-
Полностью закройте Docker Desktop: кликните правой кнопкой мыши по иконке Docker в трее (возле часов) и выберите Quit Docker Desktop.
-
Откройте PowerShell от имени администратора.
-
Убедитесь, что WSL полностью остановлен:
PowerShellwsl --shutdown -
Экспортируйте данные основных виртуальных машин Docker в архивные
.tarфайлы на другой диск (заменитеD:\Dockerна ваш реальный путь, предварительно создав эту папку):
PowerShellwsl --export docker-desktop-data D:\Docker\docker-desktop-data.tar wsl --export docker-desktop D:\Docker\docker-desktop.tar(Процесс экспорта может занять несколько минут, так как файлы образов и томов обычно весят много). -
Удалите (отвяжите) старые дистрибутивы из WSL (это удалит старые тяжелые файлы с диска C:, но ваши данные уже сохранены в
.tarархивах):
PowerShellwsl --unregister docker-desktop-data wsl --unregister docker-desktop -
Импортируйте их заново, указав новый путь на другом диске:
PowerShellwsl --import docker-desktop-data D:\Docker\data D:\Docker\docker-desktop-data.tar --version 2 wsl --import docker-desktop D:\Docker\distro D:\Docker\docker-desktop.tar --version 2 -
Запустите Docker Desktop заново. Все ваши контейнеры, тома (volumes) и образы появятся на новом диске.
.tar из папки D:\Docker можно удалить, чтобы они не занимали место.Вопрос: папка C:\Users\[your_user]\AppData\Local\Microsoft\Terminal Server Client\Cache занимает больше 300 Mb, как ее почистить?
Cache в директории Terminal Server Client принадлежит клиенту службы удаленных рабочих столов (RDP / Remote Desktop Connection). В ней хранятся растровые изображения (скриншоты элементов интерфейса, иконки, фоновые картинки), которые клиент сохраняет при подключении к удаленным серверам или ПК, чтобы каждый раз не подгружать их заново..bmc), и его абсолютно безопасно можно очистить.Как очистить кэш RDP:
-
Закройте все активные окна подключения к удаленному рабочему столу (приложение
mstsc.exe). -
Нажмите комбинацию клавиш
Win + R, введите путь:
Plaintext%LocalAppData%\Microsoft\Terminal Server Client\Cacheи нажмитеEnter. -
Выделяйте все файлы внутри этой папки (
.bmc и .binфайлы) и удаляйте их обычным способом (DeleteилиShift + Delete).
Примечание: Сама папкаCacheи служебные файлы индексации могут остаться, это нормально. Система просто начнет формировать новый чистый кэш по мере того, как вы будете снова подключаться к удаленным рабочим столам. На работоспособность RDP это никак не повлияет.
Вопрос: в папке C:\Users\[your_user]\AppData\Local\Google\Chrome\User Data\Default\Code Cache более 300 Mb
Code Cache в профиле браузера Chrome содержит скомпилированный JavaScript-код сайтов, которые вы посещали. Браузер сохраняет его, чтобы сайты открывались быстрее и не тратили ресурсы процессора на повторную компиляцию скриптов при каждом визите.Как безопасно очистить Code Cache:
Способ 1. Через настройки самого браузера (Самый правильный)
-
Откройте Google Chrome.
-
Нажмите комбинацию клавиш
Ctrl + Shift + Delete(откроется окно очистки истории). -
Перейдите на вкладку «Дополнительно» (Advanced).
-
Выберите временной диапазон «За все время» (All time).
-
Установите галочку «Файлы кэшированные и другие данные» (Cached images and files) — обратите внимание: остальные галочки (пароли, история, файлы cookie) лучше снять, чтобы не потерять нужные данные.
-
Нажмите кнопку «Удалить данные» (Clear data).
Способ 2. Вручную через проводник (Если нужно точечно сбросить именно эту папку)
-
Полностью закройте Google Chrome (убедитесь, что в трее возле часов нет иконки Chrome и в диспетчере задач не висят его фоновые процессы).
-
Нажмите
Win + R, вставьте путь:
Plaintext%LocalAppData%\Google\Chrome\User Data\Default\Code Cacheи нажмитеEnter. -
Выделите все файлы и папки внутри этой директории и удалите их (
Shift + Delete).
Что произойдет после удаления? Браузер не сломается. При самых первых заходах на часто посещаемые сайты страницы могут открываться на долю секунды медленнее (пока Chrome заново компилирует скрипты), но папка очистится, а система вернет занятое место.
Вопрос: есть более 300 Mb здесь: C:\Users\[your_user]\AppData\Local\WhatsApp\app-2.2149.4
Я просто удалил WhatsApp
C:\Users\nik-v\AppData\Local\WhatsApp\app-2.2149.4 — это устаревшая версия приложения WhatsApp.Что это такое?
2.2149.4, которая вышла довольно давно (судя по индексу версии). Новые версии приложения скачиваются и распаковываются в соседние папки с актуальными номерами, а эта старая просто лежит мертвым грузом и занимает место.Можно ли её удалить?
-
Убедитесь, что сам WhatsApp в данный момент закрыт.
-
Проверьте, что вы удаляете именно папку со старым номером версии (
app-2.2149.4), а не корневую папку WhatsApp и не папку с текущей рабочей версией (актуальную версию можно посмотреть в соседних папках внутри%LocalAppData%\WhatsApp).
Вопрос: вот здесь C:\Users\[your_user]\AppData\Local\Temp 2 Gb
C:\Users\[your_user]\AppData\Local\Temp — это главное хранилище временных файлов для Windows и всех установленных программ. 2 гигабайта для этой папки — это даже относительно немного (часто она разрастается до десятков гигабайт), но очистить её можно и нужно.Безопасно ли её чистить?
Как правильно очистить папку Temp:
-
Закройте все запущенные приложения (особенно браузеры, редакторы кода и тяжелые программы), чтобы они не удерживали блокировки на свои временные файлы.
-
Нажмите
Win + R, введите:
Plaintext%LocalAppData%\Tempи нажмитеEnter(откроется та самая папка). -
Выделите все файлы и папки внутри (
Ctrl + A) и нажмитеDelete(илиShift + Delete, чтобы обойти корзину). -
Что делать с неудаляемыми файлами?Часть файлов операционная система или фоновые службы (например, антивирус или активные программы) могут не дать удалить, выдав сообщение вроде "Файл занят другим приложением". Это нормально. Просто поставьте галочку «Выполнить для всех текущих элементов» и нажмите «Пропустить» (Skip). Всё остальное мусорное содержимое удалится без проблем.
В моем случае не все файлы удалились вручную, но места освободилось много.
Вопрос: вот тут C:\Windows\Installer более 6 Gb
C:\Windows\Installer (весом более 6 ГБ) — это системное хранилище кэша установщика Windows (Windows Installer Cache). В ней хранятся файлы установочных пакетов с расширениями .msi и .msp от программ, которые установлены на вашем компьютере.Зачем нужна эта папка?
-
Удаления или изменения программ (когда вы заходите в «Установку и удаление программ», мастеру требуются оригинальные
.msiфайлы для корректной очистки). -
Установки обновлений и патчей для уже имеющегося софта (например, пакетов Office или некоторых тяжелых приложений).
Можно ли её чистить и как это сделать безопасно?
-
PatchCleaner — одна из самых известных и безопасных бесплатных программ для этих целей. Она сканирует папку
C:\Windows\Installer, сверяет её содержимое с реальным списком установленного софта и находит те.msi/.mspфайлы, которые никому больше не нужны. -
Программа дает возможность безопасно удалить только этот мусор или переместить его в другую папку (на случай, если захотите перестраховаться).
-
Скачайте её из проверенного источника.
-
Запустите сканирование.
-
Посмотрите на объем найденных «сиротских» файлов (Orphaned files) и нажмите кнопку удаления/переноса. Это позволит вернуть значительную часть места на диске C: без риска повредить рабочие программы.
Как скачать правильный PatchCleaner:
Чтобы не наткнуться на рекламу, лучше скачивать утилиту напрямую с проверенного репозитория открытого ПО SourceForge:
-
Перейдите по прямой ссылке на проект:
https://sourceforge.net/projects/patchcleaner/ -
Нажмите зеленую кнопку Download (файл должен называться именно
PatchCleaner_1.4.2.0.exe(название актуально на момент написания этой статьи) размером около 1.3 MB).
С официального сайта программы скачивается реклама, не используйте его.
Страховка от ошибок (как сделать на 100% безопасно):
Даже несмотря на то, что программа толковая, с системными каталогами лучше перестраховаться. Когда PatchCleaner завершит сканирование и покажет вам «сиротские» файлы (Orphaned files), не спешите нажимать Delete.
Используйте функцию «Move» (Переместить) вместо удаления:
-
Укажите программе любую другую папку (например, создайте временную папку
D:\InstallerBackup). -
Нажмите кнопку переноса. Программа сама аккуратно переместит эти 6 ГБ на диск D:.
-
После этого поработайте за компьютером пару дней: пооткрывайте нужные программы, проверьте, всё ли запускается и удаляется.
-
Если за пару дней всё работает штатно и никаких сбоев нет, вы сможете просто удалить эту резервную папку с диска D:, окончательно освободив место на диске C:. Если вдруг какой-то редкой программе неожиданно понадобится старый инсталлятор, вы всегда сможете вернуть файлы обратно в
C:\Windows\Installer.
Вопрос: что находится здесь: C:\Windows\WinSxS
C:\Windows\WinSxS (Windows Side-by-Side) — это одно из самых больших и важных хранилищ в операционной системе Windows. В ней находится база данных и файлы практически всех компонентов системы, обновлений, драйверов и библиотек (DLL), которые когда-либо устанавливались в Windows.Зачем нужна эта папка?
-
Защита от сбоев и конфликтов (DLL Hell): В ней хранятся разные версии одних и тех же системных библиотек. Если какая-то программа запрашивает старую версию компонента, Windows берет её из WinSxS, поэтому приложения не ломаются при обновлениях.
-
Хранилище обновлений: Когда Windows скачивает патчи, она складывает новые версии файлов сюда, а старые сохраняет на случай отката или восстановления системы.
Можно ли её удалять или чистить вручную?
-
Категорически нет! Удаление файлов, папок или подпалок внутри WinSxS через проводник неминуемо сломает Windows: перестанут запускаться программы, пропадут компоненты системы, а в худшем случае ПК перестанет загружаться.
-
Размер этой папки часто составляет от 10 до 30 ГБ (иногда больше), и это нормальное поведение для Windows.
Как уменьшить размер WinSxS безопасным путем?
-
Нажмите
Win + R, введитеcleanmgrи нажмитеEnter. -
В появившемся окне выберите системный диск (C:) и нажмите OK.
-
Когда сканирование завершится, нажмите кнопку «Очистить системные файлы» (Clean up system files) и снова выберите диск C:.
-
В списке найдите и отметьте галочкой пункт «Очистка обновлений Windows» (Windows Update Cleanup).
-
Нажмите OK, чтобы система удалила старые резервные копии обновлений из WinSxS без риска повредить систему.
Вопрос: что хранится здесь: C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCache
INetCache, расположенная по столь глубокому системному пути (C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCache), — это скрытый кэш временных интернет-файлов, принадлежащий системной учетной записи (Local System / SYSTEM), а не вашему личному профилю пользователя.Что в ней хранится?
Можно ли её чистить?
-
Вручную через проводник лезть туда и удалять файлы не стоит, так как к этому профилю у обычной учетной записи может не быть полных прав, а активные службы могут блокировать файлы.
-
Если папка разрослась до больших размеров, безопаснее всего очистить её с помощью той же Очистки диска (
cleanmgr), выбрав пункт «Временные файлы Интернета» (Temporary Internet Files) при сканировании системных файлов.
Вопрос: вот здесь C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCache\IE более 2 миллионов файлов
IE системного профиля — это типичный баг или застарелая проблема Windows.Я использовал вариант 2. Работает очень долго. Перед запуском нужно закрыть WizTree.
Как это исправить и безопасно очистить?
Вариант 1. Автоматическая очистка через «Очистку диска»
-
Нажмите
Win + R, введитеcleanmgrи нажмитеEnter. -
Выберите диск C:.
-
Обязательно нажмите кнопку «Очистить системные файлы» внизу окна и снова выберите диск C:.
-
В списке найдите галочку «Временные файлы Интернета» (Temporary Internet Files) и убедитесь, что она отмечена. Нажмите OK. (Система сама умеет безопасно вычищать этот каталог через свои API).
Вариант 2. Экстренная очистка через PowerShell (если cleanmgr не помог)
rd (удаление дерева каталогов):-
Нажмите
Win + Xи выберите Терминал (Администратор) или PowerShell (Администратор). -
Выполните команду для принудительного удаления содержимого кэша:
PowerShellRemove-Item -Path "C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCache\IE\*" -Recurse -Force -ErrorAction SilentlyContinue(Команда победит ограничение на длину путей и молча удалит весь накопившийся мусор, пропуская то, что в данный момент занято процессами).
Команда работает очень долго, может зависнуть. При работе она расходует очень много оперативной памяти (у меня доходило до 7Gb на процесс), освобождение места идет также медленно. Если программу прервать все освободившееся место снова будет занято. При завершении работы команда может подвиснуть и не выйти в командную строку, в моем случае переход туда произошел по клику на экране PowerShell.
Windows: установка системного времени
В какой-то момент я обнаружил, что на одной из моих домашних машин с Windows 10 установлено некорректное время, часы отставали. Я проверил службу Windows Time, она была запущена, но, судя по всему, не работала. Затем я проверил вторую машину (ноутбук) и там ситуация оказалась аналогичной, то есть время не устанавливалось.
Сначала я попробовал решить проблему с помощью Gemini, тот довольно быстро сдался и предложил устанавливать время с помощью скрипта, время предполагалось получать через HTTP с одной из общедоступных служб. Тогда я обратился к ChatGPT, тот оказался гораздо более умным и мы провели исследования в результате которых он пришел к выводу, что не работает что-то именно в самой службе Windows. Мы проверяли обе машины, отпали блокировки портов и протокола UDP, был проверен мой роутер, все было в рабочем состоянии. После того как я потратил на решение проблемы целый день, я решил остановиться и таки да, подключил скрипт в планировщик для установки времени при запуске компьютера.
Фиксирую ряд моментов об этой службе.
В Windows за синхронизацию времени отвечает служба Windows Time (W32Time). В упрощённом виде она работает так:
Аппаратные часы компьютера
│
▼
W32Time
│
│ NTP/UDP 123
▼
NTP-сервер
time.windows.com
pool.ntp.org
и т.д.
│
▼
NTP-ответ
│
▼
расчёт смещения
│
▼
корректировка часов
Но внутри есть несколько важных механизмов.
1. При загрузке Windows
Компьютер получает первоначальное время из RTC/CMOS — аппаратных часов материнской платы.
Именно поэтому при:
w32tm /query /source
можно увидеть:
Local CMOS Clock
Это не означает, что CMOS является настроенным NTP-сервером. Это означает: последнего пригодного внешнего источника времени нет, поэтому система использует локальные часы.
2. W32Time выбирает источник
Настройка:
w32tm /query /configuration
показывает, например:
Type: NTP
NtpServer: time.windows.com,0x8
То есть W32Time должна обращаться к:
time.windows.com
по протоколу NTP.
Можно указать несколько серверов:
time.windows.com,0x8 pool.ntp.org,0x8 time.nist.gov,0x8
3. Используется UDP/123
Классический NTP использует:
UDP source port: 123
UDP destination port: 123
То есть W32Time создаёт NTP-сокет и отправляет примерно:
PC 192.168.0.103:123
│
│ UDP
▼
NTP 213.239.234.28:123
Сервер отвечает:
NTP 213.239.234.28:123
│
▼
PC 192.168.0.103:123
Обычный NTP-клиент может работать иначе:
192.168.0.103:59882 → 185.125.190.57:123
185.125.190.57:123 → 192.168.0.103:59882
А W32Time использует локальный порт 123.
4. W32Time не просто спрашивает «который час?»
NTP-пакет содержит временные метки.
Упрощённо:
T1 = время отправки запроса клиентом
T2 = время получения запроса сервером
T3 = время отправки ответа сервером
T4 = время получения ответа клиентом
По этим четырём значениям можно оценить:
задержку сети:
delay ≈ (T4 - T1) - (T3 - T2)
и смещение часов клиента:
offset ≈ ((T2 - T1) + (T3 - T4)) / 2
Поэтому NTP значительно сложнее простого:
«отправил запрос → получил время сервера → поставил его себе».
5. W32Time собирает несколько измерений
Windows не обязательно корректирует часы после одного ответа.
Она собирает NTP samples:
sample 1
sample 2
sample 3
...
Затем отбрасывает плохие/аномальные измерения и пытается получить надёжную оценку смещения.
6. Затем Windows корректирует часы
Если расхождение небольшое, Windows может плавно изменить скорость хода часов, чтобы постепенно привести их к правильному времени.
Если расхождение достаточно большое, возможна ступенчатая коррекция (step).
Поэтому W32Time — это не просто:
получил время → SetSystemTime()
а полноценный механизм регулирования системных часов.
7. Существует период опроса
В конфигурации можно увидеть:
MinPollInterval: 10
MaxPollInterval: 15
Это степени двойки:
2^10 = 1024 секунд
2^15 = 32768 секунд
То есть интервал может динамически изменяться примерно от:
17 минут
до:
9 часов
Кроме того, может быть:
SpecialPollInterval: 16384
Это примерно:
4 часа 33 минуты
Конкретное поведение зависит от режима и флагов peer'а.
Что происходит при w32tm /resync
Когда мы выполняем:
w32tm /resync
это не просто команда "скажи серверу время".
Она заставляет службу попытаться выполнить новую синхронизацию.
Упрощённо:
w32tm /resync
│
▼
W32Time
│
▼
выбрать peer
│
▼
отправить NTP-запрос
│
▼
получить ответ
│
▼
создать NTP sample
│
▼
проверить sample
│
▼
рассчитать offset
│
▼
скорректировать системные часы
Почему stripchart здесь очень важен
Команда:
w32tm /stripchart /computer:213.239.234.28 /dataonly /samples:3
тоже использует NTP, но это не тот же самый механизм синхронизации, что W32Time service.
Например:
19:58:08, +09.6895857s
19:58:10, +09.6929900s
19:58:12, +09.6926500s
Это доказывает:
DNS ✓
маршрутизация ✓
UDP/123 ✓
NTP-сервер ✓
ответ сервера ✓
Но это не доказывает, что W32Time сможет использовать этот ответ для собственной синхронизации.
И ещё одна важная деталь
W32Time создаёт сокеты:
[::]:123
0.0.0.0:123
То есть сама служба слушает порт UDP 123 на компьютере.
А stripchart может использовать другой сетевой путь/сокет.
Поэтому принципиальная разница сейчас выглядит так:
W32Time
│
source port 123
│
▼
router/NAT
│
▼
NTP server
│
▼
??? :123
│
▼
W32Time
против:
stripchart
│
ephemeral port
│
▼
router/NAT
│
▼
NTP server
│
▼
ephemeral port
│
▼
stripchart
Установка времени скриптом.
Создайте папку для скриптов, например C:\Scripts и в ней файл SyncTime.ps1 со следующим содержимым:
try {
$res = Invoke-WebRequest -Uri "https://ya.ru" -Method Head -TimeoutSec 5 -UseBasicParsing
$serverTime = [datetime]$res.Headers.Date
Set-Date $serverTime
} catch {
$res = Invoke-WebRequest -Uri "https://www.google.com" -Method Head -TimeoutSec 5 -UseBasicParsing
$serverTime = [datetime]$res.Headers.Date
Set-Date $serverTime
}
Сначала будет попытка получить время от Яндекса, если не получится, то от Google.
-
Нажмите
Win + R, введитеtaskschd.mscи нажмитеEnter(Планировщик заданий). -
Справа нажмите «Создать задачу...» (Create Task).
-
На вкладке «Общие»:
-
Имя:
HTTP Time Sync -
Обязательно выберите галочку: «Выполнить с наивысшими правами» (Run with highest privileges) — это нужно, чтобы у скрипта были права на изменение системного времени.
-
В поле «Настроить для» выберите Windows 10 (или Windows 11).
-
-
На вкладке «Триггеры»:
-
Нажмите «Создать...» -> В поле «Начать задачу» выберите «При запуске» (At startup) -> ОК.
-
«При подключении к сети» (On workstation unlock / или по событию сна) — чтобы время корректировалось, когда вы открываете крышку ноутбука или разблокируете экран.
-
-
На вкладке «Действия»:
-
Нажмите «Создать...» -> Действие: «Запуск программы» (Start a program).
-
В поле «Программа или сценарий» введите:
powershell.exe -
В поле «Добавить аргументы (необязательно)» введите:
-ExecutionPolicy Bypass -WindowStyle Hidden -File "C:\Scripts\SyncTime.ps1"
-
-
На вкладке «Условия» и «Параметры»:
-
Снимите галочку «Запускать задачу только при питании от электросети» (если это ноутбук).
-
Поставьте галочку «Запускать задачу как можно скорее после пропуска планового запуска».
-