Ich habe ein JDK in installiert /opt
und ein Shell-Skript in dort platziert, /etc/profile.d/
wo ich export
die PATH-Variable geändert habe, damit ich Java problemlos ausführen konnte. Das Problem ist, dass dies nur für mein lokales Konto funktioniert hat, nicht für sudo
. Wenn ich versuche, sudo
den Befehl einzugeben, wird angezeigt sudo: java: command not found
. Ich habe versucht, die export
Befehle am Ende von .bashrc
und einzufügen rc.local
, aber keine der beiden Optionen scheint dieses Verhalten zu ändern. Ich möchte in der Lage sein, auszuführen. sudo java
Wo kann ich also den PATH beim Booten so ändern, dass sudo
er angezeigt wird?
Bearbeiten: Zur Information, dies sind die Zeilen, die ich überall hinzugefügt habe, wo ich es versucht habe:
export JAVA_HOME="/opt/jdk-16.0.2"
export PATH="$PATH:${JAVA_HOME}/bin"
Antwort1
Ihr Problem ist nicht, dass jeder oder überhaupt irgendjemand der Root ist.Ihr Problem ist NURsudo
weil sudo
es seinen eigenen PATH verwendet; es verwendet NICHT den in Ihrer (aufrufenden) Shell oder einer anderen Shell oder Shell-Konfiguration festgelegten PATH (es sei denn, Sie verwenden , sudo -i
das die Shell des Zielbenutzers, standardmäßig root, mit seiner üblichen „Anmelde“-Konfiguration ausführt), weil die Verwendung eines benutzersteuerbaren PATH die Sicherheit gefährden könnte, was den gesamten Daseinszweck von sudo verletzt. Siehe
So legen Sie den Pfad für Sudo-Befehle fest
Warum bewirkt `sudo env "PATH=$PATH"` überhaupt etwas?
Übergeben von PATH durch sudo
Probleme mit der PATH-Variable als Sudo-Benutzer
Die direkteste Lösung besteht darin, den vollständigen Pfadnamen des Programms zu verwenden, das Sie ausführen möchten. Anstatt ihn auszuschreiben, können Sie Folgendes tun:
sudo $(which java) # or maybe $(type -p java) in bash
das sucht Java indeinShell PATH ruft dann sudo mit demErgebnis.