Команда chmod введена в командной строке Windows — а система отвечает «"chmod" не является внутренней или внешней командой, исполняемой программой или пакетным файлом», потому что chmod — это утилита Unix/Linux, и в стандартной поставке Windows её просто не существует. Ошибка появляется в cmd.exe или PowerShell сразу после нажатия Enter, причём текст сообщения одинаков для любой неизвестной системе команды.
Чаще всего с этой ошибкой сталкиваются пользователи, которые выполняют инструкцию, написанную для Linux или macOS: например, руководство по установке веб-сервера, настройке SSH-ключей или развёртыванию проекта. Автор инструкции предполагал Unix-окружение, а команда выполняется в Windows. Разберёмся, почему так происходит и какими средствами Windows можно заменить chmod.
Почему Windows не знает команду chmod
Утилита chmod (change mode) управляет правами доступа к файлам в Unix-подобных системах: чтение, запись и выполнение для владельца, группы и остальных пользователей. В Windows используется совершенно другая модель разрешений — списки контроля доступа NTFS (ACL), и инструменты для работы с ней называются иначе.
Когда вы вводите команду, командный интерпретатор ищет её в таком порядке:
- 🔍 среди встроенных команд оболочки (например,
dir,copy); - 📁 в текущем рабочем каталоге;
- 🧭 в папках, перечисленных в переменной окружения
PATH; - ❌ если нигде не найдено — выводится то самое сообщение об ошибке.
Поскольку исполняемого файла chmod.exe нет ни в системных каталогах, ни в PATH, интерпретатор честно сообщает, что команда не найдена. Это не сбой системы — просто вы используете инструмент из другой экосистемы.
Чем заменить chmod в Windows
Прямого аналога с синтаксисом chmod 755 file в Windows нет, но задачи, которые обычно решают через chmod, покрываются встроенными средствами. Выбор инструмента зависит от того, что именно требуется сделать.
| Задача из Linux-инструкции | Аналог в Windows | Пример команды |
|---|---|---|
| Выдать права на файл или папку | icacls | icacls file.txt /grant User:F |
| Убрать атрибут «только чтение» | attrib | attrib -r file.txt |
| Сделать скрипт исполняемым | не требуется — запуск по расширению | script.bat или python script.py |
| Права на SSH-ключ | icacls с ограничением доступа | icacls key /inheritance:r /grant:r "%USERNAME%:R" |
Обратите внимание на третью строку таблицы: в Windows нет понятия «бит исполнения». Файл запускается, если его расширение связано с программой или входит в список исполняемых (.exe, .bat, .cmd, .ps1). Поэтому команда вида chmod +x script.sh в инструкции для Windows обычно просто не нужна — достаточно запустить файл подходящим интерпретатором.
⚠️ Внимание: командаicaclsизменяет реальные права доступа NTFS. Ошибка в параметрах может заблокировать доступ к папке даже для вас. Перед экспериментами проверьте текущие права командойicacls имя_файлабез дополнительных ключей — она только покажет список разрешений, ничего не меняя.
Работа с icacls: основные сценарии
Утилита icacls — основной инструмент управления разрешениями в современных версиях Windows. Она пришла на смену устаревшей cacls и поддерживает все возможности ACL. Запускать её можно из обычной командной строки, но для изменения системных папок потребуется запуск от имени администратора.
Типовой пример — выдать текущему пользователю полный доступ к папке:
icacls "C:\myproject" /grant "%USERNAME%":F /t
Здесь /grant выдаёт разрешение, F означает полный доступ (Full control), а /t применяет изменение рекурсивно ко всем вложенным файлам и папкам. Вместо F можно использовать M (изменение), RX (чтение и выполнение) или R (только чтение).
Для сброса наследуемых разрешений и установки строгих прав (типичная задача для SSH-ключей) используется связка:
icacls "%USERPROFILE%\.ssh\id_rsa" /inheritance:r
icacls "%USERPROFILE%\.ssh\id_rsa" /grant:r "%USERNAME%:R"
Первая команда отключает наследование и удаляет унаследованные записи, вторая — оставляет доступ на чтение только владельцу. Это ближайший эквивалент chmod 400 или chmod 600 из мира Linux.
Запуск chmod через WSL, Git Bash и Cygwin
Если инструкция требует именно chmod и отступать от неё нельзя, можно получить настоящую Unix-среду внутри Windows. Существует несколько проверенных вариантов:
- 🐧 WSL (Подсистема Windows для Linux) — полноценный Linux-дистрибутив внутри Windows, устанавливается командой
wsl --installв PowerShell с правами администратора; - 🌿 Git Bash — поставляется вместе с Git для Windows, включает chmod и другие Unix-утилиты;
- 🛠️ Cygwin или MSYS2 — среды с набором GNU-инструментов для Windows;
- 🐳 Docker — если chmod нужен внутри контейнера, команда выполняется в Dockerfile или в shell контейнера, а не в Windows.
Важный нюанс: chmod внутри WSL корректно работает с файлами в файловой системе Linux (например, /home/user/...). Для файлов, лежащих на дисках Windows (/mnt/c/...), поведение прав может отличаться и зависит от настроек монтирования — не всегда изменения применяются так, как ожидается.
Пошаговая диагностика: что проверить в первую очередь
Прежде чем менять права или устанавливать WSL, стоит понять, какая именно задача стоит за строкой с chmod в вашей инструкции. Пройдите по этому чек-листу:
☑️ Диагностика ошибки с chmod
Многое можно сделать вообще без командной строки. Правый клик по файлу → Свойства → вкладка Безопасность открывает графический редактор разрешений NTFS, где те же права выдаются кнопками «Изменить» и «Дополнительно». Для разовой задачи это часто быстрее, чем разбираться с синтаксисом icacls.
⚠️ Внимание: если команда chmod встретилась вам внутри bat-файла или скрипта установщика, не запускайте такой скрипт, пока не разберётесь, что он делает. Возможно, скрипт был написан для Linux и в Windows выполнится некорректно, пропустив важные шаги настройки.
Частные случаи: SSH, веб-серверы и скрипты
Одна из самых частых ситуаций — настройка SSH-ключей. Клиент OpenSSH в Windows отказывается работать с закрытым ключом, если права на него слишком широкие, и Linux-инструкции предлагают chmod 600. В Windows вместо этого ограничьте доступ через icacls, как показано выше, либо через вкладку «Безопасность» в свойствах файла: оставьте доступ только своей учётной записи.
Почему OpenSSH в Windows проверяет права на ключ
Клиент OpenSSH считает ключ скомпрометированным, если его могут читать другие пользователи или группы. Проверка прав встроена в саму программу и отключить её штатными средствами нельзя. Поэтому единственный путь — реально сузить разрешения: убрать наследование и оставить доступ только владельцу. После этого ssh перестаёт выдавать предупреждение «permissions are too open».
Вторая типичная ситуация — локальная разработка: инструкция проекта просит chmod +x deploy.sh. Здесь достаточно понять, чем запускать скрипт. Shell-скрипт в чистом Windows не выполнится — его нужно запускать через Git Bash (bash deploy.sh) или внутри WSL. Если же проект использует .bat или .ps1, никакие права на выполнение не нужны.
Отдельный случай — PowerShell-скрипты. Вместо прав на файл PowerShell использует политику выполнения. Если .ps1 не запускается, проблема решается командой Set-ExecutionPolicy для текущего пользователя, а не изменением атрибутов файла.
Если chmod должен существовать, но не находится
Иногда ошибка возникает там, где chmod вроде бы должен работать — например, в Git Bash или MSYS2. Тогда причина в другом: утилита не установлена или её путь не прописан в PATH. Проверьте, в какой оболочке вы находитесь: приглашение вида C:\Users\...> означает cmd, а не Unix-терминал.
Для проверки доступности любой команды в Windows есть встроенный инструмент:
where chmod
Если команда ничего не нашла — исполняемого файла нет в PATH. В Git Bash вместо этого используйте which chmod. Убедитесь также, что вы не опечатались: лишний пробел или кириллическая буква в имени команды дают точно такую же ошибку.
Частые вопросы
Можно ли просто скачать chmod.exe для Windows?
Теоретически существуют портированные сборки Unix-утилит, но устанавливать отдельный chmod.exe бессмысленно: права Unix и ACL Windows устроены по-разному, и такая утилита не даст ожидаемого эффекта. Правильный путь — использовать icacls или полноценную среду вроде Git Bash или WSL.
Чем заменить команду chmod 777 в Windows?
Команда chmod 777 открывает полный доступ всем. Ближайший аналог — icacls папка /grant Everyone:F /t. Однако делать это без необходимости не стоит: открытый доступ для всех пользователей — риск безопасности, особенно на многопользовательской машине.
Ошибка возникает в PowerShell — там другие решения?
Причина та же: chmod не существует в Windows независимо от оболочки. В PowerShell дополнительно доступны командлеты Get-Acl и Set-Acl для работы с разрешениями, но для большинства задач проще использовать icacls — он работает и в PowerShell, и в cmd.
Почему инструкция с chmod не работает, хотя я всё ввожу верно?
Скорее всего, инструкция написана для Linux или macOS. Ищите в тексте признаки: упоминания sudo, apt, путей вида /etc/... или /usr/.... Для Windows-версии того же ПО обычно существует отдельное руководство — проверьте официальную документацию проекта.
Нужны ли права администратора для icacls?
Для файлов в вашем профиле пользователя — обычно нет. Для системных папок, Program Files и чужих учётных записей командную строку нужно запускать от имени администратора, иначе получите ошибку отказа в доступе.