Як дізнатися поточний час з Інтернету з командного рядка в Linux?
Наприклад, з ntpq
програмою?
Примітка: не з годинника комп'ютера чи операційної системи, а з Інтернету?
Примітка. Я не хочу змінювати або синхронізувати час. Просто ЗНАЙ.
Як дізнатися поточний час з Інтернету з командного рядка в Linux?
Наприклад, з ntpq
програмою?
Примітка: не з годинника комп'ютера чи операційної системи, а з Інтернету?
Примітка. Я не хочу змінювати або синхронізувати час. Просто ЗНАЙ.
Відповіді:
Якщо ви використовуєте 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 до відповідного сокета.
</dev/tcp/
формат?
curl -G --data-urlencode "format=%D-%T\n" http://www.timeapi.org/cet/now?
Існує декілька послуг 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')"
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.
Ви також можете отримати час через Інтернет, використовуючи HTTP, використовуючи HTP, який доступний у багатьох системах, htpdate
який, як правило, має точність лише до найближчої секунди, або ви можете отримати його за допомогою TLS, використовуючи tlsdate
який може забезпечити кращу точність:
tlsdate -nV google.com
Крім того, оскільки ntpdate застаріло, ви можете використовувати sntp
(він встановлений за замовчуванням на MacOS і поставляється як частина дистрибутивів ntp) для отримання дати набагато точніше:
sntp pool.ntp.org