如何从 Linux 中的命令行知道 Internet 上的当前时间?

Dim*_*ims 33 linux command-line ntp

如何从 Linux 中的命令行知道 Internet 上的当前时间?

例如,与ntpq程序?

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

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

Mar*_*rco 36

如果您使用 bash 以下行将完成这项工作

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

56525 13-08-21 23:07:09 50 0 0  55.6 UTC(NIST) *
Run Code Online (Sandbox Code Playgroud)

它利用了 bash shell 的内置网络功能¹。如果您使用 POSIX shell 或任何其他 shell,您可以使用例如netcat。

$ nc time.nist.gov 13

56525 13-08-21 23:07:09 50 0 0  55.6 UTC(NIST) *
Run Code Online (Sandbox Code Playgroud)

这两个命令都在美国国家标准与技术研究院的TCP 端口 13 上查询计时器服务器,并将接收到的数据输出到 stdout。

¹编辑:来自Bash 手册页: Bash 在重定向中特别处理多个文件名,如下表所述:

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

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


jus*_*ing 23

每个发行版都有几个NTP 服务可用。

如果您想做一次时钟同步

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

将系统时间设置为硬件实时时钟

hwclock -r --utc
hwclock -w --utc
hwclock -r --utc
Run Code Online (Sandbox Code Playgroud)

(注意:这恰好适用于 Google,因为他们到处都有服务器)


如果您只想查看 Google 最近的服务器发送的时间:

date -d "$(curl -s --head http://google.com | grep ^Date: | sed 's/Date: //g')"
Run Code Online (Sandbox Code Playgroud)


ter*_*don 21

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
Run Code Online (Sandbox Code Playgroud)

来自man ntpdate

   -q     Query only - don't set the clock.
Run Code Online (Sandbox Code Playgroud)