Linux,时钟和时间

本文介绍了在Linux系统中设置时钟和时区的方法。详细解释了如何配置系统时钟和硬件时钟,如何选择使用UTC时间或本地时间,以及如何通过设置符号链接来指定时区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux,时钟和时间

介绍:

本文档解释了如何从linux下设置计算机的时钟,如何设置您的时区和其它与linux如何保存时间相关的材料。
您的计算机有两个时钟,一个是始终运行的、由电池供电的( 硬件的、BIOS或CMOS )时钟,另一个是由运行在您的计算机上的操作系统维护的( 系统 )时钟。硬件时钟通常只在操作系统启动时用来设置系统时钟,然后直到重启或关闭系统,由系统时钟来记录时间。在Linux 系统中,您可以选择用UTC/GMT 时间或本地时间来记录硬件时钟。推荐的选项是用UTC 记录,因为夏令时可以自动记录。使用UTC 记录硬件时钟的唯一不足是,如果您使用双系统,其它操作系统,如DOS 要求硬件时钟用本地时间设置,那么在那个操作系统里时间将是错误的。

设置时区:

Linux 下的时区是通过建立从/etc/localtime[1] 到/usr/share/zoneinfo [2] 目录下与您所在时区相符的文件的符号链结实现的。例如,由于我在南澳大利亚,/etc/localtime就是到/usr/share/zoneinfo/Australia/South的符号链结。要建立这个链结,运行:
ln -sf ../usr/share/zoneinfo/your/zone /etc/localtime

替换your/zone 为形如Australia/NSW或Australia/Perth 的文件。看看/usr/share/zoneinfo目录都有什么时区。

[1] 这里假设/usr/share/zoneinfo 是到/etc/localtime 的链结的前提是Redhat Linux
[2] 在旧版本的系统里,您会发现使用/usr/lib/zoneinfo而不是/usr/share/zoneinfo。参考后面“一些应用程序中时间错误”。

设置UTC 或本地时间:

当Linux 启动时,一个启动脚本运行/sbin/hwclock 程序复制当前硬件时钟时间到系统时钟。hwclock 假定硬件时钟设置为本地时间,除非它使用了--utc 参数。在RedHat Linux下您不是编辑启动脚本,而是编辑/etc/sysconfig/clock 文件,相应的改变UTC 一行为UTC=true或UTC=false。

设置系统时钟:

在Linux 下设置系统时钟使用date命令。例如,设置当前时间和日期为July 31,11:16pm,运行date 07312316 ( 注意这里的时间是24小时制) ;如果您想设置年份为1998,
应该运行date 073123161998 ;要是也想设置秒,运行date 07312316.30或date 073123161998.30。要查看Linux 当前本地时间,使用date,不带参数。

设置硬件时钟:

要设置硬件时钟,我喜欢的方式是首先设置系统时钟,然后设置硬件时钟为当前系统时钟时间,使用命令/sbin/hwclock --systohc (或 /sbin/hwclock --systohc --utc ) ,如果您使用UTC 保存硬件时钟) 。要查看当前硬件时钟的设置,不带参数运行hwclock 。如果硬件时钟是UTC 保存,而您想看相应的本地时间,运行/sbin/hwclock --utc 。

一些应用程序中时间错误:

如果一些应用程序,如date显示了正确的时间,而另一些则错误,而您运行着RedHat Linux 5.0/5.1,您很可能遇到了一个由于将时区信息从/usr/lib/zoneinfo 移动到/usr/share/zoneinfo 引起的bug 。修复的方法是建立一个从/usr/lib/zoneinfo 到/usr/share/zoneinfo 的符号链结:
ln -s ../share/zoneinfo /usr/lib/zoneinfo 。

小结:

*/etc/sysconfig/clock 设置硬件时钟,无论是用UTC 保存还是用本地时间保存
*建立/etc/localtime到/usr/share/zoneinfo/...的符号链结来设置时区
*运行date MMDDhhmm 来设置当前系统日期/ 时间
*运行/sbin/hwclock --systohc [--utc]来设置硬件时钟

其它有趣的注解:

Linux kernel总是按照从UTC 时间1970年1 月1 日午夜开始的秒数来储存和计算时间,无论您的硬件时钟是否用UTC 保存。转换到本地时间的工作是运行时完成的。这样做的一个妙处是,如果某人从不同的时区使用您的计算机,他可以设置时区环境变量,所有的日期和时间可以按他的时区正确显示。

如果自UTC 1972年1 月1 日开始的秒数用保存为带正负号32位整数,如同在您的Linux/Intel 系统上一样,您的时钟将在2038年停止工作。Linux 没有Y2K 问题,但是确实存在2038年的问题。令人期望的是,那时我们都会使用64位系统来运行Linux 了。64位整数将使我们的时钟一直运行到大约2922.71亿年。

其它值得一看的程序:

* rdate ──从远程机器获得当前时间;可以用来设置系统时间
* xntpd ──类似rdata ,但是它是相当精确的,并且您需要有永久的网络连结xntpd 持续地运行,记录网络延时、时钟漂移等事件但是也有一个程序( ntpdate ) 包括在内,像rdate 一样设置当前时间。

相关信息:

* date(1)
* hwclock(8)
* /usr/doc/HOWTO/mini/Clock
### Linux 系统时钟时间设置与同步方法 #### 查看当前系统时间硬件时钟时间 为了查看当前的系统时间硬件时钟时间,可以分别使用 `date` `hwclock --show` 命令。这有助于确认两者之间是否存在差异。 ```bash # 查看当前系统时间 date -R # 查看当前硬件时钟时间 hwclock --show ``` #### 修改系统时间 如果需要临时修改系统时间而不影响硬件时钟,可使用 `date -s` 命令来调整系统时间。不过需要注意的是,在下次启动时,系统将会自动从硬件时钟加载时间,覆盖掉这次更改[^2]。 ```bash # 将系统时间设为指定值 sudo date -s "YYYY-MM-DD HH:MM:SS" ``` #### 同步硬件时钟到系统时间 为了让系统时间反映最新的硬件时钟状态,可以通过下面这条命令实现: ```bash # 让系统时间跟随硬件时钟变化 sudo hwclock --hctosys ``` 相反地,若希望更新硬件时钟使之匹配当前的系统时间,则应运行此指令: ```bash # 更新硬件时钟至当前系统时间 sudo hwclock --systohc ``` #### 使用 NTP 进行网络时间协议同步 对于更精确的时间管理需求来说,推荐采用基于互联网的标准时间服务器来进行定期校准。为此目的,通常会选择安装并配置 NTP 或者 Chrony 服务作为解决方案之一[^5]。 ##### 安装启用 NTP 服务 通过包管理器安装 NTP 并开启其随开机自启功能;之后编辑 `/etc/ntp.conf` 文件指明信任的时间源地址列表,最后重启该守护进程使改动生效。 ```bash # Ubuntu/Debian系发行版下安装NTP客户端 sudo apt-get install ntp # CentOS/RHEL/Fedora等RedHat家族成员则执行下列语句代替上面那条 sudo yum install ntp # 开机启动NTP服务 sudo systemctl enable ntpd.service # 编辑/etc/ntp.conf文件添加或修改server项指向所需上游节点... # ...此处省略具体操作... # 应用新的配置重载NTPD sudo systemctl restart ntpd.service ``` ##### 利用 chronyd 替代传统方式 Chrony 是另一个优秀的开源软件套件,它提供了更加灵活高效的算法用于保持本地计算机上的准确计时。相比起经典的 NTP 实现方案而言,前者具有更快捷收敛速度以及更低延迟特性,尤其适合移动设备或者间歇联网环境下的应用场合。 ```bash # Fedora/CentOS上默认已预装好chrony组件无需额外获取; # 对于Ubuntu用户来讲只需简单键入apt-get install chrony即可完成部署工作。 sudo apt-get update && sudo apt-get install chrony # 接着打开/etc/chrony/chrony.conf文档按照官方说明指南进行个性化定制, # 主要关注pool/server关键字后面所跟参数部分代表的就是远程参考时基的位置信息啦! # 当一切准备就绪后记得让后台程序立刻响应最新变动哦~ sudo systemctl start chronyd.service sudo systemctl enable chronyd.service ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值