Мой 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
Затем перезагрузите систему.