Як дізнатися поточний час з Інтернету з командного рядка в 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 shell. Якщо ви використовуєте оболонку POSIX або будь-яку іншу оболонку, ви можете використовувати, наприклад, netcat.

$ nc time.nist.gov 13

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

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

¹ EDIT: Від сторінки людини Bash: Bash обробляє кілька імен файлів , спеціально , коли вони використовуються в перенаправлення, як описані в наступній таблиці:

/dev/tcp/host/port
Якщо хост - це дійсне ім'я хоста або адреса Інтернету, а порт - це цілий номер порту або ім'я послуги, bash намагається відкрити TCP-з'єднання до відповідного сокета.

/dev/udp/host/port
Якщо хост - дійсне ім'я хоста або адреса Інтернету, а порт - це цілий номер порту або ім'я послуги, bash намагається відкрити з'єднання UDP до відповідного сокета.


Приємно, +1. Чи можете ви трохи розширити, як це працює? Або, оскільки, здається, мені не вистачає великого шматка баш-знань тут, дайте мені ім'я, щоб розглянути цю поведінку? Який </dev/tcp/формат?
тердон

Дві незначні недоліки, які я бачу при такому підході, - це те, що різні часові пояси не підтримуються легко і жоден формат не може бути визначений прямо. Щоб виправити таку ситуацію, можна було б використати часовий апі . Наприклад, щоб запитати фактичний час для центральної Європи в більш розбірливому для людини просто, посилається: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:

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.