Meine Shell Bash gibt einen bash : ... : command not found
Fehler aus und ich weiß nicht, wie ich ihn lösen soll. Außerdem hatte ich keine Ahnung, welche Tags außer „bash“ „Debian“ ausgewählt werden sollten.
Ich bin Root, und diese beiden Programme sind auch schon installiert. Das Betriebssystem ist Debian Buster und frisch installiert. Während des Installationsvorgangs habe ich alle Optionen im Tasksel-Konfigurationsschritt deaktiviert. Ich denke, das hängt eher mit meiner Shell zusammen. Später installiere ich Awesome Tiling Windows.
Hier die Ausgabe für meinen Pfad:
root@machine:~# echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Hier zwei Beispiele: Zuerst habe ich versucht, das Programm auszuführen. Dann habe ich geprüft, ob das Programm installiert ist.
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.
Antwort1
Überprüfen Sie $PATH
, ob diese Programme darin enthalten sind.
$ echo $PATH
sollte zeigen, was Ihr Systemsuchpfad ist. Vergleichen Sie es mit dem
$ dpkg-query -L <package_name>
Wird dir zeigen.
$ command -v program
zeigt Ihnen den vollständigen/absoluten Pfad zum Programm.
Wenn Sie es auf diese Weise nicht finden können, versuchen Sie:
find /sbin modprobe
find /usr/sbin modprobe
Modprobe befindet sich in /sbin
(oder könnte in sein /usr/sbin
) und ist ein symbolischer Link zu . Wenn Sie den Pfad zum Verzeichnis, in dem sich Modprobe befindet, nicht kennen, können Sie es nicht verwenden, es sei denn, Sie geben den vollständigen Pfad an , /bin/kmod
z. B. .$ /sbin/modprobe
Sie können das Ergebnis senden $ set | grep PATH
und wir können sehen, was damit nicht stimmt.
Da Ihre Ausgabe PATH
anzeigt, dass Sie kein /sbin
und /usr/sbin
darin haben, müssen Sie es in Ihrem hinzufügen $HOME/.bashrc
. Um es zuerst zu testen, verwenden Sie:
$ export PATH=$PATH:/sbin:/usr/sbin
und prüfen Sie, ob es funktioniert. Wenn ja, fügen Sie es hinzu $HOME/.bashrc
, und wenn Sie möchten, dass es für jeden Benutzer verfügbar ist, fügen Sie es hinzu, /etc/profile
wie von @GAD3R vorgeschlagen.
PS. $
ist eine Eingabeaufforderung, Sie geben es nicht in die Konsole ein, es zeigt, dass der Befehl in der Shell verwendet wird. Im Allgemeinen $
wird für normale Benutzer als Shell-Eingabeaufforderungsindikator und #
für verwendet root
. Da es ein allgemeines Problem sein kann, nicht nur für Root, habe ich verwendet $
. Bedenken Sie, dass in Ihrem Fall, wenn Sie root
$ sind, # „wird“, aber da Sie bereits als Root angemeldet sind, ändert sich nichts.
Antwort2
Beachten Sie, dass Debian in Debian 10 zu einem anderen Zweig des Befehls gewechselt ist („Buster“). Anders als in früheren Debian-Versionen werden und su
nicht mehr automatisch zu Ihrem hinzugefügt /sbin
, wenn Sie plain verwenden, um Root zu werden./usr/sbin
/usr/local/sbin
$PATH
su
Dies hat viele Leute überrascht.
Sie können su -
stattdessen verwenden, um die Umgebung beim Wechsel zum Root-Benutzer explizit vollständig neu zu initialisieren: Dadurch werden die .../sbin
Verzeichnisse in eingeschlossen $PATH
.
Alternativ können Sie das Hinzufügen der Verzeichnisse automatisieren, $PATH
wenn Sie Root werden.wie in der Antwort von GAD3R vorgeschlagen.
Außerdem ist mir aufgefallen, dass ich meinen Computer mit folgendem neu starten kann:
root@machine:~# Neustart
anstatt.
root@machine:~# systemctl reboot
(Hinweis: Bei Stack Exchange ist es üblich, in jedem Fragenpost nur eine Frage zu stellen. Solche Mehrfachfragen erschweren es anderen Personen mit demselben Problem, passende Antworten zu finden.)
Dies ist ein Kompatibilitäts-Wrapper, der es Ihnen ermöglicht, weiterhin die klassischen Shutdown-/Reboot-Befehle im SysV-Stil zu verwenden, die bei vielen langjährigen Linux-/UNIX-Administratoren tief im Muskelgedächtnis verankert sein dürften.
Antwort3
Sie können den Speicherort der ausführbaren Datei überprüfen: $ which modprobe
und$ which openvpn
Mit su
den Befehlen sind
# /usr/sbin/modprobe
# /sbin/openvpn
Damit su -
wird
# modprobe
# openvpn
D. h., es werden nur vollständige Root-Berechtigungen bzw. der Root-Pfad bereitgestellt. Dies ist für einige Befehle su -
erforderlich : Debian 10./sbin/
/usr/sbin/
Antwort4
Bearbeiten Sie Ihre /etc/profile
wie folgt (die ersten 6 Zeilen):
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
Starten Sie dann Ihr System neu.