Wie ändere ich den PATH beim Booten auf eine Weise, die für alle von Bedeutung ist?

Wie ändere ich den PATH beim Booten auf eine Weise, die für alle von Bedeutung ist?

Ich habe ein JDK in installiert /optund ein Shell-Skript in dort platziert, /etc/profile.d/wo ich exportdie 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, sudoden Befehl einzugeben, wird angezeigt sudo: java: command not found. Ich habe versucht, die exportBefehle am Ende von .bashrcund einzufügen rc.local, aber keine der beiden Optionen scheint dieses Verhalten zu ändern. Ich möchte in der Lage sein, auszuführen. sudo javaWo kann ich also den PATH beim Booten so ändern, dass sudoer 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 NURsudoweil sudoes 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 -idas 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.

verwandte Informationen