Команда Debian bash не найдена

Обновлено: 21.11.2024

Вы используете Linux и видите ошибку «Команда не найдена» при попытке выполнить команду? Пришло время узнать, почему.

Мы вместе рассмотрим эту ошибку и поймем, как ее исправить.

В чем причина ошибки команда не найдена?

Ошибка «Команда не найдена» вызвана тем, что Linux не может найти в вашей системе команду, которую вы пытаетесь выполнить. Когда вы запускаете команду, Linux ищет двоичные файлы в списке каталогов, указанных в переменной среды PATH, это позволяет выполнять команду без указания ее полного пути.

В этой статье мы рассмотрим пример этой ошибки, и я покажу вам, как ее исправить.

Вы также поймете, как Linux (или Unix-подобные системы) ищет команды, когда пользователь их выполняет.

Переменная среды PATH

Системы Linux настроены с предопределенным набором переменных среды, необходимых операционной системе для правильной работы.

Переменная среды PATH — одна из самых важных переменных среды в системе Linux. Он содержит список каталогов, используемых Linux для поиска команд, которые можно выполнять без указания их полного пути.

Вы можете использовать команду echo, чтобы увидеть значение переменной PATH:

В списке каталогов внутри PATH вы можете увидеть домашний каталог моего текущего пользователя (пользователя ec2), а также такие каталоги, как /usr/bin.

Давайте посмотрим на некоторые команды из каталога /usr/bin. Чтобы ограничить список команд, возвращаемых ls, я просто ищу команды, начинающиеся с ch (для этого я использую подстановочный знак ch*):

В качестве примера возьмем команду chmod.

Если я использую команду which для проверки полного пути к команде chmod, я получаю следующее:

Как видите, это точно такой же каталог в ПУТИ, /usr/bin.

Тот факт, что /usr/bin/ находится в PATH, позволяет нам выполнять команду chmod без указания полного пути.

Где определяется PATH в Linux?

Интересно, где определена переменная среды PATH?

Обычно он определяется где-то в вашем домашнем каталоге, а именно в одном из скрытых файлов, используемых в Linux для настройки вашей пользовательской среды: файле .bashrc.

В Linux точка перед именем файла означает, что файл скрыт. Его не видно, если мы выполним команду ls без флагов. Он виден только в том случае, если вы передадите флаг -a команде ls.

Файл .bashrc на самом деле представляет собой сценарий оболочки, который запускается, когда Linux инициализирует интерактивную оболочку. Это позволяет вам настраивать среду так, как вы хотите, каждый раз, когда вы открываете оболочку.

Если я посмотрю файл .bashrc в своей системе, то увижу следующие строки:

Как видите, переменная PATH определена, и затем она становится доступной для любых дочерних процессов этой оболочки с помощью команды экспорта.

Если вы хотите добавить еще один каталог в PATH, вы можете просто обновить файл .bashrc.

Это обычное требование, если вы загружаете внешние инструменты, не являющиеся частью операционной системы Linux, и хотите иметь возможность запускать их из своей оболочки, не указывая полный путь к ним.

Одним из распространенных сценариев является добавление Java в PATH Linux после загрузки JDK (Java Development Kit) в вашу систему.

PATH, настроенный на общесистемном уровне

Когда я вижу значение переменной PATH в своей системе, я получаю следующее:

Что-то мне непонятно…

… в файле .bashrc в домашнем каталоге моего пользователя я вижу только:

Итак, откуда берутся следующие каталоги, если их нет в файле .bashrc моего пользователя?

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

В Linux общесистемные файлы конфигурации находятся в каталоге /etc. Например, в /etc/bashrc.

Давайте выясним, откуда взялось это начальное значение PATH, используя рекурсивную группу grep от имени пользователя root в каталоге /etc.

Единственный результат — файл конфигурации демона SSH. Согласно комментарию в этом файле, демон скомпилирован со значением PATH, которое я вижу в своей системе.

Вот откуда берется значение PATH!

Как исправить ошибку Bash «команда не найдена»?

До сих пор мы видели, что такое PATH…

… но как это поможет нам исправить ошибку «команда не найдена»?

Прежде чем рассматривать, как ошибка command not found может быть связана с PATH, давайте рассмотрим простую причину.

Прежде чем выполнять какие-либо другие проверки, убедитесь, что вы не ошиблись в написании команды при ее выполнении.

В основном это может происходить с теми, кто плохо знаком с Linux и изучает команды.

Если вы ввели команду правильно, продолжайте…

  1. Команда доступна в системе, но ее каталог отсутствует в PATH.
  2. Эта команда вообще недоступна в системе.

Сценарий 1 может возникнуть, если вы загружаете определенный инструмент в свою систему Linux и не добавляете каталог, в котором находится двоичный файл, в переменную среды PATH.

Чтобы обновить значение PATH, необходимо изменить файл .bashrc.

Допустим, текущее значение PATH:

И я хочу добавить к нему каталог /opt/install, потому что именно там находится команда, которую я хочу выполнить. Эта строка будет выглядеть так:

Порядок каталогов в PATH важен, первый каталог имеет более высокий приоритет, чем второй каталог, и так далее.

Итак, если вы хотите, чтобы каталог /opt/install был первым в поиске при выполнении команды, определение PATH будет таким:

Обратите внимание на доллар $ перед PATH. Это ДЕЙСТВИТЕЛЬНО важно, поскольку относится к существующему значению переменной PATH.

Пропуск знака $ в этой строке может привести к катастрофическим последствиям для вашей системы. Это потому, что оболочка больше не знает, где найти основные команды, такие как ls, cd, vim и т. д.…

В следующем разделе мы рассмотрим сценарий 2, в котором команда недоступна в вашей системе Linux.

Выполнение команды, недоступной в системе

Теперь давайте посмотрим, что происходит, когда мы выполняем команду, недоступную в системе Linux.

Возьму, например, команду rsync:

Как узнать, появляется ли ошибка «команда не найдена» из-за того, что команды rsync нет в PATH или из-за того, что ее вообще нет в системе?

Я могу использовать диспетчер пакетов моего дистрибутива Linux. В данном случае я использую CentOS и, следовательно, воспользуюсь командой yum, чтобы узнать, установлен ли пакет rsync:

Эта команда не возвращает никаких результатов, это означает, что rsync недоступен в системе.

Еще один вариант — использовать команду RPM для запроса пакетов RPM, установленных в моей системе Linux:

Опять нет результатов для пакета rsync.

Итак, давайте установим его!

Команда поиска yum возвращает результат для rsync:

И мы можем установить пакет rsync с помощью команды «yum install»:

И теперь, если я попытаюсь снова выполнить команду rsync, чтобы проверить ее версию:

Команда работает хорошо!

Заключение

  1. Команда написана с ошибкой.
  2. Команда доступна в системе, но ее каталог отсутствует в PATH.
  3. Эта команда недоступна в системе.

Я также объяснил, как работает переменная среды PATH и насколько она важна для системы Linux.

Большую часть времени в ОС Linux мы запускаем команды и программы, вводя команды в программе терминала. Однако иногда, когда мы запускаем команду, мы получаем ошибку «bash: команда не найдена». Может быть много причин для получения этой ошибки. Иногда при минимальной установке ОС мы не видим большую часть команд в нашей системе. Как и при минимальном развертывании, устанавливаются только те пакеты, которые необходимы для запуска операционной системы, а остальные пропускаются. Хотя иногда программа может быть уже установлена, но повреждена. Эта ошибка также возникает, если вы неправильно набираете команду. Поэтому нам необходимо определить причины, вызывающие эту ошибку, а затем устранить ее.

В этой статье мы объясним возможные причины появления ошибки «команда bash не найдена» при попытке запустить команду в Терминале. Наряду с этим мы также обсудим некоторые возможные решения, которые вы должны попробовать, чтобы удалить ошибку и успешно запустить команды и программы.

Команда Bash не найдена: распространенные причины и решения

Ошибка в написании

Ошибка в написании команды — это распространенная ошибка, которую допускают пользователи при запуске команды в оболочке. Все команды для Linux и UNIX чувствительны к регистру, и мы должны вводить команду правильно.

Решение

  • Орфографическая ошибка
  • Пробелы среди команд и различные параметры
  • Неправильная замена символов, таких как 1, на I или l.
  • Замена прописных букв строчными

Пакет не установлен

Иногда вы получаете сообщение об ошибке «команда не найдена», потому что пакет не установлен в вашей системе или поврежден. Чтобы проверить, установлен ли пакет в вашей системе, выполните следующую команду в Терминале:

Он вернет вывод с результатами, показывающими, установлен ли пакет в вашей системе или нет. Например, вы хотите запустить команду apt-fast и получаете сообщение об ошибке «команда не найдена», затем выполните следующую команду, чтобы проверить, установлена ​​ли она в вашей системе:

Решение

Если пакет отсутствует в системе, вам придется установить его с помощью команды apt-get следующим образом:

В приведенном выше случае это будет:

После установки пакета попробуйте выполнить команду, чтобы проверить, устранена ли ошибка.

Неверный путь

Еще одна важная причина, по которой вы получаете сообщение об ошибке «команда bash не найдена», заключается в том, что искомый путь неверен. Когда пользователь вводит команду, система ищет ее во всех известных ей местах, а если не находит команду в искомых местах, возвращает ошибку.

Решение

Шаг 1. Найдите путь команды

Сначала найдите путь к команде, где она установлена, с помощью команды «what» или «whereis». Например, вы пытаетесь запустить команду apt-fast, и она выдает ошибку «команда не найдена». Выполните следующую команду, чтобы найти расположение команды apt-fast.

Запишите путь в приведенном выше выводе, а затем определите, входит ли указанный выше путь в ваш текущий путь поиска или нет.

Шаг 2. Найдите текущий путь поиска

Чтобы просмотреть текущий путь поиска, выполните в Терминале следующую команду:

PATH (написано заглавными буквами) указывает оболочке расположение для поиска исполняемых файлов. Большинство команд обычно находятся в путях /usr/bin, /bin и /usr/local/bin. Когда мы запускаем любую команду, она фактически запускается из этих каталогов.

Шаг 3. Добавьте путь команды к пути поиска

Если путь к команде не входит в текущий путь поиска вашей оболочки, попробуйте добавить его в путь поиска следующим образом:

Из результатов поиска «который» мы обнаружили, что apt-fast установлен в /usr/sbin. Чтобы добавить /usr/sbin к текущему пути поиска, используйте следующую команду:

Теперь подтвердите добавленный вами путь с помощью следующей команды:

Чтобы сохранить изменения, выполните следующую команду в Терминале

Теперь еще раз попробуйте запустить команду, для которой вы получили сообщение об ошибке, и посмотрите, устранена ли ошибка.

Ошибка Bash command not found встречается почти у каждого системного администратора и пользователя. В этой статье мы узнали о нескольких решениях, которые вы должны попробовать, чтобы устранить эту ошибку.

Об авторе

Карим Буздар

Карим Буздар имеет степень инженера в области телекоммуникаций и несколько сертификатов системного администратора. Как ИТ-инженер и технический автор, он пишет для различных веб-сайтов. Он ведет блог на LinuxWays.

Я обновлял свой .bash_profile и, к сожалению, сделал несколько обновлений, и теперь получаю следующее:

Мой bash_profile на самом деле извлекает другие файлы .sh (использует их), поэтому я не совсем уверен, какая модификация могла вызвать это.

Теперь, если я даже попытаюсь просмотреть список файлов, я получу:

Любые советы о том, как отследить источник ошибки и как использовать терминал для основных задач, таких как просмотр файлов и т. д.?

/bin/ls перечисляет файлы, но затем я вижу следующие две строки под ним: -bash: sed: команда не найдена -bash: git: команда не найдена

Если проблема связана с /etc/environment , используйте следующую команду (в CentOS 6): ssh -t root@ "/bin/bash -c '/bin/mv /etc/environment /tmp/'"

Для виртуальной машины после перезагрузки она переходит к "Вход в аварийный режим. Выйдите из оболочки, чтобы продолжить".

9 ответов 9

Мне кажется, что в тот или иной момент вы перезаписываете переменную среды PATH по умолчанию. Тип ваших ошибок указывает на то, что PATH не содержит /bin , где находятся вышеуказанные команды (включая bash ).

Например, если вы делаете

Послушайте, мы не знаем, что вы делаете, какие еще файлы вы ищете, что в них содержится. И да, каждый раз, когда вы создаете файл, вы добавляете что-то к своему пути (и это нормально, потому что обычно .bash_profile будет прочитан только один раз). Пройдите его один за другим и посмотрите, что произойдет. Кроме того, разве EC2_HOME не является переменной? Если да, то вы должны поставить перед ним символ $ следующим образом: export PATH=$PATH:$EC2_HOME/bin

Это была моя проблема. Чтобы сбросить мой PATH, чтобы я мог войти в свой профиль bash и стереть неверную строку PATH в моем ~/.bash_profile, мне пришлось сбросить свой PATH, выполнив: PATH=/usr/local/bin:/usr/bin:/ bin:/usr/sbin:/sbin

Я теряю счет тому, сколько раз я застрял в этой проблеме и сколько раз этот ответ мне очень помог

Один из способов начать отладку скрипта bash — запустить подоболочку с параметром -x:

Это покажет вам каждую команду и ее аргументы, которые выполняются при запуске этой оболочки.

В конечном счете, я думаю, что январское предложение сработает для вас, но эту ссылку стоит прочитать для будущих проблем.

Фантастическое решение. Легко и просто определить, где именно ошибка. Спасибо! Но, похоже, есть «проблема». После того, как я использую команды, любая выполненная команда отображается в консоли. Есть ли способ отключить его, кроме перезапуска оболочки? Я не особо разбираюсь в bash.

Возможно, я нашел проблему. Это сработало для меня и может сработать для вас.

В моем редакторе по умолчанию использовались сохранения Windows (LF/CR). Поскольку я использую обе системы, это казалось логичным. Когда мне нужно было возиться с моим .bash_profile , я понял после комментирования и попыток, что ничего не работает. Я изменил свои сохранения в формат OS X (только CR) и вуаля! Больше никаких "команда не найдена" в терминале!

Это может быть так просто!

Это то, что я испытал! Спасибо. Быстрый совет: используйте эту команду для преобразования файлов в вашей среде Unix: $ dos2unix .bash_profile

Вы уверены, что сделали именно это? Поскольку OS X является Unix, она использует окончания строки в стиле Unix с одним символом перевода строки (LF), а не возвратом каретки (CR). Единственной популярной операционной системой, которая использовала последнюю, была OS 9 и более ранние версии, и приложения Linux/Ubuntu были бы весьма сбиты с толку.

После того, как я не смог повторно запустить . ~/.bash_profile или любые обычные команды, такие как whoami, grep и т. д. Я нашел способ просто повторно экспортировать необходимые пути:

Это должно работать в большинстве систем, хотя некоторые из этих путей присутствуют не во всех пакетах Linux. Мне помогло.

Думаю, я нашел решение проблемы, если не для вас, то для тех, у кого похожая проблема. Мой ответ на это заключается в том, что у меня нет .bash_profile .

Поэтому я поискал по всему Интернету и нашел решение. По сути, откройте терминал, введите touch ~/.bash_profile и нажмите Enter . Это исправило мои проблемы. Надеюсь, это сделает то же самое для вас

У меня такая же проблема, как и у вас. Я не могу использовать многие популярные команды ( ls , vi/vim , ..) и не могу редактировать /root/.bashrc, когда я вхожу в root с помощью su.

Наконец-то. Я нашел решение этой проблемы. Просто войдите в систему с помощью команды:

После этого вы можете использовать

У меня была такая же проблема. Возможно, вы пропустили $ при экспорте PATH. Вы должны открыть .bash_profile в TextEdit. Если вы не можете найти файл в каталоге, нажмите Command + Shift + >, чтобы отобразить скрытые файлы.

Затем исправьте ПУТЬ и сохраните.

В каталоге терминала введите: source .bash_profile.

Это должно решить проблему.

У меня была точно такая же проблема:

Если я введу lxterminal:

если я ввел точно такую ​​же команду в tty2, я получил:

\r означает конец строки DOS, поэтому я открыл файл ~/.bashrc и изменил концы строк в Krusader на стиль unix. И уже работает. :-)

DOS EOL создает ложные проблемы и в скриптах bash.

У меня возникла та же проблема только что после того, как я изменил .bash_profile . И я хочу изменить его обратно, но теперь я не могу, потому что я потерял все команды, особенно команду nano и команду vim, поэтому я не могу открыть .bash_profile с командой. И .bash_profile — это скрытый файл, который я не могу открыть с помощью Finder.

Поэтому мне нужно найти способ открыть файл .bash_profile. Перепробовав множество способов, я обнаружил, что могу использовать Atom, потому что Atom может читать все файлы в папке проекта, включая скрытые файлы. Так что просто откройте Atom и выберите File -> Open , выберите папку, а затем все скрытые файлы отображаются в древовидном представлении Atom, включите .bash_profile !! После того, как я удалил последнюю модификацию и снова открыл Терминал, все команды вернулись! :)

Очень активный вопрос. Заработайте 10 репутации (не считая бонуса ассоциации), чтобы ответить на этот вопрос. Требование к репутации помогает защитить этот вопрос от спама и отсутствия ответа.

Не тот ответ, который вы ищете? Просмотрите другие вопросы с меткой командной строки bash или задайте свой вопрос.

Связанные

Горячие вопросы о сети

Чтобы подписаться на этот RSS-канал, скопируйте и вставьте этот URL-адрес в программу для чтения RSS.

дизайн сайта / логотип © 2022 Stack Exchange Inc; вклады пользователей под лицензией cc by-sa. версия 2022.3.18.41718

Мой шелл-баш дает мне баш : . : ошибка command not found, и я не знаю, как начать ее решать. Также я понятия не имел, что нужно выбирать теги ведьм, кроме «bash» «Debian».

Я root, и эти две программы уже установлены. ОС — Debian Buster, только что установленная. В процессе установки я отключил все опции на этапе настройки Tasksel. Я думаю, что это больше связано с моей оболочкой. Позже я использую для установки потрясающих мозаичных окон.

Вот два примера: Сначала я попытался запустить программу. Во-вторых, я проверяю, установлена ​​ли программа.

root @machine vs root @adrien хорошая попытка скрыть ваше имя хоста, но вам нужно охватить все экземпляры :) или это произошло само по себе?

4 ответа 4

Обратите внимание, что Debian переключился на другую ветвь команды su в Debian 10 ("Buster"). В отличие от предыдущих версий Debian, он больше не добавляет автоматически /sbin , /usr/sbin и /usr/local/sbin в ваш $PATH автоматически, когда вы используете простой su, чтобы стать пользователем root.

Многих это удивило.

Вместо этого вы можете использовать su - для явной полной повторной инициализации среды при переключении на пользователя root: это вызовет ошибку . Каталоги /sbin должны быть включены в $PATH .

Кроме того, вы можете автоматизировать добавление каталогов в $PATH всякий раз, когда вы становитесь пользователем root, как это предлагается в ответе GAD3R.

(Примечание: правило Stack Exchange заключается в том, чтобы задавать только один вопрос в каждом сообщении с вопросом. Подобные множественные вопросы затруднят поиск подходящих ответов другим людям с той же проблемой.)

Это оболочка совместимости, которая позволяет вам по-прежнему использовать классические команды выключения/перезагрузки в стиле SysV, которые, возможно, глубоко укоренились в мышечной памяти многих давних администраторов Linux/Unix.

В Debian Buster это нормально, если у вас установлен пакет systemd-sysv. Существует символическая ссылка /sbin/reboot -> /bin/systemctl , поэтому, если вы использовали su - или sudo -i, чтобы стать пользователем root, или каким-либо другим способом добавили /sbin в свой $PATH, вы можете просто запустить reboot . Команда systemctl проверит свой $0 и увидит, что он вызывается как «перезагрузка», и сделает именно это, чтобы сохранить совместимость со старой командой перезагрузки в стиле SysV. Команды halt , shutdown и poweroff работают одинаково.

Проверьте $PATH и посмотрите, есть ли в нем эти программы.

должен показывать ваш системный путь поиска. Сравните с чем

сообщит вам полный/абсолютный путь к программе.

Если вы не можете найти его таким образом, попробуйте:

Modprobe находится в /sbin (или может быть в /usr/sbin ) и является символической ссылкой на /bin/kmod . Если у вас нет пути к каталогу, в котором находится modprobe, вы не сможете его использовать, если не укажете полный путь, например $ /sbin/modprobe .

Вы можете отправить результат $ set | grep PATH, и мы можем увидеть, что с ним не так.

Поскольку ваш выходной PATH указывает, что в нем нет /sbin и /usr/sbin, вы должны добавить его в свой $HOME/.bashrc . Чтобы проверить это, сначала используйте:

и проверьте, работает ли он. Если это так, добавьте его в $HOME/.bashrc, и если вы хотите, чтобы он был доступен для каждого пользователя, добавьте его в /etc/profile, как предложил @GAD3R.

Читайте также: