Dlaczego wget wyświetla błąd podczas wykonywania z sudo, ale działa bez niego?

21

Próbowałem następującego polecenia:

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

(Z tego posta SO . Chcę sprawdzić moje połączenie internetowe w bash.)

Otrzymuję następujące dane wyjściowe:

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.

Wydaje się OK, jednak uruchamiając cmd z sudo, otrzymuję to:

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

Potrzebuję tej linii w skrypcie, do którego dzwonię, sudowięc zawsze się nie udaje.

Czy ktoś może mi powiedzieć, dlaczego? Jak mogę to obejść?

h0ch5tr4355
źródło
Niestety, naprawdę chciałem utworzyć pytania w AskUbuntu . Nie jestem pewien, czy dostępny jest tutaj On-Topic ...
h0ch5tr4355,
11
Tutaj jest na temat.
Deltik
4
Byłoby tam Off-Topic.
SnakeDoc,
To wygląda na problem XY . Wykonywanie losowe wgetprzeciwko google.com nie wydaje się dobrym sposobem na sprawdzenie, czy połączenie internetowe działa: na przykład możesz mieć połączenie, które zezwala na połączenia HTTP z Google, ale zabrania tego, co skrypt naprawdę chce zrobić ; lub Google może zabronić wgetowi dostępu do ich witryny. Jaki masz faktyczny problem, który Twoim zdaniem sudo wget blahjest potencjalnym rozwiązaniem?
David Richerby

Odpowiedzi:

39

Masz proxy zdefiniowane w swoim środowisku. Twój wydaje się być 127.0.0.1:3128.

Po uruchomieniu sudozmienna środowiskowa proxy nie jest przekazywana, dlatego nie można bezpośrednio rozwiązać google.com.

Za pomocą tego polecenia możesz zobaczyć, jakie proxy / proxy zdefiniowałeś w zmiennych środowiskowych:

env | grep proxy

Dodatkowe informacje na temat Ask Ubuntu

Uwaga: jeśli chcesz sudoprzekazać zmienną środowiskową proxy HTTP, spróbuj tego:

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

Możesz również przekazać wszystkie zmienne środowiskowe, używając sudo -E:

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

Przepełnienie stosu ma inne opcje zachowania zmiennej środowiskowej podczas sudoing.

Deltik
źródło
5
OK, dziękuję bardzo za nie tylko opublikowanie odpowiedzi, ale także opublikowanie linków do wyjaśnienia. Pracował dla mnie idealnie.
h0ch5tr4355
7
Możesz także użyć sudo -Edo zachowania zmiennych środowiskowych
Squidly,
4
tylko za przekazanie http_proxy nie sudo http_proxy=$http_proxy wget ...byłoby lepiej? Jeśli użyjesz tego w dowolnym skrypcie, nie musisz go zmieniać, jeśli zmienia się serwer proxy.
Josef
1
Niezły, @Josef. Zaktualizowałem odpowiedź z twoją sugestią.
Deltik
1
Możesz także dodać Defaults env_keep += "http_proxy ftp_proxy"do, /etc/sudoersaby sudo automatycznie zachowywał te zmienne env.
Francois