Ошибка «chmod не является внутренней или внешней командой»: причины и решение

Команда 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Пример команды
Выдать права на файл или папкуicaclsicacls file.txt /grant User:F
Убрать атрибут «только чтение»attribattrib -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/...), поведение прав может отличаться и зависит от настроек монтирования — не всегда изменения применяются так, как ожидается.

📊 Где вы столкнулись с ошибкой «chmod не является командой»?
Обычная командная строка (cmd.exe)
PowerShell
При настройке SSH-ключей
Выполнял инструкцию по установке ПО

Пошаговая диагностика: что проверить в первую очередь

Прежде чем менять права или устанавливать WSL, стоит понять, какая именно задача стоит за строкой с chmod в вашей инструкции. Пройдите по этому чек-листу:

☑️ Диагностика ошибки с chmod

Выполнено: 0 / 5

Многое можно сделать вообще без командной строки. Правый клик по файлу → Свойства → вкладка Безопасность открывает графический редактор разрешений 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 и чужих учётных записей командную строку нужно запускать от имени администратора, иначе получите ошибку отказа в доступе.