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

Как исправить ошибку «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
Автор
Редакция

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

Как добавить скрытые приватные каналы на Roku
Руководство

Как добавить скрытые приватные каналы на Roku

Восстановление системного образа Windows
Резервное копирование

Восстановление системного образа Windows

Управление разделами и томами в Windows 10
Windows

Управление разделами и томами в Windows 10

UFW — настройка брандмауэра в Linux
Системное администрирование

UFW — настройка брандмауэра в Linux

Диаграммы в Google Docs: быстро и просто
Google Docs

Диаграммы в Google Docs: быстро и просто

Как импортировать плейлисты в Spotify
Музыка

Как импортировать плейлисты в Spotify