¿Cómo saber la hora actual de internet desde la línea de comandos en Linux?


Respuestas:


30

Si usa bash, la siguiente línea hará el trabajo

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

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

Aprovecha las capacidades de red integradas del bash shell. Si usa un shell POSIX o cualquier otro shell, puede usar, por ejemplo, netcat.

$ nc time.nist.gov 13

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

Ambos comandos consultan el servidor del temporizador en el puerto TCP 13 del Instituto Nacional de Estándares y Tecnología y generan los datos recibidos en stdout.

¹ EDITAR: desde la página de manual de Bash: Bash maneja varios nombres de archivo especialmente cuando se usan en redirecciones, como se describe en la siguiente tabla:

/dev/tcp/host/port
Si el host es un nombre de host o una dirección de Internet válidos, y el puerto es un número de puerto entero o un nombre de servicio, bash intenta abrir una conexión TCP al socket correspondiente.

/dev/udp/host/port
Si el host es un nombre de host o una dirección de Internet válidos, y el puerto es un número de puerto entero o un nombre de servicio, bash intenta abrir una conexión UDP al socket correspondiente.


Niza, +1. ¿Podría ampliar un poco cómo funciona esto? O, dado que parece que me falta una gran cantidad de conocimientos básicos, ¿me da un nombre para investigar este comportamiento? Cual es el </dev/tcp/formato
terdon

Los dos inconvenientes menores que veo con este enfoque es que no se admiten fácilmente diferentes zonas horarias y no se puede especificar ningún formato de forma directa. Para remediar esa situación, uno podría usar el tiempo api . Por ejemplo, para consultar el tiempo real para Europa central en forma legible más humano, uno simplemente invoca:curl -G --data-urlencode "format=%D-%T\n" http://www.timeapi.org/cet/now?
Moreaki

No estoy seguro si time.nist.gov tiene algún límite de velocidad o está sobrecargado, pero obtengo resultados variables con este host.
Snowcrash

22

Hay varios servicios NTP disponibles por distribución.

Si desea hacer una sincronización de reloj única :

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

Establezca la hora del sistema en el reloj de tiempo real del hardware

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

(Nota: esto funciona bien con Google porque tienen servidores en todas partes)


Si desea ver a qué hora se envía el servidor más cercano de Google:

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

17

El ntpdatecomando puede hacer esto con la -qbandera:

$ 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.

0

También puede obtener el tiempo a través de Internet usando HTTP usando HTP que está disponible en muchos sistemas, ya htpdateque generalmente solo tiene precisión al segundo más cercano, o puede obtenerlo usando TLS usando lo tlsdateque puede proporcionar una mejor precisión:

tlsdate -nV google.com

Además, dado que ntpdate está en desuso, puede usarlo sntp(está instalado de forma predeterminada en MacOS y viene como parte de las distribuciones ntp) para obtener la fecha con mucha más precisión:

sntp pool.ntp.org 
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.