Como saber a hora atual da internet a partir da linha de comando no Linux?

21

Como saber a hora atual da internet a partir da linha de comando no Linux?

Por exemplo, com ntpq program?

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

    
por Dims 22.08.2013 / 00:37

3 respostas

23

Se você usar o bash, a linha a seguir 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 integrados¹ do shell bash. Se você usar um shell POSIX ou qualquer outro shell, você pode usar, e. 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 exibem os dados recebidos na stdout.

¹ EDIT: De página man do 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
If host is a valid hostname or Internet address, and port is an integer port number or service name, bash attempts to open a TCP connection to the corresponding socket.

/dev/udp/host/port
If host is a valid hostname or Internet address, and port is an integer port number or service name, bash attempts to open a UDP connection to the corresponding socket.

    
por 22.08.2013 / 01:12
19

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

Se você quiser fazer um clocksync de uma só vez :

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

Defina a hora do sistema para o relógio de tempo real do hardware

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

(Observação: isso funciona bem com o Google porque eles têm todos os servidores)

Se você quiser 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')"
    
por 22.08.2013 / 00:45
15

O comando ntpdate pode fazer isso com o sinalizador -q :

$ 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.
    
por 22.08.2013 / 01:00