如何通过 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.