Come sapere l'ora corrente da internet dalla riga di comando in Linux?


Risposte:


30

Se usi bash, la seguente riga farà il lavoro

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

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

Sfrutta le capacità di rete integrate¹ della shell bash. Se si utilizza una shell POSIX o qualsiasi altra shell, è possibile utilizzare ad esempio netcat.

$ nc time.nist.gov 13

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

Entrambi i comandi interrogano il server timer sulla porta TCP 13 del National Institute of Standards and Technology e producono i dati ricevuti su stdout.

¹ MODIFICA: dalla pagina man di Bash: Bash gestisce diversi nomi di file specialmente quando vengono utilizzati nei reindirizzamenti, come descritto nella tabella seguente:

/dev/tcp/host/port
Se host è un nome host o indirizzo Internet valido e port è un numero di porta intero o un nome di servizio, bash tenta di aprire una connessione TCP al socket corrispondente.

/dev/udp/host/port
Se host è un nome host o indirizzo Internet valido e port è un numero di porta intero o un nome di servizio, bash tenta di aprire una connessione UDP al socket corrispondente.


Bello, +1. Potresti espandere un po 'su come funziona? Oppure, dato che mi sembra che manchi un grosso pezzo di conoscenza bash qui, mi dai un nome per cercare questo comportamento? Qual è il </dev/tcp/formato?
terdon,

I due piccoli inconvenienti che vedo con questo approccio sono che fusi orari diversi non sono facilmente supportati e nessun formato può essere specificato in modo diretto. Per porre rimedio a tale situazione, si potrebbe usare il tempo api . Ad esempio, per interrogare l'ora reale dell'Europa centrale in un modo più leggibile dall'uomo, si invoca semplicemente:curl -G --data-urlencode "format=%D-%T\n" http://www.timeapi.org/cet/now?
Moreaki

Non sono sicuro se time.nist.gov abbia qualche limite di frequenza o sia sovraccarico ma ottengo risultati variabili con questo host.
Snowcrash,

22

Ci sono diversi servizi NTP disponibili per distribuzione.

Se desideri eseguire una sincronizzazione oraria :

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

Imposta l'ora di sistema su Real-Time-Clock hardware

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

(Nota: questo sembra funzionare bene con Google perché hanno sette ovunque)


Se desideri vedere a che ora invia il server più vicino di Google:

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

17

Il ntpdatecomando può farlo con il -qflag:

$ 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

Da man ntpdate:

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

0

Puoi anche ottenere il tempo su Internet usando HTTP usando HTP che è disponibile su molti sistemi in quanto di htpdatesolito ha solo la precisione al secondo più vicino, oppure puoi ottenerlo usando TLS usando tlsdateche può fornire una migliore precisione:

tlsdate -nV google.com

Inoltre, poiché ntpdate è deprecato, puoi usare sntp(è installato di default su MacOS e fa parte delle distribuzioni ntp) per ottenere la data in modo molto più preciso:

sntp pool.ntp.org 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.