Comment connaître l'heure actuelle d'Internet à partir de la ligne de commande sous Linux?

26

Comment connaître l'heure actuelle d'Internet à partir de la ligne de commande sous Linux?

Par exemple, avec ntpqprogramme?

Remarque: pas depuis l'ordinateur ou l'horloge du système d'exploitation, mais depuis Internet?

Remarque: je ne veux pas changer ni synchroniser l'heure. CONNAISSEZ-LE.

Dims
la source
en relation: unix.stackexchange.com/questions/79112/…
Ciro Santilli 新疆 改造 中心 法轮功 六四

Réponses:

30

Si vous utilisez bash, la ligne suivante fera le travail

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

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

Il exploite les capacités réseau¹ intégrées du shell bash. Si vous utilisez un shell POSIX ou tout autre shell, vous pouvez utiliser par exemple netcat.

$ nc time.nist.gov 13

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

Les deux commandes interrogent le serveur de temporisation sur le port TCP 13 du National Institute of Standards and Technology et produisent les données reçues sur stdout.

¹ MODIFICATION: depuis la page de manuel de Bash: Bash gère plusieurs noms de fichiers spécialement lorsqu'ils sont utilisés dans des redirections, comme décrit dans le tableau suivant:

/dev/tcp/host/port
Si host est un nom d'hôte ou une adresse Internet valide et que port est un numéro de port entier ou un nom de service, bash tente d'ouvrir une connexion TCP au socket correspondant.

/dev/udp/host/port
Si host est un nom d'hôte ou une adresse Internet valide et que port est un numéro de port entier ou un nom de service, bash tente d'ouvrir une connexion UDP au socket correspondant.

Marco
la source
Nice, +1. Pourriez-vous nous expliquer un peu comment cela fonctionne? Ou, comme il me semble manquer une grande partie des connaissances bash ici, donnez-moi un nom pour rechercher ce comportement? Quel est le </dev/tcp/format?
terdon
Les deux inconvénients mineurs que je vois avec cette approche sont que les différents fuseaux horaires ne sont pas facilement pris en charge et aucun format ne peut être spécifié de manière simple. Pour remédier à cette situation, on pourrait utiliser le temps api . Par exemple, pour interroger l'heure réelle de l'Europe centrale d'une manière plus lisible par l'homme, on invoque simplement:curl -G --data-urlencode "format=%D-%T\n" http://www.timeapi.org/cet/now?
Moreaki
Je ne sais pas si time.nist.gov a une limitation de débit ou est surchargé mais j'obtiens des résultats variables avec cet hôte.
Snowcrash
22

Il existe plusieurs services NTP disponibles par distribution.

Si vous souhaitez effectuer une synchronisation d'horloge unique :

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

Réglez l'heure système sur l'horloge temps réel du matériel

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

(Remarque: cela fonctionne bien avec Google car ils ont des serveurs partout)


Si vous souhaitez simplement voir à quelle heure le serveur le plus proche de Google envoie:

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

La ntpdatecommande peut le faire avec le -qdrapeau:

$ 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

De man ntpdate:

   -q     Query only - don't set the clock.
terdon
la source
0

Vous pouvez également obtenir l'heure sur Internet en utilisant HTTP en utilisant HTP qui est disponible sur de nombreux systèmes car htpdatequi n'a généralement qu'une précision à la seconde près, ou vous pouvez l'obtenir en utilisant TLS en utilisant tlsdatece qui peut fournir une meilleure précision:

tlsdate -nV google.com

De plus, étant donné que ntpdate est obsolète, vous pouvez utiliser sntp(il est installé par défaut sur MacOS et fait partie des distributions ntp) pour obtenir la date beaucoup plus précisément:

sntp pool.ntp.org 
Pierz
la source