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


26

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

Например, с ntpqпрограммой?

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

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


Ответы:


30

Если вы используете 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 Национального института стандартов и технологий и выводят полученные данные на стандартный вывод.

¹ EDIT: От страницы человека Bash: Bash обрабатывает несколько имен файлов , специально , когда они используются в перенаправлениях, как описаны в следующей таблице:

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

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


Ницца +1. Не могли бы вы немного рассказать о том, как это работает? Или, поскольку мне кажется, что мне здесь не хватает большого количества знаний по bash, дайте мне имя, чтобы разобраться с этим поведением? Какой </dev/tcp/формат?
Тердон

Два незначительных недостатка, которые я вижу при таком подходе, заключаются в том, что разные часовые пояса не поддерживаются легко, и прямой формат не может быть указан. Чтобы исправить эту ситуацию, можно использовать API времени . Например, чтобы запросить фактическое время для Центральной Европы более curl -G --data-urlencode "format=%D-%T\n" http://www.timeapi.org/cet/now?
понятным для

Не уверен, что time.nist.gov имеет какие-либо ограничения скорости или перегружен, но я получаю разные результаты с этим хостом.
Снегопад

22

Для каждого дистрибутива доступно несколько служб 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')"

17

Команда 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 
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.