[ 上一篇 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 下一篇 ]
计算机都有一个时钟来记录时间。通常会有一个带有电池后备的硬件时钟,以便在计算机关闭时也能保持时间。操作系统(例如 Linux)运行自己的时钟,并且诸如 Linux 中的 date
和 DOS 中的 time
等命令显示的时间就来自这个时钟。
硬件时钟通常足够精确,前提是电池没有耗尽。如果您在打开计算机时发现计算机显示的时间错误了好几个月或几年,则值得检查电池是否仍然可用。
操作系统中的“软件”时钟通常会有漂移,无论是系统性的还是随机的。这种漂移意味着时钟运行得太快或太慢。因此,如果需要精确的时间,则有必要使用一些精确的时间源来同步操作系统时钟。
要在 Debian GNU/Linux 上查看时间,请使用命令 date
。例如
$ date Fri Oct 23 04:45:51 EEST 1998
上面的命令显示了星期几、月份、月份中的日期、时间、时区和年份。时区还显示了是否正在使用夏令时(在示例中,基本时区是 EET,额外的 S 表示夏令时)。
在 Debian GNU/Linux 和其他 Unix 系统中,命令 time
不显示时间。它用于计时命令的执行。如果您有一个命令需要相当长的时间才能执行,并且您不想用秒表站在旁边,您可以通过将该命令作为 time
的参数运行来查看它花费了多长时间。这个例子可能会澄清一些事情
$ time sleep 60 real 1m0.045s user 0m0.000s sys 0m0.000s
如果您具有 root 权限,您还可以使用命令 date
更改时间(请参阅 man 手册 date(1)
)。如果您连接到互联网或局域网中有其他 Unix 计算机,请参阅 同步时间,rdate 和 NTP,第 16.4 节,了解更轻松地设置时间的方法。
手动设置时间时,时间字符串可能会令人困惑。命令 date --set
接受多种格式的日期和时间。您可以阅读 sh-utils info 文档,或使用下面的示例来了解一种可能的格式。其中日期以 ISO 8601 标准格式 YYYY-MM-DD 给出,表示年-月-日,时间以 24 小时制表示。前导零很重要。
date --set 1998-11-02 date --set 21:08:0
以上两个命令将日期设置为 1998 年 11 月 2 日,时间设置为晚上 9 点过 8 分。
要查看 UTC 时间,请使用命令 date -u
。
如果您正在运行 X Window,则屏幕上的某个位置可能有一个时钟显示。如果没有,您可以通过运行命令 xclock
来获得它,它是 xbase
软件包的一部分。裸 xclock
命令为您提供一个模拟时钟(带有大指针、小指针和一个可选的秒针)。您可以获得数字时钟(使用 xclock -digital
)。有关更多信息,请参阅 man 手册 xclock(1)
。
当您安装 Debian GNU/Linux 的基本系统时,您设置了时区。您可以通过查看文件 /etc/timezone
来检查您是如何设置时区的。如果您想更改时区配置,请参阅 安装后更改时区,第 16.1.1 节。
$ cat /etc/timezone Europe/Helsinki $
需要时区是因为 Unix 计算机以世界协调时间 (UTC) 记录时间,而本地时间是从此计算得出的。UTC 是子午线 0 上的太阳时。UTC 以前称为格林威治标准时间 (GMT),因为子午线 0 穿过格林威治的旧皇家天文台,它是英国伦敦的一部分。
UTC 是恒定的,不受夏令时或其他更改的影响。这使其对于同步计算机非常有用。只要基本时间以 UTC 保持,世界各地的计算机都可以同步,同时又保持其本地时间信息。
如果您要将 Debian GNU/Linux 计算机设置为使用本地时间,而不考虑时区,您将失去自动 DST 更改的好处。我们不建议这样做! 但是,可能有必要通过将硬件时钟设置为本地时间来进行妥协(请参阅 与不理解时区的操作系统进行多重启动,第 16.3 节)。在本文档中,我们假设您已将计算机配置为使用 UTC。
要在安装后将计算机更改为使用 UTC,请编辑文件 /etc/default/rcS
,将变量 UTC 更改为 no。如果您碰巧安装系统以使用本地时间,只需将变量更改为 yes 即可开始使用 UTC。最好在编辑 /etc/default/rcS
后重新启动以使更改生效。
如果时区设置正确,并且时区配置文件相当新,则操作系统显示的本地时间将在正确的日期自动更改为夏令时并返回正常时间。如果您拥有的时区文件是旧的,则可能会出现问题,因为 DST 的开始和结束日期不是由物理现象决定的,而是由国家机构选择的。有时这些日期会更改,例如,欧盟在 1995 年将结束日期从 9 月的最后一个星期日更改为 10 月的最后一个星期日。
因此,您应该确保您的 libc6
软件包保持相当新的状态。从 Debian GNU/Linux 2.2 开始,此软件包包含时区数据。
如果未设置时区或时区错误,超级用户可以运行 tzconfig
以在安装操作系统后配置它(请参阅 man 手册 tzconfig(8)
)。
如果有其他用户,最好通知他们系统时区已更改。
如果您没有 root 权限或想为自己设置与系统使用的时区不同的时区,您可以设置环境变量 TZ。使用命令 tzselect
显示 TZ 要使用的值。
使用 TZ 的示例
$ date Sun Nov 1 19:49:38 EET 1998 $ export TZ=PST $ date Sun Nov 1 17:49:59 PST 1998
如您所见,对于此用户,date
显示的时间不同。(但这似乎是错误的,因为太平洋标准时间应该是 09:49 ???。发生了什么事???)。
用于设置硬件时钟的命令是 hwclock
。(这在 Debian 2.0 之前没有。在早期版本中,命令是 clock
。)
如果您使用 date
命令更改时间,则还值得将硬件时钟设置为正确的时间。否则,下次重启后时间会错误,因为硬件时钟会在断电时保持时间。当操作系统中的时钟显示正确的时间时,像这样设置硬件时钟
dilbert# date Sun Nov 1 18:56:50 EET 1998 dilbert# hwclock --systohc --utc dilbert#
如果硬件时钟设置为 UTC,请记住添加 --utc
选项!
有关更多信息,请参阅 man 手册 hwclock(8)
。
至少从 Debian 版本 2.2 开始,系统会在关机时自动将系统时间保存到硬件时钟,并在 Debian 启动时从硬件时钟设置系统时钟。这是在脚本 /etc/init.d/hwclock.sh
中完成的。
如果您有多重启动配置,其中在同一台计算机上安装了一些其他操作系统,并在启动期间选择要启动的操作系统,您可能会对正确的时间感到困惑。如果其他操作系统不理解时区,它们会认为 UTC 是本地时间并显示错误的时间(除非您住在英国伦敦或同一时区的其他地方)。
DOS、OS/2 和 Windows(NT 除外)不使用时区。如果您需要在这些操作系统中使用正确的本地时间,则必须将时钟设置为本地时间。Debian Linux 可以容忍这种情况,并且可以正常工作,但是如果您的主要操作系统理解时区,请使用它们。
如果您有另一台 Unix 计算机,您知道它保持正确的时间,则使用 root 权限,您可以使用命令 rdate
设置时间。例如
rdate somehost.domain.com
即使您没有精确的时间源,将所有计算机设置为相同的时间仍然是一个好主意,这样您就可以比较主机之间的时间戳。要保持时钟同步,您可以每天从 cron 启动 rdate 一次。
如果硬件时钟不保持正确的时间,则可以在操作系统启动时设置正确的时间。为此,局域网中必须有另一台主机可以接收时间。这是一个例子
创建文件 /etc/init.d/rdate
$ cat rdate #! /bin/sh # # rdate Execute the rdate command. # # Version: 1998-11-01 tapio.lehtonen@iki.fi # PATH=/sbin:/bin:/usr/sbin:/usr/bin HOST=dilbert # Set operating system time from other host in LAN. if [ -x /usr/sbin/rdate ] then /usr/sbin/rdate $HOST fi
chmod a+rx /etc/init.d/rdate
在目录 /etc/rc2.d
中创建指向该文件的符号链接
cd /etc/rc2.d ln -s ../init.d/rdate S19rdate
在下次重启时,您应该看到时间正在被设置。
记住为 /etc/init.d/rdate
设置执行权限。如果您想知道上面的数字 S19 是什么意思,请阅读第 ??? 章。关键是在启动网络之后(netbase 启动网络)和在启动 xntp3 或某些其他需要时间的进程之前运行 rdate。
如果您连接到互联网,您可以安装 NTP 客户端,例如 Debian 版本 2.1 及更早版本中的 ntp
或 xntp3
。这使用网络时间协议 RFC 1305 将时钟同步到几十毫秒的精度。如果您需要这种或更高的精度,另请参阅 无线电时钟,第 16.6 节。
请参阅 ntp
附带的出色文档,位于 Debian 软件包 ntp-doc
中。它非常详尽,因此很长。如果您认为阅读文档是浪费时间,只需向您的互联网服务提供商或系统管理员询问 NTP 服务器名称,或者在 http://www.eecis.udel.edu/~mills/ntp/servers.html 中的“公共 NTP 服务器列表”中查找最近的服务器。如果您开始使用 NTP 服务器,通常礼貌的做法是通知服务器的管理员。
不要将您的系统配置为查询 1 级 NTP 服务器!如果您认为您需要这样做,那么您几乎肯定错了!
一旦您知道 NTP 服务器,请编辑文件 /etc/ntp.conf
以添加至少一行服务器行。这是一个例子
# /etc/ntp.conf, configuration for xntpd logfile /var/log/xntpd driftfile /var/lib/ntp/ntp.drift statsdir /var/log/ntpstats/ statistics loopstats peerstats clockstats filegen loopstats file loopstats type day enable filegen peerstats file peerstats type day enable filegen clockstats file clockstats type day enable server ntp.somedomain.something server ntp.something.else
请注意,我在上面的示例中更改了实际的服务器名称,以防止所有 Debian GNU/Linux 用户盲目地使用该服务器。除了服务器行之外的所有其他内容都在安装 xntp3
后存在。
如果您没有永久的互联网连接,那么运行 NTP 客户端不是一个好的解决方案。NTP 客户端同步频率相对较高,并且需要互联网连接始终处于开启状态。如果您有拨号互联网连接,您可以运行命令 ntpdate
(也在 ntp
软件包中)在每次连接时同步。
另一种可能性是将 cron 设置为每天运行一次 ntpdate
,这对于大多数用途来说都具有良好的精度。以下是可以从 cron 启动并运行 ntpdate
的示例脚本。此脚本假定 /etc/ntp.conf
已正确设置,因为它从该文件中获取服务器名称。
dilbert# cat /etc/cron.nightly/ntpdate #!/bin/sh # # Last modification: Sat Aug 8 05:27:07 EEST 1998 # ntpdate cron nightly NTPDATE=/usr/sbin/ntpdate LOGFILE=/var/log/xntpd NTPCONFFILE=/etc/ntp.conf NTPSERVERS= GREP=/usr/bin/grep CUT=/usr/bin/cut if [ -f $NTPCONFFILE ] ; then echo "===========================" >> $LOGFILE echo "<<< `date` " >> $LOGFILE for i in `grep ^server $NTPCONFFILE | $CUT --fields 2 --delimiter \ ` do NTPSERVERS="$NTPSERVERS $i" done $NTPDATE $NTPSERVERS >> $LOGFILE ###echo $NTPDATE $NTPSERVERS $LOGFILE echo ">>> `date` " >> $LOGFILE fi exit 0 dilbert#
Debian GNU/Linux 还有命令 netdate
,有关更多信息,请参阅 man 手册 netdate(8L)
。它使用 RFC 868 中定义的协议。
如果您有多个要同步的主机,则不应让它们全部单独同步到外部 NTP 服务器。这会给 NTP 服务器带来负载,如果它是公共和免费的服务,那里的人们可能会开始不喜欢您!至少询问是否可以同步您的所有机器。
更好的方法是将您的一台主机设置为 NTP 服务器,将其同步到外部 NTP 服务器,其余主机同步到您自己的 NTP 服务器。ntp
软件包也提供服务器组件,因此您只需要配置它即可。这也不是特别困难,但是您应该阅读文档并理解对等概念和层级结构。
如果您想要更高的精度或无法与公共互联网中的 NTP 服务器同步,您可以购买无线电时钟。这些时钟从使用非常精确的时钟的时间服务器获取时间,并使用无线电波广播时间信号。
有些无线电时钟需要附近的地面发射器才能接收信号。如果您获得其中一个,请确保您可以在计划使用的位置接收信号。发射器是地面发射器,因此它们无法在全球范围内工作。
另一种无线电时钟使用全球定位系统 GPS 接收器。GPS 卫星在近地轨道上环绕地球,并且应该始终至少有四颗在地平线上方。它们主要用于导航,但它们的工作原理是基于发送时间信号。对于时间同步,只需从一颗卫星获取信号就足够了,但通常需要将 GPS 天线安装在室外才能获得良好的接收效果。
文件中的时间戳采用 UTC 格式。命令 ls -l
以本地时间显示文件时间戳,使用有效的时区。由于时间戳采用 UTC 格式,因此可以在不同的计算机之间比较时间戳。如果时钟未同步,则可能会导致问题。
考虑这种情况:您登录主机 B,主机 B 通过 NFS 从 NFS 服务器主机 A 加载您的主目录。您编辑某个文件,保存它并启动 make
。如果主机 A 和主机 B 中的时钟未同步,则 make
可能会抱怨文件修改时间在未来,或者因为对象较新而无法编译该文件。
cron 中的时间是本地时间。这意味着,如果您配置 cron 在早上 7 点启动某个程序,则它是系统时区确定的早上 7 点本地时间。
如果系统时区与您使用 TZ 环境变量为自己设置的时区不同,或者您有两个时区不同的主机需要在两个主机上同时启动某些内容,则会导致头痛。
[ 上一篇 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 下一篇 ]
Debian GNU/Linux 系统管理员手册 (过时文档)
本手册自 2006 年 12 月 29 日起已过时并被弃用。请参阅 http://www.de.debian.org/doc/user-manuals#quick-reference。ardo.van.rangelrooij@tip.nl
Tapio.Lehtonen@IKI.FI