Mengapa wget memberikan kesalahan ketika dieksekusi dengan sudo, tetapi berfungsi dengan baik tanpa?

21

Saya mencoba perintah berikut:

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

(Dari posting SO ini . Saya ingin memeriksa koneksi internet saya di bash.)

Saya mendapatkan hasil sebagai berikut:

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.

Sepertinya baik-baik saja, namun menjalankan cmd dengan sudo, saya menerima ini:

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

Saya perlu baris ini dalam sebuah skrip, yang saya panggil sudodan karenanya selalu gagal.

Adakah yang bisa memberi tahu saya alasannya? Bagaimana saya bisa mengatasinya?

h0ch5tr4355
sumber
Maaf, saya sebenarnya ingin membuat pertanyaan di AskUbuntu . Tidak yakin apakah On-Topic di sini ...
h0ch5tr4355
11
Ada di-topik di sini.
Deltik
4
Itu akan menjadi Off-Topic di sana.
SnakeDoc
Ini terlihat seperti masalah XY . Menjalankan sembarang acak wgetterhadap google.com tampaknya bukan cara yang baik untuk memeriksa apakah koneksi internet berfungsi: misalnya, Anda mungkin berada pada koneksi yang memungkinkan koneksi HTTP ke Google tetapi melarang hal-hal yang benar-benar ingin dilakukan skrip Anda ; atau Google mungkin melarang akses ke situs mereka. Apa masalah sebenarnya yang Anda miliki, yang menurut Anda itu sudo wget blahadalah solusi potensial?
David Richerby

Jawaban:

39

Anda memiliki proxy yang ditentukan di lingkungan Anda. Milikmu tampaknya 127.0.0.1:3128.

Ketika Anda menjalankan sudo, variabel lingkungan proxy tidak lulus, itulah sebabnya Anda tidak bisa langsung menyelesaikannya google.com.

Anda dapat melihat proksi / proksi apa yang telah Anda tetapkan dalam variabel lingkungan Anda dengan perintah ini:

env | grep proxy

Informasi tambahan tentang Tanya Ubuntu

Catatan: Jika Anda ingin sudomeneruskan variabel lingkungan proxy HTTP, coba ini:

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

Anda juga dapat melewatkan semua variabel lingkungan menggunakan sudo -E:

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

Stack Overflow memiliki opsi lain untuk menjaga variabel lingkungan saat sudoing.

Deltik
sumber
5
OK, terima kasih banyak untuk tidak hanya memposting jawaban, tetapi juga memposting tautan untuk penjelasan. Bekerja untuk saya dengan sempurna.
h0ch5tr4355
7
Anda juga dapat menggunakan sudo -Euntuk melestarikan variabel lingkungan
Squidly
4
hanya dengan melewatkan http_proxy, bukankah sudo http_proxy=$http_proxy wget ...lebih baik? Jika Anda menggunakannya dalam skrip apa pun, Anda tidak perlu mengubahnya jika proxy berubah.
Josef
1
Bagus, @ Josef. Saya telah memperbarui jawabannya dengan saran Anda.
Deltik
1
Anda juga dapat menambahkan Defaults env_keep += "http_proxy ftp_proxy"untuk /etc/sudoersmembuat sudo otomatis melestarikan variabel env.
Francois