21

Как узнать текущее время из интернета из командной строки в Linux?

Например, с помощью программы ntpq ?

Примечание: не с часов компьютера или операционной системы, а с интернета?

Примечание: я не хочу менять или синхронизировать время. Просто ЗНАЙ это.

4 ответа4

24

Если вы используете bash, следующая строка выполнит работу

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

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

Он использует встроенные возможности сети оболочки bash. Если вы используете оболочку POSIX или любую другую оболочку, вы можете использовать, например, netcat.

$ nc time.nist.gov 13

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

Обе команды запрашивают сервер таймера через порт TCP 13 Национального института стандартов и технологий и выводят полученные данные на стандартный вывод.

¹ РЕДАКТИРОВАТЬ: со страницы руководства Bash: Bash обрабатывает несколько имен файлов, особенно когда они используются в перенаправлениях, как описано в следующей таблице:

/dev/tcp/host/port
Если host является действительным именем хоста или интернет-адресом, а port является целым номером порта или имя службы, bash пытается открыть TCP-соединение с соответствующим сокетом.

/dev/udp/host/port
Если host является действительным именем хоста или интернет-адресом, а port является целым номером порта или имя службы, bash пытается открыть UDP-соединение с соответствующим сокетом.

20

Для каждого дистрибутива доступно несколько служб NTP .

Если вы хотите сделать одноразовую синхронизацию:

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

Установить системное время на аппаратные часы реального времени

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

(Примечание: это работает хорошо с Google, потому что у них повсюду разорваны)


Если вы хотите просто посмотреть, во сколько отправляется ближайший сервер Google:

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

Команда ntpdate может сделать это с флагом -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

От man ntpdate:

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

Вы также можете получить время через Интернет, используя HTTP, используя HTP, который доступен во многих системах как htpdate который обычно имеет точность только с точностью до секунды, или вы можете получить его, используя TLS, используя tlsdate который может обеспечить лучшую точность:

tlsdate -nV google.com

Также, поскольку ntpdate устарела, вы можете использовать sntp (он установлен по умолчанию на MacOS и входит в состав дистрибутивов ntp), чтобы получить дату гораздо точнее:

sntp pool.ntp.org 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .