跳转到内容

Ict-innovation/LPI/108.1

来自维基教科书,开放世界中的开放书籍

108.1: 保持系统时间

[编辑 | 编辑源代码]

考生应能够正确维护系统时间并通过 NTP 同步时钟


关键知识领域

  • 设置系统日期和时间。
  • 将硬件时钟设置为 UTC 的正确时间。
  • 配置正确的时区。
  • 基本 NTP 配置。
  • 了解使用 pool.ntp.org 服务

系统时间和硬件时钟

[编辑 | 编辑源代码]

Linux 系统中存在两个独立的时钟。硬件时钟(在主板上)独立于操作系统运行,即使计算机关闭时也是如此。系统时间由 Linux 内核维护,并由计时器中断递增。Linux 启动时,它会从硬件时钟初始化系统时间。Linux 通常不会在运行时再次引用硬件时钟。

可以使用 hwclock 实用程序检查和修改硬件时钟。主要选项是

-r 或 --show 打印当前时间

-w 或 --systohc 将硬件时钟设置为当前系统时间

-s 或 --hctosys 将系统时间设置为当前硬件时钟时间

--set 将硬件时钟设置为指定的时间和日期

只有超级用户可以更改硬件时钟设置

例子

# hwclock --set --date="10/14/2010 16:55:05"

# hwclock --show

Thu 14 Oct 2010 04:55:09 PM BST -0.673528 seconds

系统时间由内核维护,作为自 1970 年 1 月 1 日开始的秒数。这个时间点被称为“纪元”。

使用 date 命令显示系统时间

$ date

Tue Sep 14 10:18:33 BST 2010

系统时间也可以使用 date 命令更改。只有超级用户可以执行此操作。语法是

date MMDDhhmmCCYY[.ss]

例子

# date 101216552010

Tue Oct 12 16:55:00 BST 2010

时区

计算机的硬件时钟通常设置为 UTC,无论计算机的地理位置如何。但是,date 命令报告(和设置)的时间通常是计算机的本地时区。时区定义了本地时间与 UTC 之间的偏移量。在某些 Linux 发行版中,时区在 /etc/timezone 文件中定义。

除了 UCT 时间,一些国家/地区还实施“夏令时”政策,每年在特定日期添加或删除一小时。这些政策由 /usr/share/zoneinfo/ 中的文件定义。这些是二进制文件。通过将适当的区域文件复制到 /etc/localtime,可以建立特定的区域政策。

例如,如果我们将 /usr/share/zoneinfo/Hongkong 复制到 /etc/localtime,那么下次我们运行 date 时,它将为我们提供香港的时间。这是因为 date 每次运行时都会读取 /etc/localtime。


使用 NTP

由于时钟频率中的微小误差,硬件时钟和系统时间都可能漂移。随着时间的推移,这些漂移可能会累积。计算机之间的时钟偏差可能会导致诸如 make 之类的工具出现问题,这些工具会检查文件的时间戳,以及使用时间戳来限制身份验证消息有效性的身份验证协议。

NTP(网络时间协议)是一种协议,可以将计算机的时钟与时间服务器同步,精度达到毫秒级。

直接更新(例如,通过原子钟)的计算机称为时间服务器,用于更新更多数量的从属时间服务器。这形成类似于 DNS 结构的树结构。根服务器位于第一层或stratum,从属服务器位于第二层,依此类推。


配置客户端以查询 NTP 服务器:

一个名为 ntpd 的 NTP 守护程序用于定期查询一个或多个远程时间服务器。它调整内核时钟的速率,使其逐渐调整到正确的时间。避免突然变化,尤其是将时钟调回。守护程序非常易于配置。只需在 /etc/ntp.conf 中有一个或多个服务器条目指向公共或企业 NTP 服务器即可。可以在线在 http://support.ntp.org 找到公共 NTP 服务器列表

pool.ntp.org 上的时间服务器使用 DNS“循环”从自愿加入池的众多时间服务器池中随机选择一个。这对于许多最终用户来说已经足够了。使用池的简单 ntp.conf 文件可能如下所示

server 0.pool.ntp.orgserver 1.pool.ntp.org
driftfile /var/lib/ntp/ntp.drift


NTP 协议还可以根据一系列查询来估计硬件时钟的频率误差;此估计值将写入由 driftfile 标签引用的文件。

ntpd 启动后,它本身将成为一个 NTP 服务器,在端口 123 上提供使用 UDP 的服务。


一次性调整:

ntp 包还提供 ntpdate 工具,可用于从命令行设置时间。-q 选项只是查询服务器,没有 -q,命令将设置系统时间。

例子

$ ntpdate -q ntp.ubuntu.com

server 91.189.94.4, stratum 2, offset 0.009249, delay 0.05046

14 Sep 11:25:23 ntpdate[9493]: adjust time server 91.189.94.4 offset 0.009249



以下是使用过的文件、术语和实用程序的部分列表:* /usr/share/zoneinfo

  • /etc/timezone
  • /etc/localtime
  • /etc/ntp.conf
  • date
  • hwclock
  • ntpd
  • ntpdate
  • pool.ntp.org


上一章 | 下一章

华夏公益教科书