rm не является внутренней или внешней командой: причины и решение

Ошибка «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.exe (классическая командная строка)
PowerShell
Git Bash / MinGW
Скрипт или Makefile при сборке проекта

Чтобы проверить, видит ли система какую-либо команду с именем rm, выполните в cmd:

where rm

Если ответ — «не удается найти файлы по заданному шаблону», значит, исполняемого файла rm в путях PATH нет, и система честно об этом сообщает. Это нормальное поведение, а не признак поломки Windows.

Решение 1: использовать встроенные команды Windows

Самый простой путь — заменить rm на родные аналоги. В cmd.exe для удаления файлов служит del, для каталогов — rmdir с нужными флагами.

Команда LinuxАналог в cmd.exeАналог в PowerShell
rm file.txtdel file.txtRemove-Item file.txt
rm -r folderrmdir /s folderRemove-Item folder -Recurse
rm -rf folderrmdir /s /q folderRemove-Item folder -Recurse -Force
rm -f file.txtdel /f file.txtRemove-Item file.txt -Force

Обратите внимание на флаги: /s у rmdir удаляет каталог вместе со всем содержимым, /q отключает запрос подтверждения, а /f у del принудительно удаляет файлы с атрибутом «только чтение». В PowerShell аналогичную роль играют параметры -Recurse и -Force.

⚠️ Внимание: команды rmdir /s /q и Remove-Item -Recurse -Force удаляют данные безвозвратно, минуя корзину. Перед выполнением перепроверьте путь — опечатка в имени каталога может стоить вам важных файлов.

☑️ Безопасное удаление через cmd

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

Решение 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 не понимает.