Wie kann man die aktuelle Zeit aus dem Internet über die Befehlszeile in Linux ermitteln?


26

Wie kann man die aktuelle Zeit aus dem Internet über die Befehlszeile in Linux ermitteln?

Zum Beispiel mit ntpqProgramm?

Hinweis: Nicht von Computer oder Betriebssystemuhr, sondern vom Internet?

Hinweis: Ich möchte weder die Zeit ÄNDERN noch die SYNC-Zeit ändern. WISSEN Sie es einfach.


Antworten:


30

Wenn Sie bash verwenden, erledigt die folgende Zeile den Job

$ cat </dev/tcp/time.nist.gov/13

56525 13-08-21 23:07:09 50 0 0  55.6 UTC(NIST) *

Es nutzt die integrierten Netzwerkfunktionen¹ der Bash-Shell. Wenn Sie eine POSIX-Shell oder eine andere Shell verwenden, können Sie z . B. netcat verwenden.

$ nc time.nist.gov 13

56525 13-08-21 23:07:09 50 0 0  55.6 UTC(NIST) *

Beide Befehle fragen den Timer-Server an TCP-Port 13 des National Institute of Standards and Technology ab und geben die empfangenen Daten auf stdout aus.

¹ BEARBEITEN: Von der Bash-Manpage: Bash behandelt mehrere Dateinamen, insbesondere wenn sie in Umleitungen verwendet werden, wie in der folgenden Tabelle beschrieben:

/dev/tcp/host/port
Wenn host ein gültiger Hostname oder eine gültige Internetadresse und port eine ganzzahlige Portnummer oder ein gültiger Dienstname ist , versucht bash, eine TCP-Verbindung zum entsprechenden Socket herzustellen.

/dev/udp/host/port
Wenn host ein gültiger Hostname oder eine gültige Internetadresse und port eine ganzzahlige Portnummer oder ein gültiger Dienstname ist , versucht bash, eine UDP-Verbindung zum entsprechenden Socket herzustellen.


Schön, +1. Könnten Sie etwas näher darauf eingehen, wie das funktioniert? Oder geben Sie mir einen Namen, mit dem ich dieses Verhalten nachschlagen kann, da mir hier ein großer Teil des Bash-Wissens zu fehlen scheint? Was ist das </dev/tcp/Format?
Terdon

Die zwei kleinen Nachteile, die ich bei diesem Ansatz sehe, sind, dass verschiedene Zeitzonen nicht einfach unterstützt werden und kein Format auf einfache Weise angegeben werden kann. Um diese Situation zu beheben, könnte man die Zeit-API verwenden . Um beispielsweise die aktuelle Zeit für Mitteleuropa besser lesbar abzufragen, wird einfach curl -G --data-urlencode "format=%D-%T\n" http://www.timeapi.org/cet/now?
Folgendes aufgerufen

Ich bin mir nicht sicher, ob time.nist.gov eine Geschwindigkeitsbegrenzung aufweist oder überlastet ist, aber ich erhalte mit diesem Host unterschiedliche Ergebnisse.
Snowcrash

22

Pro Distribution stehen mehrere NTP-Dienste zur Verfügung.

Wenn Sie eine einmalige Zeitsynchronisation durchführen möchten :

date -s "$(curl -s --head http://google.com | grep ^Date: | sed 's/Date: //g')"

Stellen Sie die Systemzeit auf die Hardware-Echtzeituhr ein

hwclock -r --utc
hwclock -w --utc
hwclock -r --utc

(Hinweis: Dies funktioniert gut mit Google, da es überall Server gibt.)


Wenn Sie nur sehen möchten, zu welcher Uhrzeit der nächste Server von Google sendet, gehen Sie wie folgt vor:

date -d "$(curl -s --head http://google.com | grep ^Date: | sed 's/Date: //g')"

17

Der ntpdateBefehl kann dies mit dem -qFlag tun :

$ ntpdate -q 1.debian.pool.ntp.org
server 88.191.120.99, stratum 3, offset -0.015076, delay 0.06604
server 88.191.235.218, stratum 2, offset -0.000676, delay 0.06592
server 188.165.240.21, stratum 3, offset 0.001191, delay 0.07005
server 91.121.34.166, stratum 2, offset 0.000565, delay 0.06998
22 Aug 00:56:21 ntpdate[31373]: adjust time server 88.191.235.218 offset -0.000676 sec

Von man ntpdate:

   -q     Query only - don't set the clock.

0

Sie können die Zeit auch über das Internet abrufen, indem Sie entweder HTTP mit HTP verwenden, das auf vielen Systemen verfügbar ist, da es htpdatenormalerweise nur eine Genauigkeit auf die nächste Sekunde hat, oder indem Sie TLS verwenden tlsdate, um eine bessere Genauigkeit zu erzielen:

tlsdate -nV google.com

Da ntpdate veraltet ist, können Sie es auch verwenden sntp(es wird standardmäßig unter MacOS installiert und ist Teil der ntp-Distributionen), um das Datum genauer zu ermitteln:

sntp pool.ntp.org 
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.