Гид по технологиям

Как исправить ошибку «command not found» в Linux

6 min read Linux Обновлено 22 Dec 2025
Как исправить «command not found» в Linux
Как исправить «command not found» в Linux

мужчина сидит обеспокоенный рядом с ноутбуком

TL;DR

Если в терминале появляется «command not found», проверьте: нет ли опечатки или ошибки регистра, установлен ли пакет, есть ли полный путь к исполняемому файлу и включён ли путь в переменную PATH. Для редко используемых программ добавьте исполняемый файл в PATH или установите пакет через пакетный менеджер. Внизу — пошаговый чеклист, decision tree и рекомендации по безопасности.

Важно: сообщение «command not found» — симптом, а не причина. Сначала диагностируйте, затем исправляйте.

Почему команда может не находиться

Linux и Unix-системы чувствительны к регистру: ls и LS — разные вещи. Терминал ищет исполняемый файл по каталогам из переменной окружения PATH. Если команда не в PATH или не помечена как исполняемая, вы получите ошибку.

Краткое определение: PATH — это список каталогов, в которых shell ищет исполняемые файлы при вводе команды.

Основные шаги диагностики

  1. Проверка синтаксиса и регистра
  2. Проверка наличия исполняемого файла и прав
  3. Проверка PATH и добавление туда пути
  4. Установка отсутствующих пакетов
  5. Запуск с повышенными привилегиями при необходимости

Каждый шаг описан подробно ниже с примерами и практическими подсказками.

1. Проверка синтаксиса и регистра

Linux разделяет верхний и нижний регистр. Убедитесь, что команда написана правильно.

Пример: команда ssh с параметрами перенаправления портов требует точного регистра:

ssh -fN -L 80:localhost:8080 user@host

Объяснение: параметры -L и -N должны быть указаны именно в таком регистре. Некоторые опции принимают одну или две черты: -v и –version — это разные синтаксисы, используйте правильный.

Совет: используйте Tab для автозаполнения имён команд и путей — это снижает опечатки.

2. Укажите полный путь к исполняемому файлу, если это скрипт

Если вы написали скрипт или установили программу в произвольную папку, shell не найдёт её, пока путь не будет в PATH или вы не запустите её с указанием полного пути.

Пример: если ovftool установлен в /opt/ovf:

sudo /opt/ovf/ovftool

Если вы пытаетесь запустить локальный скрипт в текущей директории, укажите ./:

./myscript.sh

Иначе shell будет считать имя myscript.sh не найденным.

3. Используйте переменную PATH

Чтобы не указывать полный путь каждый раз, добавьте каталог с исполняемыми файлами в PATH.

Правильный синтаксис экспорта в текущую сессию bash/zsh:

export PATH=$PATH:/opt/path/to/your/program

Пример для пользователя .NET Tools:

export PATH=$PATH:~/.dotnet/tools

Чтобы изменения сохранялись между сессиями, добавьте строку в ~/.bashrc, ~/.profile или ~/.zshrc в зависимости от используемого shell, затем примените изменения командой:

source ~/.bashrc

Проверить текущий PATH:

echo $PATH

Важно: не вставляйте пробелы вокруг знака равенства при назначении PATH (ошибка: PATH = $PATH:… приведёт к ошибке в shell).

4. Убедитесь, что программа установлена

Если команда не является встроенной, возможно, пакет не установлен. Используйте пакетный менеджер вашей дистрибуции:

  • Debian/Ubuntu и производные:
sudo apt update
sudo apt install 
  • RHEL/CentOS/Fedora:
sudo dnf install 
# или
sudo yum install 
  • Arch Linux:
sudo pacman -S 

Подсказка: попробуйте поискать пакет по имени команды (в Ubuntu: apt search <команда> или apt-file search <команда>, если установлен apt-file).

5. Проверьте права доступа и запуск от root

Даже если исполняемый файл на месте и в PATH, у него должны быть права на выполнение:

ls -l /path/to/command

Если отсутствует флаг x (execute), добавьте его:

chmod +x /path/to/command

Если программа требует привилегий, запустите с sudo:

sudo command

Совет по безопасности: не добавляйте каталоги с ненадёжными бинарниками в PATH систему-wide. Для временных экспериментов используйте локальный PATH в сессии.

Типичные случаи и нюансы

  • Команды, написанные на Python/Node/Perl: убедитесь, что shebang (#!/usr/bin/env python3) присутствует и файл исполняемый.
  • Если команда установлена в ~/.local/bin, убедитесь, что ~/.local/bin включён в PATH (часто требуется добавить в .profile).
  • Скрипты с CRLF (Windows) могут не запускаться. Удалите переводы строк Windows:
dos2unix myscript.sh
  • Если команда существует, но shell всё равно не находит её — проверьте, используется ли другой shell (sh vs bash vs zsh) и какие конфигурационные файлы загружаются.

Быстрый чеклист по диагностике (для повседневного использования)

  • Правильно ли набрано имя команды (регистр, опечатки)?
  • Что возвращает which/command -v? (есть ли путь)
  • Исполняемый файл существует и помечен как исполняемый (ls -l)
  • Каталог с программой в PATH (echo $PATH)
  • Установлен ли пакет (попробовать пакетный менеджер)
  • Нужны ли права root (sudo)?

Примеры команд для проверки:

command -v mycommand || which mycommand
ls -l $(command -v mycommand 2>/dev/null || echo /path/that/does/not/exist)

Роль-ориентированные чеклисты

Для разработчика:

  • Убедиться, что virtualenv/venv или nvm активированы
  • Проверить shebang и права на исполнение
  • Добавить ./ в PATH только в особых случаях

Для системного администратора:

  • Проверить системные PATH (/etc/profile, /etc/profile.d)
  • Убедиться, что системные службы видят PATH при запуске
  • Проверить SELinux/AppArmor, которые могут блокировать запуск

Для новичка:

  • Использовать пакетный менеджер для установки
  • Включить ~/.local/bin в PATH через .profile
  • Использовать Tab для автодополнения

Методика быстрого устранения (мини‑методология)

  1. Повторите ошибку и зафиксируйте сообщение.
  2. Выполните command -v <имя> и echo $PATH.
  3. Если command -v ничего не возвращает, выполните which <имя>.
  4. Найдите файл: sudo find / -type f -name ‘<имя>’ 2>/dev/null.
  5. Если найден файл — проверьте права и shebang.
  6. Если не найден — установите пакет.
  7. Если установлен, но не запускается в сервисе — проверьте окружение сервиса (systemd unit Environment).

Decision tree (графическое представление в виде Mermaid)

flowchart TD
  A[Начало: увидели 'command not found'] --> B{Правильно ли имя?}
  B -- Нет --> C[Исправить опечатку / регистр]
  B -- Да --> D[command -v <имя>]
  D -- Есть путь --> E[Проверить права: ls -l]
  E -- Не исполняемый --> F[chmod +x и попробовать снова]
  E -- Исполняемый --> G[Пробовать sudo / проверить зависимости]
  D -- Нет пути --> H[Ищем пакет или файл с помощью find / apt search]
  H -- Найден пакет --> I[Установить пакет]
  H -- Не найден --> J[Добавить путь в PATH или установить программу]
  C --> K[Повторить команду]
  F --> L[Успешно]
  G --> L
  I --> L
  J --> L

Критерии приёмки

  • Ввод команды приводит к ожидаемому бинарному запуску (или явному сообщению об ошибке).
  • command -v возвращает путь к исполняемому файлу.
  • Исполняемый файл имеет права на выполнение и корректный shebang.
  • PATH корректно настроен для целевой сессии (интерактивной) и служебных unit (systemd).

Тесты и сценарии приёмки

  1. Выполнить новую команду в чистой сессии; ожидается запуск.
  2. Установить пакет, убедиться, что command -v возвращает путь.
  3. Запустить программу как сервис; убедиться, что systemd unit видит PATH (systemctl show-environment).

Меры безопасности и рекомендации

  • Не добавляйте “/“ или пустые строки в начало PATH — это потенциально опасно.
  • Избегайте добавления папок, в которые могут записывать другие пользователи, в системный PATH.
  • Проверяйте подписи пакетов и устанавливайте программы из надёжных репозиториев.
  • Для временного тестирования используйте песочницу или контейнер (docker) вместо изменения системного PATH.

Частые ошибки и когда описанные методы не помогут

  • Программа требует специфичных зависимостей или библиотек — установка пакета не решит проблему без разрешения зависимостей.
  • Проблемы с SELinux/AppArmor могут блокировать исполняемые файлы даже при правильном PATH и правах.
  • Если сервис запускается с другим пользователем, его окружение (и PATH) может отличаться — настройка интерактивного PATH не исправит проблему для systemd.

Краткий глоссарий (1 строка на термин)

  • PATH — список каталогов, где shell ищет исполняемые файлы.
  • Shebang — строка в начале скрипта вида #!/usr/bin/env , указывающая интерпретатор.
  • Shell — интерфейс командной строки (bash, zsh, sh).

Быстрая шпаргалка (cheat sheet)

  • Проверить наличие: command -v
  • Проверить права: ls -l $(command -v )
  • Добавить в PATH временно: export PATH=$PATH:/your/path
  • Сохранить в Bash: echo ‘export PATH=$PATH:/your/path’ >> ~/.bashrc
  • Запустить локальный скрипт: ./script.sh

Часто задаваемые вопросы

В: Что делать, если which возвращает путь, а команда всё равно не запускается?

A: Проверьте права выполнения, shebang, зависимости (ldd для бинарей), и SELinux/AppArmor. Для скриптов — проверьте кодировку и переводы строк.

В: Как добавить ~/.local/bin в PATH для всех логинов?

A: Добавьте export PATH=$PATH:$HOME/.local/bin в ~/.profile или /etc/profile.d/custom.sh для всех пользователей.


переменные окружения Linux

магазин приложений Ubuntu с общими приложениями

Резюме

Ошибка «command not found» обычно вызвана одной из нескольких причин: опечатка/регистр, отсутствие установки, неправильные права или PATH. Последовательно пройдитесь по чеклисту, используйте command -v/which, проверьте права и PATH, и только затем вносите более радикальные изменения в систему. Следуйте рекомендациям по безопасности и используйте контейнеры для экспериментов.

Важно: при работе с системными PATH и правами придерживайтесь принципа наименьших привилегий.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство