Tại sao wget đưa ra một lỗi khi được thực thi với sudo, nhưng hoạt động tốt mà không có?


21

Tôi đã thử lệnh sau:

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

(Từ bài đăng SO này . Tôi muốn kiểm tra kết nối internet của mình trong bash.)

Tôi nhận được đầu ra sau:

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.

Có vẻ ổn, tuy nhiên chạy cmd với sudo, tôi nhận được điều này:

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

Tôi cần dòng này trong một kịch bản, mà tôi gọi với sudovà vì vậy nó luôn luôn thất bại.

Ai đó có thể cho tôi biết lý do cho việc này? Làm thế nào tôi có thể làm việc xung quanh đó?


Xin lỗi, tôi thực sự muốn tạo các câu hỏi trong AskUbfox . Không chắc chắn nếu On-Topic ở đây ...
h0ch5tr4355

11
Đó là chủ đề ở đây.
Deltik

4
Nó sẽ là Off-Topic ở đó.
SnakeDoc

Điều này trông giống như một vấn đề XY . Thực hiện ngẫu nhiên wgetvới google.com dường như không phải là một cách tốt để kiểm tra xem kết nối internet có hoạt động hay không: ví dụ: bạn có thể đang kết nối cho phép kết nối HTTP với Google nhưng cấm những điều mà tập lệnh của bạn thực sự muốn làm ; hoặc Google có thể cấm wget truy cập vào trang web của họ. Vấn đề thực tế bạn có là gì, mà bạn nghĩ đó sudo wget blahlà một giải pháp tiềm năng?
David Richerby

Câu trả lời:


39

Bạn có một proxy được xác định trong môi trường của bạn. Bạn xuất hiện để được 127.0.0.1:3128.

Khi bạn chạy sudo, biến môi trường proxy không được thông qua, đó là lý do tại sao bạn không thể trực tiếp giải quyết google.com.

Bạn có thể xem proxy / proxy nào bạn đã xác định trong các biến môi trường của mình bằng lệnh này:

env | grep proxy

Thông tin bổ sung về Hỏi Ubuntu

Lưu ý: Nếu bạn muốn sudovượt qua biến môi trường proxy HTTP, hãy thử điều này:

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

Bạn cũng có thể vượt qua tất cả các biến môi trường bằng cách sử dụng sudo -E:

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

Stack Overflow có các tùy chọn khác để giữ biến môi trường khi sudoing.


5
OK, cảm ơn bạn rất nhiều vì không chỉ đăng câu trả lời, mà còn đăng các liên kết để giải thích. Làm việc cho tôi hoàn hảo.
h0ch5tr4355

7
Bạn cũng có thể sử dụng sudo -Eđể bảo tồn các biến môi trường
Squidly

4
chỉ vượt qua http_proxy, sẽ sudo http_proxy=$http_proxy wget ...tốt hơn chứ? Nếu bạn sử dụng nó trong bất kỳ tập lệnh nào, bạn không phải thay đổi nó nếu proxy thay đổi.
Josef

1
Đẹp đấy, @Josef. Tôi đã cập nhật câu trả lời với đề xuất của bạn.
Deltik

1
Bạn cũng có thể thêm Defaults env_keep += "http_proxy ftp_proxy"vào /etc/sudoersđể làm cho sudo tự động bảo toàn các biến env đó.
Francois
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.