Como saber o tempo atual da Internet a partir da linha de comando no Linux?

26

Como saber o tempo atual da Internet a partir da linha de comando no Linux?

Por exemplo, com ntpqprograma?

Nota: não do relógio do computador ou do sistema operacional, mas da internet?

Nota: Não quero alterar ou sincronizar a hora. Apenas SAIBA.

Dims
fonte
related: unix.stackexchange.com/questions/79112/…
Ciro Santilli escreveu:

Respostas:

30

Se você usar o bash, a seguinte linha fará o trabalho

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

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

Ele aproveita os recursos de rede internos¹ do shell bash. Se você usa um shell POSIX ou qualquer outro shell, pode usar, por exemplo, netcat.

$ nc time.nist.gov 13

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

Ambos os comandos consultam o servidor de timer na porta TCP 13 do Instituto Nacional de Padrões e Tecnologia e emitem os dados recebidos no stdout.

IT EDIT: Na página do manual Bash: O Bash lida com vários nomes de arquivos, especialmente quando eles são usados ​​em redirecionamentos, conforme descrito na tabela a seguir:

/dev/tcp/host/port
Se host for um nome de host ou endereço da Internet válido e porta for um número de porta inteiro ou nome de serviço, o bash tentará abrir uma conexão TCP no soquete correspondente.

/dev/udp/host/port
Se host for um nome de host ou endereço da Internet válido e porta for um número de porta inteiro ou nome de serviço, o bash tentará abrir uma conexão UDP no soquete correspondente.

Marco
fonte
Bom, +1. Você poderia expandir um pouco como isso funciona? Ou, como parece que estou perdendo uma grande parte do conhecimento do bash aqui, me dê um nome para pesquisar esse comportamento? Qual é o </dev/tcp/formato?
terdon
As duas desvantagens menores que vejo com essa abordagem são que fusos horários diferentes não são facilmente suportados e nenhum formato pode ser especificado de maneira direta. Para remediar essa situação, pode-se usar a API do tempo . Por exemplo, para consultar o tempo real da Europa central de uma maneira mais humana legível, basta invocar:curl -G --data-urlencode "format=%D-%T\n" http://www.timeapi.org/cet/now?
Moreaki
Não tenho certeza se time.nist.gov tem alguma taxa limitadora ou está sobrecarregada, mas eu recebo resultados variados com esse host.
Snowcrash
22

Existem vários serviços NTP disponíveis por distribuição.

Se você deseja fazer uma sincronização de relógio única :

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

Defina a hora do sistema para o hardware Relógio em tempo real

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

(Nota: isso funciona bem com o Google, porque eles têm servidores por toda parte)


Se você deseja apenas ver a que horas o servidor mais próximo do Google envia:

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

O ntpdatecomando pode fazer isso com o -qsinalizador:

$ 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
fonte
0

Você também pode obter o tempo pela Internet usando o HTTP usando HTP, disponível em muitos sistemas, pois htpdatenormalmente só tem precisão para o segundo mais próximo, ou pode obtê-lo usando o TLS, tlsdateque pode fornecer uma melhor precisão:

tlsdate -nV google.com

Além disso, como o ntpdate está sendo preterido, você pode usá- sntplo (ele é instalado por padrão no MacOS e faz parte das distribuições ntp) para obter a data com muito mais precisão:

sntp pool.ntp.org 
Pierz
fonte