Debian - команда "command" не найдена

Debian - команда "command" не найдена

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

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

Вот вывод для моего пути: root@machine:~# echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

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

root@machine:~# modprobe --verbose
bash: modprobe: command not found

root@adrien:~# apt-get install kmod 
Reading package lists... 
Done Building dependency tree
Reading state information... 
Done kmod is already the newest version (26-1). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

root@machine:~# openvpn 
bash: openvpn: command not found

root@adrien:~# apt-get install openvpn 
Reading package lists... Done Building dependency tree
Reading state information... 
Done openvpn is already the newest version (2.4.7-1). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

решение1

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

$ echo $PATH

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

$ dpkg-query -L <package_name>

покажу вам.

$ command -v program

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

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

find /sbin modprobe
find /usr/sbin modprobe

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

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

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

$ export PATH=$PATH:/sbin:/usr/sbin

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

PS. $это командная строка, вы не вводите ее в консоль, она показывает, что команда используется в оболочке. В общем, для обычного пользователя $используется как индикатор командной строки и #для root. Поскольку это может быть общая проблема, не только root, я использовал $. Имейте в виду, что в вашем случае, когда вы root$ "становитесь" #, но так как вы уже вошли в систему как root, это ничего не изменит.

решение2

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

Это удивило многих.

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

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


Также я заметил, что могу перезагрузить компьютер с помощью:

root@machine:~# перезагрузка

вместо.

root@machine:~# systemctl перезагрузка

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

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

решение3

Вы можете проверить местоположение исполняемого файла: $ which modprobeи$ which openvpn

С suкомандами

# /usr/sbin/modprobe
# /sbin/openvpn

С su -ним становится

# modprobe
# openvpn

Т.е. только su -предоставит полные привилегии root / PATH root. Которые требуются для некоторых /sbin/и /usr/sbin/команд: Debian 10.

решение4

Отредактируйте свой текст /etc/profileследующим образом (первые 6 строк):

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH

Затем перезагрузите систему.

Связанный контент