Warum gibt wget bei der Ausführung mit sudo einen Fehler aus, funktioniert aber ohne?

21

Ich habe den folgenden Befehl ausprobiert:

$ wget -q --tries=10 --timeout=20 --spider http://google.com

(Von diesem SO Post . Ich möchte meine Internetverbindung in Bash überprüfen.)

Ich erhalte folgende Ausgabe:

Spider mode enabled. Check if remote file exists.
--2015-09-28 09:55:50--  http://google.com/
Connecting to 127.0.0.1:3128... connected.
Proxy request sent, awaiting response... 302 Found
Location: http://www.google.de/?gfe_rd=cr&ei=k_IIVreaN-yH8Qfe1Yu4CA [following]
Spider mode enabled. Check if remote file exists.
--2015-09-28 09:55:50--  http://www.google.de/?gfe_rd=cr&ei=k_IIVreaN-yH8Qfe1Yu4CA
Connecting to 127.0.0.1:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Remote file exists and could contain further links,
but recursion is disabled -- not retrieving.

Scheint OK zu sein, aber wenn sudoich den Befehl mit ausführe , erhalte ich Folgendes:

Spider mode enabled. Check if remote file exists.
--2015-09-28 09:55:27--  http://google.com/
Resolving google.com (google.com)... failed: Name or service not known.
wget: unable to resolve host address google.com

Ich brauche diese Zeile in einem Skript, mit dem ich aufrufe sudound damit es immer fehlschlägt.

Kann mir jemand den Grund dafür nennen? Wie kann ich das umgehen?

h0ch5tr4355
quelle
Sorry, ich wollte eigentlich die Fragen in AskUbuntu erstellen . Ich
bin
11
Es ist hier zum Thema.
Deltik
4
Es wäre dort Off-Topic.
SnakeDoc
Das sieht nach einem XY-Problem aus . Das Ausführen eines Zufalls wgetbei google.com scheint keine gute Methode zu sein, um zu überprüfen, ob eine Internetverbindung funktioniert. Sie verfügen beispielsweise möglicherweise über eine Verbindung, die HTTP-Verbindungen zu Google zulässt, die jedoch die Aufgaben Ihres Skripts verbietet ; oder Google verbietet möglicherweise den wget-Zugriff auf ihre Website. Was ist das eigentliche Problem, für das Sie sudo wget blaheine mögliche Lösung sehen?
David Richerby

Antworten:

39

Sie haben einen Proxy in Ihrer Umgebung definiert. Dein scheint zu sein127.0.0.1:3128 .

Bei der Ausführung sudowird die Proxy-Umgebungsvariable nicht übergeben, weshalb Sie sie nicht direkt auflösen können google.com.

Mit diesem Befehl können Sie sehen, welche Proxys Sie in Ihren Umgebungsvariablen definiert haben:

env | grep proxy

Weitere Informationen zu Ask Ubuntu

Hinweis: Wenn Sie sudodie HTTP-Proxy-Umgebungsvariable übergeben möchten , versuchen Sie Folgendes:

sudo http_proxy="$http_proxy" wget -q --tries=10 --timeout=20 --spider http://google.com

Sie können auch alle Umgebungsvariablen übergeben, indem Sie Folgendes verwenden sudo -E:

sudo -E wget -q --tries=10 --timeout=20 --spider http://google.com

Der Stapelüberlauf verfügt über andere Optionen, um die Umgebungsvariable beim sudoSpeichern beizubehalten.

Deltik
quelle
5
OK, vielen Dank, dass Sie nicht nur die Antwort, sondern auch die Links zur Erklärung veröffentlicht haben. Arbeitete für mich perfekt.
h0ch5tr4355
7
Sie können auch verwenden sudo -E, um Umgebungsvariablen
beizubehalten
4
Wäre es nicht sudo http_proxy=$http_proxy wget ...besser, nur den http_proxy zu übergeben? Wenn Sie das in einem Skript verwenden, müssen Sie es nicht ändern, wenn sich der Proxy ändert.
Josef
1
Schön, @Josef. Ich habe die Antwort mit Ihrem Vorschlag aktualisiert.
Deltik
1
Sie können auch hinzufügen Defaults env_keep += "http_proxy ftp_proxy", /etc/sudoersum sudo zu veranlassen, diese Umgebungsvariablen automatisch beizubehalten.
François