¿Por qué wget da un error cuando se ejecuta con sudo, pero funciona bien sin él?

21

Intenté el siguiente comando:

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

(De esta publicación SO . Quiero verificar mi conexión a Internet en bash).

Me sale el siguiente resultado:

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.

Parece correcto, sin embargo, ejecutando el cmd con sudo, recibo esto:

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

Necesito esta línea en un script, al que llamo sudoy, por lo tanto, siempre falla.

¿Alguien puede decirme la razón de esto? ¿Cómo puedo evitar eso?

h0ch5tr4355
fuente
Lo siento, en realidad quería crear las preguntas en AskUbuntu . No estoy seguro si en el tema aquí ...
h0ch5tr4355
11
Está en el tema aquí.
Deltik
44
Estaría fuera de tema allí.
SnakeDoc
Esto parece un problema XY . Ejecutar aleatoriamente wgetcontra google.com no parece ser una buena manera de verificar que una conexión a Internet esté funcionando: por ejemplo, puede estar en una conexión que permita conexiones HTTP a Google pero prohíba las cosas que su script realmente quiere hacer. ; o Google podría prohibir el acceso de wget a su sitio. ¿Cuál es el problema real que tiene, para el cual cree que sudo wget blahes una solución potencial?
David Richerby

Respuestas:

39

Tiene un proxy definido en su entorno. La tuya parece ser 127.0.0.1:3128.

Cuando ejecuta sudo, la variable de entorno proxy no se pasa, por lo que no puede resolverla directamente google.com.

Puede ver qué proxy / proxies ha definido en sus variables de entorno con este comando:

env | grep proxy

Información adicional sobre Ask Ubuntu

Nota: Si desea sudopasar la variable de entorno proxy HTTP, intente esto:

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

También puede pasar todas las variables de entorno utilizando sudo -E:

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

Stack Overflow tiene otras opciones para mantener el entorno variable cuando sudoing.

Deltik
fuente
55
OK, muchas gracias por no solo publicar la respuesta, sino también publicar los enlaces para una explicación. Me funcionó perfectamente.
h0ch5tr4355
77
También puede usar sudo -Epara preservar las variables de entorno
Squidly
44
por solo pasar el http_proxy, ¿no sudo http_proxy=$http_proxy wget ...sería mejor? Si usa eso en cualquier script, no tiene que cambiarlo si cambia el proxy.
Josef
1
Buena, @Josef. He actualizado la respuesta con tu sugerencia.
Deltik
1
También puede agregar Defaults env_keep += "http_proxy ftp_proxy"a /etc/sudoerspara que sudo conserve automáticamente esas variables env.
Francois