Ошибка «rm не является внутренней или внешней командой, исполняемой программой или пакетным файлом» появляется в командной строке Windows, когда пользователь вводит rm — команду удаления файлов из мира Linux, которой в стандартном cmd.exe просто не существует. Интерпретатор ищет исполняемый файл с таким именем в текущем каталоге и в путях переменной PATH, не находит его и выдаёт это сообщение.
Проблема почти всегда решается за пару минут: либо заменой команды на встроенный аналог Windows, либо установкой среды, где rm действительно доступна. Ниже разберём, почему возникает ошибка, какие команды использовать вместо rm и как настроить рабочее окружение, если вам нужен именно Linux-синтаксис.
Почему Windows не понимает команду rm
Команда rm (от remove) — стандартная утилита Unix-подобных систем: Linux, macOS, различных BSD. В Windows исторически используются другие команды: del и erase для файлов, rmdir (или rd) для каталогов. Это разные семейства командных оболочек с разным синтаксисом и флагами.
Чаще всего ошибка возникает в таких сценариях:
- 🐧 Вы скопировали команду из Linux-инструкции или туториала и вставили её в cmd или PowerShell без адаптации.
- 📜 Запускаете
.sh-скрипт или Makefile, рассчитанный на Unix-окружение, напрямую в Windows. - 🔧 Раньше у вас был установлен Git Bash, Cygwin или WSL, а после переустановки системы путь к утилитам пропал из
PATH. - 📦 Скрипт сборки проекта (npm, make) вызывает
rm, но окружение для его выполнения не настроено.
Отдельный случай — PowerShell. В нём rm является псевдонимом (alias) командлета Remove-Item, поэтому в современных версиях PowerShell команда обычно работает. Если ошибка появляется и там — возможно, используется устаревшая версия оболочки или алиас переопределён в профиле.
Быстрая диагностика: где именно вы вводите команду
Первый шаг — определить, в какой оболочке вы работаете. От этого зависит и причина ошибки, и способ исправления. Посмотрите на заголовок окна терминала или введите команду проверки.
В cmd.exe приглашение выглядит как путь с символом >, например C:\Users\Имя>. В PowerShell перед путём стоит префикс PS. В Git Bash строка обычно содержит имя пользователя, символ ~ и метку MINGW64.
Чтобы проверить, видит ли система какую-либо команду с именем rm, выполните в cmd:
where rm
Если ответ — «не удается найти файлы по заданному шаблону», значит, исполняемого файла rm в путях PATH нет, и система честно об этом сообщает. Это нормальное поведение, а не признак поломки Windows.
Решение 1: использовать встроенные команды Windows
Самый простой путь — заменить rm на родные аналоги. В cmd.exe для удаления файлов служит del, для каталогов — rmdir с нужными флагами.
| Команда Linux | Аналог в cmd.exe | Аналог в PowerShell |
|---|---|---|
rm file.txt | del file.txt | Remove-Item file.txt |
rm -r folder | rmdir /s folder | Remove-Item folder -Recurse |
rm -rf folder | rmdir /s /q folder | Remove-Item folder -Recurse -Force |
rm -f file.txt | del /f file.txt | Remove-Item file.txt -Force |
Обратите внимание на флаги: /s у rmdir удаляет каталог вместе со всем содержимым, /q отключает запрос подтверждения, а /f у del принудительно удаляет файлы с атрибутом «только чтение». В PowerShell аналогичную роль играют параметры -Recurse и -Force.
⚠️ Внимание: командыrmdir /s /qиRemove-Item -Recurse -Forceудаляют данные безвозвратно, минуя корзину. Перед выполнением перепроверьте путь — опечатка в имени каталога может стоить вам важных файлов.
☑️ Безопасное удаление через cmd
Решение 2: установить среду с поддержкой rm
Если вам нужен именно Linux-синтаксис — например, для скриптов, кроссплатформенных проектов или привычки — установите одну из сред, где rm доступна нативно.
- 🐙 Git Bash — поставляется вместе с Git для Windows, включает набор Unix-утилит:
rm,ls,grep,sshи другие. Достаточно для большинства повседневных задач. - 🖥️ WSL (подсистема Windows для Linux) — полноценное Linux-окружение внутри Windows. Устанавливается командой
wsl --installв PowerShell с правами администратора (доступность зависит от версии Windows). - 📦 Cygwin или MSYS2 — альтернативные наборы Unix-инструментов для Windows, популярны у разработчиков.
После установки Git Bash команду rm можно выполнять прямо в его окне. Если хочется вызывать rm из обычного cmd, потребуется добавить каталог с Unix-утилитами Git (обычно это подкаталог usr\bin в папке установки Git) в системную переменную PATH через Система → Дополнительные параметры системы → Переменные среды. Точный путь зависит от того, куда установлен Git — проверьте его на своём компьютере.
⚠️ Внимание: добавляя сторонние каталоги в PATH, помните, что Unix-версии утилит могут перекрывать команды Windows с совпадающими именами. Если какой-то скрипт после этого начал вести себя иначе — проверьте порядок каталогов в переменной.
Решение 3: починить скрипты и Makefile
Когда ошибка возникает не при ручном вводе, а во время сборки проекта (npm run clean, make clean и т.п.), проблема в самом скрипте: он написан под Unix и вызывает rm напрямую.
Вариантов действий несколько. Первый — запускать сборку внутри Git Bash или WSL, где команда доступна. Второй — заменить вызовы rm в скриптах на кроссплатформенные аналоги. В экосистеме Node.js для этого часто используют пакет rimraf, который работает одинаково на всех ОС:
npm install --save-dev rimraf
После этого в package.json строку вида "clean": "rm -rf dist" заменяют на "clean": "rimraf dist". Скрипт станет переносимым между Linux, macOS и Windows.
Почему в PowerShell rm работает, а в cmd нет
PowerShell построен на .NET и имеет систему псевдонимов — коротких имён для длинных командлетов. Разработчики добавили алиасы rm, ls, cp, mv специально, чтобы облегчить переход пользователям Unix. Классический cmd.exe такой системы не имеет и понимает только собственный набор внутренних команд плюс внешние .exe-файлы из PATH.
Что делать, если rm перестала работать после переустановки
Бывает и обратная ситуация: раньше rm работала в терминале, а после обновления Windows, переустановки Git или смены компьютера — перестала. Почти всегда причина в том, что из переменной PATH пропал путь к Unix-утилитам.
Порядок проверки такой. Откройте Переменные среды и посмотрите, есть ли в PATH каталог с утилитами Git или MSYS2. Затем в новом окне cmd выполните where rm: если файл находится — всё настроено, если нет — добавьте путь и перезапустите терминал. Учтите, что изменения PATH применяются только к вновь открытым окнам командной строки.
Если путь на месте, а ошибка осталась, убедитесь, что сами файлы утилит существуют на диске — возможно, программа была удалена или антивирус поместил исполняемые файлы в карантин. Восстановление установки Git или MSYS2 в этом случае решает вопрос.
Частые вопросы
Чем rm отличается от del?
rm — команда Unix-систем для удаления файлов и каталогов. del — её аналог в командной строке Windows, но только для файлов; каталоги в cmd удаляются через rmdir. Функционально они близки, отличается синтаксис флагов.
Можно ли заставить rm работать в обычном cmd без установки программ?
Без установки сторонних утилит — нет: в cmd нет ни команды rm, ни системы псевдонимов. Можно создать пакетный файл rm.bat с вызовом del внутри и положить его в каталог из PATH, но проще использовать PowerShell, где псевдоним уже встроен.
Удалённые через rm или del файлы попадают в корзину?
Нет. Удаление через командную строку — и в Windows, и в Linux — выполняется напрямую, минуя корзину. Восстановить такие файлы стандартными средствами нельзя, поэтому перед удалением стоит перепроверять путь.
Ошибка возникает при запуске npm-скрипта. Что делать?
Скорее всего, в package.json скрипт вызывает rm напрямую. Запустите команду в Git Bash или WSL либо замените вызов на кроссплатформенный пакет rimraf — тогда скрипт будет работать на любой ОС.
Почему в PowerShell rm -rf не работает как в Linux?
В PowerShell rm — это псевдоним Remove-Item, а его параметры отличаются от Unix-флагов. Вместо rm -rf folder используйте полную форму: Remove-Item folder -Recurse -Force. Комбинированные флаги вида -rf PowerShell не понимает.