Eines der häufig verwendeten Dienstprogramme von sysadmin ist wget. Es kann sehr praktisch sein, wenn Sie mit dem Internet zu tun haben Fehlersuche.
Was ist der Befehl wget?
Der Befehl wget ist ein beliebtes Unix / Linux-Befehlszeilenprogramm zum Abrufen von Inhalten aus dem Web. Es ist kostenlos und bietet eine nicht interaktive Möglichkeit, Dateien aus dem Internet herunterzuladen. Der Befehl wget unterstützt sofort die Protokolle HTTPS, HTTP und FTP. Darüber hinaus können Sie damit auch HTTP-Proxys verwenden.
Wie hilft Ihnen wget bei der Fehlerbehebung?
Es gibt viele Wege.
Als ein Sysadmin, arbeiten Sie die meiste Zeit an einem Terminal, und wenn Sie Probleme mit Webanwendungen beheben, möchten Sie möglicherweise nicht die gesamte Seite, sondern nur die Konnektivität überprüfen. Oder Sie möchten Intranet-Websites überprüfen. Oder Sie möchten eine bestimmte Seite herunterladen, um den Inhalt zu überprüfen.
wget ist nicht interaktiv, dh Sie können es im Hintergrund ausführen, auch wenn Sie abgemeldet sind. Es kann viele Fälle geben, in denen es wichtig ist, die Verbindung zum System zu trennen, selbst wenn Sie Dateien aus dem Web abrufen. Im Hintergrund die wget
wird ausgeführt und beendet ihren zugewiesenen Job.
Es kann auch verwendet werden, um die gesamte Website auf Ihren lokalen Computern abzurufen. Es kann Links in folgen XHTML und HTML Seiten, um eine lokale Version zu erstellen. Dazu muss die Seite rekursiv heruntergeladen werden. Dies ist sehr nützlich, da Sie damit wichtige Seiten oder Websites für die Offline-Anzeige herunterladen können.
Lassen Sie uns sie in Aktion sehen. Die Syntax des wget ist wie folgt.
wget [option] [URL]
Download a webpage
Versuchen wir, eine Seite herunterzuladen. Beispiel: github.com
wget github.com
Wenn die Konnektivität in Ordnung ist, wird die Homepage heruntergeladen und die Ausgabe wie folgt angezeigt.
root@trends:~# wget github.com URL transformed to HTTPS due to an HSTS policy --2020-02-23 10:45:52-- https://github.com/ Resolving github.com (github.com)... 140.82.118.3 Connecting to github.com (github.com)|140.82.118.3|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html’ index.html [ <=> ] 131.96K --.-KB/s in 0.04s 2020-02-23 10:45:52 (2.89 MB/s) - ‘index.html’ saved [135126] root@trends:~#
Download multiple files
Praktisch, wenn Sie mehrere Dateien gleichzeitig herunterladen müssen. Dies kann Ihnen eine Vorstellung davon geben, wie Sie das Herunterladen von Dateien über einige Skripte automatisieren können.
Versuchen wir, Python 3.8.1- und 3.5.1-Dateien herunterzuladen.
wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
Wie Sie sich vorstellen können, lautet die Syntax wie folgt.
wget URL1 URL2 URL3
Sie müssen nur sicherstellen, dass zwischen den URLs Platz bleibt.
Limit download speed
Dies ist hilfreich, wenn Sie überprüfen möchten, wie viel Zeit Ihre Datei zum Herunterladen mit unterschiedlicher Bandbreite benötigt.
Verwendung der --limit-rate
Option können Sie die Download-Geschwindigkeit begrenzen.
Hier ist die Ausgabe des Herunterladens der Nodejs-Datei.
root@trends:~# wget https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
--2020-02-23 10:59:58-- https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
Resolving nodejs.org (nodejs.org)... 104.20.23.46, 104.20.22.46, 2606:4700:10::6814:162e, ...
Connecting to nodejs.org (nodejs.org)|104.20.23.46|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14591852 (14M) [application/x-xz]
Saving to: ‘node-v12.16.1-linux-x64.tar.xz’
node-v12.16.1-linux-x64.tar.xz 100%[===========================================================================================>] 13.92M --.-KB/s in 0.05s
2020-02-23 10:59:58 (272 MB/s) - ‘node-v12.16.1-linux-x64.tar.xz’ saved [14591852/14591852]
Das Herunterladen von 0.05 MB-Dateien dauerte 13.92 Sekunden. Versuchen wir nun, die Geschwindigkeit auf 500K zu begrenzen.
root@trends:~# wget --limit-rate=500k https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
--2020-02-23 11:00:18-- https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
Resolving nodejs.org (nodejs.org)... 104.20.23.46, 104.20.22.46, 2606:4700:10::6814:162e, ...
Connecting to nodejs.org (nodejs.org)|104.20.23.46|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14591852 (14M) [application/x-xz]
Saving to: ‘node-v12.16.1-linux-x64.tar.xz.1’
node-v12.16.1-linux-x64.tar.xz.1 100%[===========================================================================================>] 13.92M 501KB/s in 28s
2020-02-23 11:00:46 (500 KB/s) - ‘node-v12.16.1-linux-x64.tar.xz.1’ saved [14591852/14591852]
Das Reduzieren der Bandbreite dauerte länger - 28 Sekunden. Stellen Sie sich vor, Ihre Benutzer beschweren sich über langsamen Download und Sie wissen, dass ihre Netzwerkbandbreite gering ist. Sie können es schnell versuchen --limit-rate
um das Problem zu simulieren.
Download in the background
Das Herunterladen großer Dateien kann einige Zeit oder das obige Beispiel dauern, in dem Sie auch das Ratenlimit festlegen möchten. Dies wird erwartet, aber was ist, wenn Sie nicht auf Ihr Terminal starren möchten?
Nun, Sie können verwenden -b
Argument, um das Wget im Hintergrund zu starten.
root@trends:~# wget -b https://slack.com
Continuing in background, pid 25430.
Output will be written to ‘wget-log.1’.
root@trends:~#
Ignore Certificate Error
Dies ist praktisch, wenn Sie Intranet-Webanwendungen überprüfen müssen, die nicht über das richtige Zertifikat verfügen. Standardmäßig gibt wget einen Fehler aus, wenn ein Zertifikat ungültig ist.
root@trends:~# wget https://expired.badssl.com/
--2020-02-23 11:24:59-- https://expired.badssl.com/
Resolving expired.badssl.com (expired.badssl.com)... 104.154.89.105
Connecting to expired.badssl.com (expired.badssl.com)|104.154.89.105|:443... connected.
ERROR: cannot verify expired.badssl.com's certificate, issued by ‘CN=COMODO RSA Domain Validation Secure Server CA,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB’:
Issued certificate has expired.
To connect to expired.badssl.com insecurely, use `--no-check-certificate'.
Das obige Beispiel bezieht sich auf die URL, unter der das Zertifikat abgelaufen ist. Wie Sie sehen können, hat es vorgeschlagen, zu verwenden --no-check-certificate
Dadurch wird jede Zertifikatsüberprüfung ignoriert.
root@trends:~# wget https://untrusted-root.badssl.com/ --no-check-certificate
--2020-02-23 11:33:45-- https://untrusted-root.badssl.com/
Resolving untrusted-root.badssl.com (untrusted-root.badssl.com)... 104.154.89.105
Connecting to untrusted-root.badssl.com (untrusted-root.badssl.com)|104.154.89.105|:443... connected.
WARNING: cannot verify untrusted-root.badssl.com's certificate, issued by ‘CN=BadSSL Untrusted Root Certificate Authority,O=BadSSL,L=San Francisco,ST=California,C=US’:
Self-signed certificate encountered.
HTTP request sent, awaiting response... 200 OK
Length: 600 [text/html]
Saving to: ‘index.html.6’
index.html.6 100%[===========================================================================================>] 600 --.-KB/s in 0s
2020-02-23 11:33:45 (122 MB/s) - ‘index.html.6’ saved [600/600]
root@trends:~#
Cool, nicht wahr?
HTTP Response Header
Siehe den HTTP-Antwortheader einer bestimmten Site auf dem Terminal.
Die -S
druckt die Kopfzeile, wie Sie unten für sehen können Coursera.
root@trends:~# wget https://www.coursera.org -S
--2020-02-23 11:47:01-- https://www.coursera.org/
Resolving www.coursera.org (www.coursera.org)... 13.224.241.48, 13.224.241.124, 13.224.241.82, ...
Connecting to www.coursera.org (www.coursera.org)|13.224.241.48|:443... connected.
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 511551
Connection: keep-alive
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Date: Sun, 23 Feb 2020 11:47:01 GMT
etag: W/"7156d-WcZHnHFl4b4aDOL4ZSrXP0iBX3o"
Server: envoy
Set-Cookie: CSRF3-Token=1583322421.s1b4QL6OXSUGHnRI; Max-Age=864000; Expires=Wed, 04 Mar 2020 11:47:02 GMT; Path=/; Domain=.coursera.org
Set-Cookie: __204u=9205355775-1582458421174; Max-Age=31536000; Expires=Mon, 22 Feb 2021 11:47:02 GMT; Path=/; Domain=.coursera.org
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-Content-Type-Options: nosniff
x-coursera-render-mode: html
x-coursera-render-version: v2
X-Coursera-Request-Id: NCnPPlYyEeqfcxIHPk5Gqw
X-Coursera-Trace-Id-Hex: a5ef7028d77ae8f8
x-envoy-upstream-service-time: 1090
X-Frame-Options: SAMEORIGIN
x-powered-by: Express
X-XSS-Protection: 1; mode=block
X-Cache: Miss from cloudfront
Via: 1.1 884d101a3faeefd4fb32a5d2a8a076b7.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: LHR62-C3
X-Amz-Cf-Id: vqvX6ZUQgtZAde62t7qjafIAqHXQ8BLAv8UhkPHwyTMpvH617yeIbQ==
Length: 511551 (500K) [text/html]
Manipulate the User-Agent
Möglicherweise möchten Sie eine Site mithilfe eines benutzerdefinierten Benutzeragenten verbinden. Oder der Benutzeragent eines bestimmten Browsers. Dies ist durch Angabe möglich --user-agent
. Das folgende Beispiel gilt für den Benutzeragenten als MyCustomUserAgent.
root@trends:~# wget https://gf.dev --user-agent="MyCustomUserAgent"
Host Header
Wenn sich eine Anwendung noch in der Entwicklung befindet, verfügen Sie möglicherweise nicht über eine geeignete URL, um sie zu testen. Möglicherweise möchten Sie eine einzelne HTTP-Instanz mithilfe von IP testen, müssen jedoch den Host-Header angeben, damit die Anwendung ordnungsgemäß funktioniert. In dieser Situation, --header
wäre nützlich.
Nehmen wir ein Beispiel für das Testen von http://10.10.10.1 mit dem Host-Header als application.com
wget --header="Host: application.com" http://10.10.10.1
Nicht nur Host, sondern Sie können jeden beliebigen Header einfügen.
Connect using Proxy
Wenn Sie in einer DMZ-Umgebung arbeiten, haben Sie möglicherweise keinen Zugriff auf Internetseiten. Sie können jedoch den Proxy nutzen, um eine Verbindung herzustellen.
wget -e use_proxy=yes http_proxy=$PROXYHOST:PORT http://externalsite.com
Vergessen Sie nicht, die Variable $ PROXYHOST: PORT mit den tatsächlichen Variablen zu aktualisieren.
Connect using a specific TLS protocol
Normalerweise würde ich die Verwendung empfehlen OpenSSL um das TLS-Protokoll zu testen. Sie können aber auch wget verwenden.
wget --secure-protocol=TLSv1_2 https://example.com
Das oben Gesagte zwingt wget, eine Verbindung über TLS 1.2 herzustellen.
Fazit
Wenn Sie den erforderlichen Befehl kennen, können Sie bei der Arbeit helfen. Ich hoffe, das Obige gibt Ihnen eine Vorstellung davon, was Sie damit machen können wget
.