如何通过 Linux 中的命令行了解互联网上的当前时间?

如何通过 Linux 中的命令行了解互联网上的当前时间?

如何通过 Linux 中的命令行了解互联网上的当前时间?

例如用ntpq程序?

注意:不是来自计算机或操作系统时钟,而是来自互联网?

注意:我不想更改或同步时间。只是了解它。

答案1

如果你使用 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 shell 或任何其他 shell,你可以使用例如网络猫。

$ 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 是有效的主机名或 Internet 地址,并且 port 是整数端口号或 服务名称,则 bash 将尝试打开与相应套接字的 TCP 连接。

/dev/udp/host/port
如果 host 是有效的主机名或 Internet 地址,并且 port 是整数端口号或 服务名称,则 bash 将尝试打开与相应套接字的 UDP 连接。

答案2

有几个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')"

答案3

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.

答案4

您还可以使用 HTTP 通过互联网获取时间高温它在许多系统上都可用,因为htpdate它通常只精确到秒,或者你可以使用 TLS 获取它tlsdate可以提供更好的准确性:

tlsdate -nV google.com

ntpdate因为被弃用您可以使用sntp(它在 MacOS 上默认安装并且作为 ntp 发行版的一部分提供)以更准确地获取日期:

sntp pool.ntp.org 

相关内容