gnu coreutils `date` 是如何工作的?

gnu coreutils `date` 是如何工作的?

我在这个网站上没有看到任何类似的问题。 ,虽然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 --systohchwclock --hctosys命令同步。软件时钟通常在系统关闭时写入硬件时钟。

要与外部计时机构同步,请使用rdate一次性同步,或设置 ntp 实用程序以进行连续更新。此外,ntp 守护进程将计算系统时钟相对于互联网源的漂移,并对其进行纠正,即使互联网连接丢失也是如此。

相关内容