dpkg kann ldconfig / start-stop-daemon in der PATH-Variablen nicht finden

41

Ich habe versucht, das bsd-mailxDienstprogramm zu installieren, das Paket wurde jedoch installiert. Ich frage mich über den Fehler.

Dies ist der Fehler, den ich erhalte:

Preconfiguring packages ...
dpkg: warning: 'ldconfig' not found in PATH or not executable.
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable.
dpkg: error: 2 expected programs not found in PATH or not executable.
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.
E: Sub-process /usr/bin/dpkg returned an error code (2)
user87142
quelle
Kannst du die Ausgabe von Echo $PATHbitte posten ?
Chaos
@chaos, wie bekomme ich das hin?
User87142
@ user87142 Einfach echo $PATHein Terminal eingeben .
John WH Smith
@ Chaos, ich bekomme das ... / usr / local / bin: / usr / bin: / bin: / usr / games
user87142
Und die Ausgabe von cat /etc/environment?
Chaos

Antworten:

59

Zuallererst sind die Zeilen, an denen Sie wirklich interessiert sind:

dpkg: warning: 'ldconfig' not found in PATH or not executable.
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable.

Diese Fehler wurden mehrmals von Debian- und Ubuntu-Benutzern gemeldet (Sie können sie tatsächlich googeln, um weitere Informationen zu erhalten). Es scheint, als ob die PATHVariable nicht richtig gesetzt ist, wenn der Benutzer versucht, einen Befehl auszuführen. Dies sudoist wahrscheinlich das, was Sie versuchen.

Lösung 1: Legen Sie sudoden standardmäßigen sicheren Pfad fest

Öffnen Sie das Programm, /etc/sudoersindem Sie es visudoin Ihrem Terminal ausführen, und stellen Sie sicher, dass die Datei die folgende Zeile enthält:

Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Weitere Informationen zu diesem Problem finden Sie hier (Probleme und Tipps> PATH nicht festgelegt).

Lösung 2: Verwenden Sie das Root-Konto direkt

Verwenden Sie nicht sudo, sondern wechseln Sie zu root, um Ihre Befehle auszuführen. Führen Sie dazu einen der folgenden Befehle aus:

$ sudo -i
$ su 

Sobald Sie als root angemeldet sind, führen Sie einfach Ihre apt-getBefehle erneut aus:

# apt-get ...

Möglicherweise müssen Sie jedoch zuerst root festlegen PATH. Bearbeiten Sie /root/.bashrc(natürlich mit Root-Rechten) und fügen Sie die folgende Zeile hinzu:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Lösung 3: Versuchen Sie, die PATHVariable zur sudoAusführungszeit an zu übergeben.

Stellen Sie dem sudoAufruf einfach die Neudefinition der PATHVariablen voran:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin sudo apt-get ...
John WH Smith
quelle
1
Ich habe versucht, root-Benutzer zu verwenden, aber nicht funktioniert. Ich habe auch den Pfad überprüft.
User87142
@ user87142 Na du hast nicht richtig nachgesehen, da /sbinfehlt. Versuchen Sie es erneut (Lösung 1 und / oder 3). Ich habe Lösung 2 bearbeitet, um eine Möglichkeit zum Bearbeiten des PFADS von root bei interaktiver Verwendung des Kontos einzuschließen.
John WH Smith
Ich habe überprüft , dass ...... Defaults Defaults secure_path = env_reset "/ usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin"
user87142
Haben Sie eine Lösung dafür gefunden?
Brijesh Valera
Eine Variante seiner 3. Lösung ist export PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/bin:/binerst, dann sudo -E apt install nginxdanach. Der -ESchalter bedeutet --preserve-envalso, dass Sie Ihre Umgebungsvariablen in die sudoSitzung exportieren .
Mark Hudson
2

irgendwie hatte ich das selbe problem.

Bitte lesen Sie Ihre Fehlermeldung sorgfältig durch und Sie werden die Lösung finden. Es gibt eine Notiz, die besagt:

Hinweis: Der Pfad von root sollte normalerweise / usr / local / sbin, / usr / sbin und / sbin enthalten.

Dann überprüfte ich meinen Pfad und irgendwie fehlte mir das / sbin in meinem Pfad.

echo $ PATH

Dann habe ich hinzugefügt und das Problem war weg. :)

export PATH = "$ PATH: / sbin"

Tcharam!

Danilo Souza
quelle
Ziemlich sicher , dass dies bereits durch abgedeckt einer bestehenden Antwort , obwohl
Jeff Schaller
1

Ich hatte dieses Problem heute und löste es, indem ich die Zeile auskommentierte (mit einem #)

Defaults    exempt_group=sudo

aus meiner / etc / sudoers-Datei mit

# visudo

als root

Diese Änderung bewirkt, dass sudo die Standardvariable secure_path verwendet, die in derselben Datei festgelegt ist.

Cabub
quelle
Dies löste es für mich auf Ubuntu 18.04.1
sw00