14.3. 显示和设置时间

在 Linux 中,系统时区由符号链接确定/etc/localtime. 此链接指向描述本地时区的时间 zone 数据文件。时间 zone 数据文件位于以下位置之一/usr/lib/zoneinfo/usr/share/zoneinfo取决于您使用的 Linux 发行版。

例如,在位于新泽西州的 SuSE 系统上,/etc/localtime链接将指向/usr/share/zoneinfo/US/Eastern. 在 Debian 系统上,/etc/localtime链接将指向/usr/lib/zoneinfo/US/Eastern.

如果您找不到zoneinfo目录,在/usr/lib/usr/share目录中,请执行 find /usr -print | grep zoneinfo 或查阅您的发行版文档。

当用户位于不同的时区时会发生什么? 用户可以通过设置 TZ 环境变量来更改其私有时区。 如果未设置,则假定为系统时区。 TZ 变量的语法在tzset手册页中描述。

date 命令显示当前日期和时间。 例如

$ date
Sun Jul 14 21:53:41 EET DST 1996
$
该时间是 1996 年 7 月 14 日星期日,大约在晚上十点差十分,在名为“EET DST”(可能是东欧夏令时)的时区。date 也可以显示世界标准时间
$ date -u
Sun Jul 14 18:53:42 UTC 1996
$
date 也用于设置内核的软件时钟
# date 07142157
Sun Jul 14 21:57:00 EET DST 1996
# date
Sun Jul 14 21:57:02 EET DST 1996
#
有关更多详细信息,请参阅 date 手册页;语法有点晦涩难懂。 只有 root 用户可以设置时间。 虽然每个用户都可以有自己的时区,但时钟对每个人都是相同的。

请注意 time 命令。 这不是用于获取系统时间的。 而是用于计时某事需要多长时间。 请参阅 time 手册页。

date 仅显示或设置软件时钟。clock 命令同步硬件时钟和软件时钟。 它在系统启动时使用,以读取硬件时钟并设置软件时钟。 如果您需要同时设置两个时钟,则首先使用 date 设置软件时钟,然后使用 clock -w 设置硬件时钟。

-uclock 的选项告诉它硬件时钟是世界标准时间。 您必须正确使用-u选项。 如果您不这样做,您的计算机将对时间感到非常困惑。

应谨慎更改时钟。 Unix 系统的许多部分都要求时钟正常工作。 例如,cron 守护程序定期运行命令。 如果您更改时钟,它可能会对是否需要运行命令感到困惑。 在早期的 Unix 系统上,有人将时钟设置为未来二十年,而 cron 想要一次运行所有二十年的定期命令。 当前版本的 cron 可以正确处理此问题,但您仍然应该小心。 大幅跳跃或向后跳跃比小幅或向前跳跃更危险。