Ich habe ein bin
Verzeichnis in meinem Home-Ordner erstellt, in dem ich alle meine Skripte ablege. Dann habe ich in meiner .bashrc Folgendes hinzugefügt:
export PATH=$PATH:/home/myusername/bin
So konnte ich von überall auf Dateien zugreifen, die ich dort abgelegt hatte. Einige der Skripte müssen jedoch als root ausgeführt werden. Also dachte ich, ich könnte meine .bashrc-Datei als root verknüpfen (wie in /root/.bashrc auf /home/myusername/.bashrc verweist, weiß nicht, ob dies klug ist), wenn ich ein Skript als root ausführen muss Ich kann einfach tun:
sudo program_that_requires_root
Aber dann bekomme ich ein:
sudo: program_that_requires_root: command not found
Wenn ich mich als root anmelde und das Programm ausführe, funktioniert es jedoch einwandfrei. Was ist also der richtige Weg, um das zu erreichen, was ich will?
sudo
wahrscheinlichsecure_path
anstelle von Ihnen$PATH
. Führen Siesudo -V
als root (z. B.sudo sudo -V
) aus und suchen Sie nach Zeilen, die enthaltenPATH
./etc/sudoers
und suchen Sie diese Zeile:Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
(Pfade können variieren) - Wenn Sie Ihren Benutzerpfad hinzufügenbin
, funktioniert dies. (Vielleicht wird diese Lösung aus anderen Gründen nicht empfohlen; ich weiß es nicht.) Oh, in der erwähnten Datei heißt es, dass Sie sie nicht ändern sollten, aber ich habe es getan, und es funktioniert großartig, zumindest in Bezug auf das, was ich habe versucht zu erreichen (mit dem gleichen Problem wie Sie).Antworten:
Sie müssen sicherstellen, dass diese beiden Zeilen in der sudoers-Datei vorhanden sind.
Weitere Informationen finden Sie unter diesen URLs:
quelle
$
am Ende der zweiten (Code-) Zeile, die beim Kopieren folgte - es sollte natürlich ein abschließendes Zitat sein. Außerdem muss der neue Pfad zu den Benutzer-Binärdateien (und anderen ausführbaren Dateien, wie von @Carlito erwähnt) hinzugefügt werden. (Sie haben das wahrscheinlich getan; wurden gerade abgehackt.)sudo
Setzt diePATH
Umgebungsvariable in den meisten Konfigurationen auf einen integrierten oder vom Administrator bereitgestellten Standard zurück. Sie können also nicht nur tippensudo myscript
.Sie könnten eine Wrapper-Funktion schreiben:
(Dies ist für Bash; ändern Sie
type -P
intype -p
in ksh oder zsh.)quelle
/etc/sudoers
, was eine viel einfachere Lösung zu sein scheint?sudoers
Datei bearbeiten und ändernsecure_path
. Wenn es sich um einen gemeinsam genutzten Computer handelt, ist es unwahrscheinlich, dass der Administrator bereit ist, Sie zu unterstützen: Eine vom Benutzer gewähltesecure_path
Einstellung oder das Neukompilieren von sudo ohne diese Option wäre ein Wartungsproblem.Standardmäßig setzt sudo die Umgebung zurück. Haben Sie versucht, den Pfad zu .bashrc von root hinzuzufügen? Oder rufen Sie sudo mit -E auf (was nur funktioniert, wenn setenv in sudoers gesetzt ist oder für den entsprechenden Befehl das SETENV-Tag gesetzt ist).
quelle
.bashrc
Roots hilft nicht:sudo
Startet hier keine interaktive Bash-Instanz.