Что означает ошибка "command not found"
Ошибка bash: command not found (или command not found) означает, что командная оболочка Bash не может найти исполняемый файл команды, которую вы ввели, ни в одной из директорий, указанных в переменной окружения PATH.
Полный текст ошибки обычно выглядит так:
$ somecommand
bash: somecommand: command not found
Эта ошибка возникает в момент ввода команды в терминал (интерактивном режиме) или при выполнении скрипта. Bash последовательно ищет исполняемый файл с именем somecommand в каждом каталоге из переменной PATH. Если ни в одном из них файл с таким именем не найден (или он не имеет прав на выполнение), вы получаете это сообщение.
Причины возникновения
- Пакет с командой не установлен. Самая частая причина. Команда является частью программного пакета (например,
git,docker,htop), который вы не устанавливали. - Команда находится в каталоге, отсутствующем в
PATH. Вы установили программу в нестандартное место (например,~/apps/или/opt/local/bin), но этот путь не добавлен в переменнуюPATH. - Опечатка или неверный регистр. Linux-команды чувствительны к регистру.
Ls≠ls. - Исполняемый файл отсутствует или имеет неверные права. Файл команды был удалён, перемещён или у него нет права на выполнение (
chmod +x). - Повреждён или некорректно настроен
PATH. ПеременнаяPATHможет быть пустой, содержать синтаксические ошибки или относительные пути.
Способы решения
Способ 1: Проверьте опечатки и регистр
Перед глубокой диагностикой убедитесь, что команда написана правильно.
- Используйте клавишу
Tabдля автодополнения. Если Bash ничего не дополняет, команда, скорее всего, неизвестна системе. - Убедитесь в правильности регистра:
git status, а неGit Status. - Для поиска похожих команд можно использовать
apropos <ключевое_слово>(требует обновлённого индекса man-страниц).
Способ 2: Найдите и установите недостающий пакет
Если команда стандартная (например, curl, wget, python3), её нужно установить.
Для Ubuntu/Debian:
# Поиск пакета, содержащего команду
apt search <имя_команды>
# Установка пакета (требует sudo)
sudo apt update && sudo apt install <имя_пакета>
Для CentOS/RHEL/Fedora:
yum provides */<имя_команды> # или dnf на Fedora/CentOS 8+
sudo yum install <имя_пакета>
Для Arch Linux:
pacman -Fs <имя_команды>
sudo pacman -S <имя_пакета>
Способ 3: Проверьте и исправьте переменную PATH
- Посмотрите текущий
PATH:echo $PATH
Вывод будет выглядеть как/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin. Это список каталогов, где Bash ищет команды. - Определите, где находится ваша команда (если она есть в системе):
# Покажет полный путь к исполняемому файлу, если он найден в PATH which <имя_команды> # Более точная проверка (встроенная в bash) type -a <имя_команды>
Еслиwhichничего не выводит — команды нет вPATH. - Если вы знаете, где лежит команда, но её нет в
PATH, добавьте каталог временно (до перезагрузки терминала):export PATH=$PATH:/полный/путь/к/каталогу/с/командой
После этого команда должна заработать. - Чтобы добавить путь навсегда, отредактируйте конфигурационный файл вашей оболочки.
- Для Bash (по умолчанию в большинстве дистрибутивов) откройте
~/.bashrcили~/.profileи добавьте строку:
export PATH="$PATH:/полный/путь/к/каталогу"- Для Zsh отредактируйте
~/.zshrc. - После сохранения файла выполните
source ~/.bashrc(илиsource ~/.zshrc), чтобы изменения вступили в силу в текущей сессии.
- Для Bash (по умолчанию в большинстве дистрибутивов) откройте
Способ 4: Проверьте права на выполнение файла
Если команда — это ваш собственный скрипт или программа, убедитесь, что файл является исполняемым.
# Проверьте права
ls -l /полный/путь/к/файлу_команды
# В выводе должны быть буквы 'x' для владельца/группы/всех (например, -rwxr--r--)
# Если нет — добавьте право на выполнение:
chmod +x /полный/путь/к/файлу_команды
Убедитесь также, что файл находится в каталоге, который есть в PATH.
Профилактика
- Управляйте
PATHосознанно. Не добавляйте в него слишком много каталогов. Стандартные пути (/usr/local/bin,/usr/bin) должны присутствовать. - Используйте абсолютные пути в скриптах для критически важных команд, если вы не уверены в среде выполнения.
- Создавайте алиасы (алиасы) для часто используемых длинных команд в
~/.bashrc:alias ll='ls -la' - Проверяйте наличие команды перед написанием сложных скриптов с помощью
command -v <имя_команды>илиtype <имя_команды>. Это более надёжно, чемwhich. - После установки ПО вручную (из исходников или в
/opt) сразу добавляйте его бинарный каталог вPATH.