it-swarm.com.de

befehl bei Verwendung von sudo nicht gefunden

Es gibt ein paar Fragen auf der Website, die mit meinem Problem zusammenhängen, aber ich konnte in keiner eine Lösung finden.

Mein Betriebssystem ist Ubuntu 12.04. Ich habe mvn in /tools/noarch/Apache-maven-3.1.1 installiert und die folgenden Zeilen am Ende meines /etc/profile hinzugefügt:

export M2_HOME=/tools/noarch/Apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH

Danach führe ich source /etc/profile aus.

Jetzt ist mein Problem: Wenn ich mvn --version ausführe, ist der Befehl erfolgreich und mvn ausführbar. Wenn ich Sudo mvn --version ausführe, erhalte ich die Ausgabe: Sudo: mvn: command not found. Ich weiß, dass PATH möglicherweise anders ist, wenn ich einen Befehl mit Sudo ausführe, und deshalb habe ich Folgendes versucht:

$>Sudo echo $PATH
/tools/noarch/Apache-maven-3.1.1/bin:... some other stuff ...

Ich habe auch versucht, Sudo su - auszuführen und dann mvn --version einzugeben. In diesem Fall wird mvn erfolgreich gefunden und der Befehl ist erfolgreich. Was geht hier vor sich?

45
izomorphius

$PATH wird von Ihrer Shell ausgewertet, sodass Ihre Prüfung nicht so funktioniert, wie Sie es erwarten.

/etc/sudoers ist so konfiguriert, dass Ihr PATH durch einen Standardcode ersetzt wird.

Sudo lädt keine Login-Shell-Umgebung, bevor der Befehl ausgeführt wird. Daher wird die Standardeinstellung PATH aus /etc/sudoers verwendet. su - öffnet eine Login-Shell, bei der /etc/profile geladen wird. Siehe man bash, AbschnittAUFRUF.

Entfernen Sie einfach das Zurücksetzen von PATH in /etc/sudoers. Es ist wahrscheinlich eine Regel namens secure_path.


CentOS

In CentOS können Sie PATH zum Abschnitt Defaults env_keep hinzufügen:

Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
                        LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                        LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                        LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                        LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                        _XKB_CHARSET XAUTHORITY PATH"
35
Daniel Beck

Gib Sudo deine aktuelle PATH mit:

Sudo env "PATH=$PATH" your_command
39
opyate

Um auf die Antwort von @ opyate einzugehen, verwende ich das folgende Shell-Skript (das beispielsweise mysudo heißen kann):

#!/bin/bash
Sudo -E env "PATH=$PATH" "[email protected]"
  • -E weist Sudo an, die Umwelt zu schonen.
  • env "PATH=$PATH" wird außerhalb des Aufrufs Sudo erweitert, wodurch die externe PATH auch innerhalb der Sudo verfügbar wird (dies ist zusätzlich zum -E erforderlich, da die PATH normalerweise zusätzlich zu der Behandlung, die die gesamte Umgebung erhält, eine Sonderbehandlung erhält).
  • "[email protected]" übergibt die Argumente, die unser Skript empfängt, an die Zeile Sudo.

Speichern Sie das Skript in einer Datei in einem Verzeichnis in der PATH, geben Sie ihm die +x-Berechtigung, und klicken Sie auf OK.

11
Tom

Da die aktuellen Antworten etwas vage sind, lautet die spezifische Einstellung für /etc/sudoers, mit der Sie Ihren Pfad ändern, secure_path:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Sie können es mit Sudo visudo ändern oder noch besser die Verzeichnisse hinzufügen, die Sie benötigen:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
4
mikemaccana

Ich hatte das gleiche Problem, als ich Maven zum ersten Mal installierte. Das Problem wurde gelöst, nachdem ich die beiden Zeilen hinzugefügt hatte.

export M2_HOME=/tools/noarch/Apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH

zu vier Dateien:

/root/.bashrc
/root/.profile

und für den aktuellen Benutzer (mehran ist mein Ubuntu-Benutzername):

/home/mehran/.bashrc
/home/mehran/.profile
2
Mehran Hatami

Sie müssen die PATH-Variable von root genau so ändern, wie Sie es für sich getan haben, d. H. , indem Sie diese beiden Zeilen in Sudos Profil hinzufügen, das sich in /root/.bashrc befindet.

1
MariusMatutiae