Perché wget dà un errore se eseguito con sudo, ma funziona bene senza?


21

Ho provato il seguente comando:

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

(Da questo post SO . Voglio controllare la mia connessione Internet in bash.)

Ottengo il seguente output:

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.

Sembra OK, comunque eseguendo il cmd con sudo, ricevo questo:

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

Ho bisogno di questa linea in uno script, con cui chiamo sudoe quindi fallisce sempre.

Qualcuno può dirmi il motivo di questo? Come posso aggirare questo?


Spiacenti, in realtà volevo creare le domande in AskUbuntu . Non sono sicuro se On-Topic qui ...
h0ch5tr4355,

11
È in argomento qui.
Deltik,

4
Sarebbe fuori tema lì.
SnakeDoc,

Sembra un problema XY . L'esecuzione di una scelta casuale wgetcontro google.com non sembra essere un buon modo per verificare il funzionamento di una connessione Internet: ad esempio, potresti trovarti su una connessione che consente connessioni HTTP a Google ma vieta le cose che il tuo script vuole davvero fare ; o Google potrebbe vietare l'accesso a wget al proprio sito. Qual è il vero problema che hai, per il quale pensi che sudo wget blahsia una potenziale soluzione?
David Richerby,

Risposte:


39

Hai un proxy definito nel tuo ambiente. Il tuo sembra essere 127.0.0.1:3128.

Quando si esegue sudo, la variabile di ambiente proxy non viene passata, motivo per cui non è possibile risolvere direttamente google.com.

Puoi vedere quali proxy / proxy hai definito nelle variabili di ambiente con questo comando:

env | grep proxy

Ulteriori informazioni su Ask Ubuntu

Nota: se si desidera sudopassare la variabile di ambiente proxy HTTP, provare questo:

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

Puoi anche passare tutte le variabili d'ambiente usando sudo -E:

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

Stack Overflow ha altre opzioni per mantenere l'ambiente variabile durante l' sudoing.


5
OK, grazie mille non solo per aver pubblicato la risposta, ma anche per aver pubblicato i collegamenti per una spiegazione. Ha funzionato perfettamente per me.
h0ch5tr4355,

7
Puoi anche usare sudo -Eper preservare le variabili d'ambiente
Squidly,

4
per passare solo il http_proxy, non sudo http_proxy=$http_proxy wget ...sarebbe meglio? Se lo usi in uno script non devi cambiarlo se il proxy cambia.
Josef,

1
Bello, @Josef. Ho aggiornato la risposta con il tuo suggerimento.
Deltik,

1
Puoi anche aggiungere Defaults env_keep += "http_proxy ftp_proxy"a /etc/sudoersper fare in modo che sudo mantenga automaticamente quelle variabili env.
Francois,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.