Por que o wget comete um erro quando executado com o sudo, mas funciona bem sem?

21

Eu tentei o seguinte comando:

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

( Nesta postagem da SO . Quero verificar minha conexão com a Internet no bash.)

Recebo a seguinte saída:

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 OK, no entanto, executando o cmd sudo, recebo o seguinte:

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

Eu preciso dessa linha em um script, com o qual chamo sudoe, portanto, sempre falha.

Alguém pode me dizer o motivo disso? Como posso resolver isso?

h0ch5tr4355
fonte
Desculpe, eu realmente queria criar as perguntas no AskUbuntu . Não tenho certeza se On-Topic aqui ...
h0ch5tr4355 28/08/15
11
Está no tópico aqui.
Deltik 28/09/15
4
Seria Off-Topic lá.
SnakeDoc 28/09/2015
Isso parece um problema XY . Executar aleatoriamente wgetno google.com não parece ser uma boa maneira de verificar se uma conexão à Internet está funcionando: por exemplo, você pode estar em uma conexão que permita conexões HTTP ao Google, mas proíbe o que seu script realmente deseja fazer ; ou o Google pode proibir o acesso do wget ao site deles. Qual é o seu problema real, para o qual você acha que sudo wget blahé uma solução potencial?
David Richerby

Respostas:

39

Você tem um proxy definido em seu ambiente. O seu parece ser 127.0.0.1:3128.

Quando você executa sudo, a variável de ambiente proxy não é passada, e é por isso que você não pode resolver diretamente google.com.

Você pode ver qual proxy / proxies você definiu em suas variáveis ​​de ambiente com este comando:

env | grep proxy

Informações adicionais sobre o Ask Ubuntu

Nota: Se você deseja sudopassar a variável de ambiente do proxy HTTP, tente o seguinte:

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

Você também pode passar todas as variáveis ​​de ambiente usando sudo -E:

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

O estouro de pilha tem outras opções para manter a variável de ambiente ao sudoing.

Deltik
fonte
5
OK, muito obrigado por não apenas postar a resposta, mas também postar os links para explicação. Funcionou para mim perfeitamente.
h0ch5tr4355 28/09/2015
7
Você também pode usar sudo -Epara preservar variáveis ​​de ambiente
Squidly
4
por passar apenas o http_proxy, não sudo http_proxy=$http_proxy wget ...seria melhor? Se você usar isso em qualquer script, não precisará alterá-lo se o proxy mudar.
Josef
1
Bom, @Josef. Atualizei a resposta com sua sugestão.
Deltik
1
Você também pode adicionar Defaults env_keep += "http_proxy ftp_proxy"para /etc/sudoersfazer com que o sudo preserve automaticamente essas variáveis ​​env.
Francois