我在这个网站上没有看到任何类似的问题。 ,虽然manpage
有助于描述如何使用 date
,没有太多背景信息。甚至该info
页面(如联机帮助页中所规定的:info '(coreutils) date invocation'
)也只不过是它如何基于TZ
变量进行操作。
我想知道date
命令行实用程序是如何工作的。具体来说,
date +%s
它返回自纪元以来的秒数,例如1467743297
(自 以来的秒数1970-01-01 00:00:00 UTC
)。
例如,我认为它不需要互联网连接。话又说回来,是不是偶尔尝试与特定源重新同步?如果是这样,该来源是如何指定的?如果不是,那么人们对特定机器上按日期报告的值有多少信心?
第21.1.5节该info
页面的 意味着date
仅处理系统/软件时钟,然后与 的任何同步都hwclock
取决于操作系统。所以...也许这个问题更合适“哪些系统的报告更准确date +%s
?”我想这也意味着精度date
仅限于机器硬件时钟的精度,特别是受系统/软件时钟的影响? (例如,即使使用高精度的硬件时钟,软件时钟也可能会干扰、影响精度)。
答案1
date
根本不努力与任何东西同步,而只是进行一些系统调用(在Linux上可能strace date ...
会或可能不会显示)来查找自系统已知的纪元以来的时间。
系统本身可以与 BIOS 时钟同步,或者虚拟机可以从其运行的父级获取当前时间,或者可以使用 NTP(或其他功能大致相同的软件,例如旧版rdate
或精确时间协议 (PTP))与其他计算机同步时间,或者可以使用硬件 GPS 或无线电设备来设置时间。这些都不涉及date
,除非管理员正在收听 BBC 广播并date
在整点时手动设置系统时间(他们是否仍在整点时执行 doot doot doot dee 操作?)。
系统时钟的准确性取决于 NTP 配置(或使用的任何其他软件)、NTP(或类似软件)是否损坏、BIOS、BIOS 是否损坏(我见过四年后的系统启动,并且该主机由于其他原因有一个损坏的 NTP 设置,很有趣,这是一个 NFS 服务器Makefile
......),硬件时钟是否行为异常,以及各种其他细节。如果您使用 NTP,peers
则命令ntpq
或漂移文件可能值得查看。
为了获得最准确的时间(除了在每台主机上放置一个原子钟...)您可能想阅读PTP《迈向更高精度》(并且还了解到时间是一种幻觉)。
答案2
您date
不需要互联网连接的假设是正确的。它只是输出存储在系统时钟中的当前时间。 (更多信息关于时间和日期命令)
硬件时钟是主板上的电池供电电路,可在系统断电或拔掉插头时保持当前时间。
系统启动时,内核提取硬件时间并设置系统(软件)时钟。这是基于处理器时钟运行的,它比低功耗硬件时钟精确得多。 (更多的这里)
然后,硬件和软件时钟彼此独立运行,尽管它们可以与hwclock --systohc
或hwclock --hctosys
命令同步。软件时钟通常在系统关闭时写入硬件时钟。
要与外部计时机构同步,请使用rdate
一次性同步,或设置 ntp 实用程序以进行连续更新。此外,ntp 守护进程将计算系统时钟相对于互联网源的漂移,并对其进行纠正,即使互联网连接丢失也是如此。