Linux时钟校对(一):时间和时区的操作

1、概述

大家好,我是欧阳方超,今天说一下操作系统时间和时区的校对、修改问题。
操作系统时间准确性是系统正常运行的重要保证,尤其是在使用分布式系统的场景中,不同机器间时间的同步显得尤为重要。

2、两种时钟

在Linux操作系统中有两种时钟,第一种是硬件时钟,又称为 RTC, CMOS时钟或BIOS clock,这种时钟的运转靠的是主板上的电池,所以即使关机了依然可以计时;第二种是系统时钟,该时钟有操作系统维护,系统启动时会读取硬件时钟并将其设置为系统时钟,即与硬件时钟同步一次;有趣的是在后续运行过程中,系统时钟和硬件时钟,并不会自动同步,而是以异步的方式运行,互不干扰。

2.1、硬件时钟

可以通过hwcolck或clock命令操作硬件时钟。
查看硬件时钟

[root@hadoopmaster ~]# hwclock --show
Sat 16 Apr 2022 08:04:47 PM CST  -0.506149 seconds
You have mail in /var/spool/mail/root
[root@hadoopmaster ~]# clock --show
Sat 16 Apr 2022 08:04:57 PM CST  -0.818679 seconds

设置硬件时钟

[root@hadoopmaster ~]# hwclock --set --date="2022-04-16 20:05:05"
[root@hadoopmaster ~]# hwclock --show
Sat 16 Apr 2022 08:05:13 PM CST  -0.725406 seconds

2.2、系统时钟

查看系统时钟

[root@hadoopmaster ~]# date
Sun Apr 17 14:01:37 CST 2022

修改时钟,可以按照下面的命令将系统时钟改为指定值

[root@hadoopmaster ~]# date -s "yyyy-MM-dd HH:mm:ss"

可能会遇到修改后无效的情况,这种情况下可能的原因是从互联网同步时间的功能处于开启状态,可以使用如下命令将其关闭

[root@hadoopmaster ~]# timedatectl set-ntp 0

当然再次开始时执行timedatectl set-ntp 1即可。
这里对timdatectl命令做一下说明,使用timedatectl可以查看时间、时区等信息,

[root@hadoopmaster ~]# timedatectl
      Local time: Sun 2022-04-17 16:06:55 CST
  Universal time: Sun 2022-04-17 08:06:55 UTC
        RTC time: Sun 2022-04-17 08:06:55
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

Local time是指地方时,
Universal time是指世界时,
RTC time指硬件时钟,
Time zone指时区,
NTP enabled: yes,yes是指NTP已经启用,当其值为no时说明NTP未启用,
NTP synchronized: yes,yes是指完成过NTP同步,no说明未完成过NTP同步,

2.3 硬件时钟与系统时钟间的同步

从硬件时钟同步时间至系统时钟

[root@hadoopmaster ~]# hwclock --hctosys
或者
[root@hadoopmaster ~]# clock --hctosys

从系统时钟同步时间至硬件时钟

[root@hadoopmaster ~]# hwclock --systohc
或者
[root@hadoopmaster ~]# clock --systohc

3、修改时区

时区是具有相同标准时间的地理区域。在操作系统安装过程中一般会让选择设置时区,但是后续也能对时区进行修改。下面介绍一下查看、修改时区的方法。

3.1 检查当前时区

检查当前时区用到的命令其实在上文中已经提到过,为timedatectl,当该命令不带任何参数时可以查看时区和时间,如下显示的时区为Asia/Shanghai

[root@hadoopmaster ~]# timedatectl
      Local time: Sun 2022-04-17 16:06:55 CST
  Universal time: Sun 2022-04-17 08:06:55 UTC
        RTC time: Sun 2022-04-17 08:06:55
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

其实还可以通过查看/etc/localtime被链接到哪个文件进行确定当前时区属于哪个时区,如下时区信息为Asia/Shanghai

[root@hadoopmaster ~]# ll /etc/localtime
lrwxrwxrwx 1 root root 33 Apr 16 17:12 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai

3.2 更改时区

时区的命名约定格式为“地区/城市名”方式,可以通过timedatectl list-timezone命令查询系统中所有可用的时区,下面展示的只是一部分

[root@bogon ~]# timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul

或者通过查看/usr/share/zoneinfo/下的文件来确认有哪些可用的时区

[root@bogon ~]# ll /usr/share/zoneinfo/
total 392
drwxr-xr-x.  2 root root   4096 Mar  9  2020 Africa
drwxr-xr-x.  6 root root   8192 Mar  9  2020 America
drwxr-xr-x.  2 root root    187 Mar  9  2020 Antarctica
drwxr-xr-x.  2 root root     26 Mar  9  2020 Arctic
drwxr-xr-x.  2 root root   4096 Mar  9  2020 Asia
drwxr-xr-x.  2 root root    196 Mar  9  2020 Atlantic
drwxr-xr-x.  2 root root   4096 Mar  9  2020 Australia
drwxr-xr-x.  2 root root     59 Mar  9  2020 Brazil
drwxr-xr-x.  2 root root    136 Mar  9  2020 Canada
-rw-r--r--.  1 root root   2102 Jan 30  2018 CET
drwxr-xr-x.  2 root root     45 Mar  9  2020 Chile

更改时区有两种方式,一种是使用timedatectl命令(如果系统中有该命令的话),另一种是为时区文件创建符合链接。
方式一:使用timedatactl命令
确定完要修改的时区后,可以使用如下命令进行修改,下面的命令将时区改为America/New_York时区

[root@hadoopmaster ~]# timedatectl set-timezone America/New_York
You have mail in /var/spool/mail/root

改完后可以查看验证一下是否更改成功,

[root@hadoopmaster ~]# timedatectl
      Local time: Sun 2022-04-17 05:10:49 EDT
  Universal time: Sun 2022-04-17 09:10:49 UTC
        RTC time: Sun 2022-04-17 09:10:49
       Time zone: America/New_York (EDT, -0400)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: yes
 Last DST change: DST began at
                  Sun 2022-03-13 01:59:59 EST
                  Sun 2022-03-13 03:00:00 EDT
 Next DST change: DST ends (the clock jumps one hour backwards) at
                  Sun 2022-11-06 01:59:59 EDT
                  Sun 2022-11-06 01:00:00 EST

显然已经更改成功。
方式二:通过创建符号链接来更改时区
在没有timedatectl命令的系统中,可以通过将/usr/share/zoneinfo下的不同时区文件链接到/etc/localtime的方式来更改时区,一般而言系统中已经有时区文件链接到/etc/localtime,我们可以将该文件先备份:cp /etc/localtime /etc/localtime.20220417bak01,然后为新的时区文件创建符号链接,注意如果不加-f可能会报“failed to create symbolic link ‘xxx’: File exists”的错误,

ln -s /usr/share/zoneinfo/America/New_York /etc/localtime

4、总结

本文介绍了修改Linux系统时钟和硬件时钟的方法,同时也介绍了修改时区的办法,修改时区一种办法是使用timedate time-zone xxx命令,另一种办法是为时区文件创建符合链接,文章不宜过长,关于Linux时钟的问题先介绍到这里。
我是欧阳方超,把事情做好了自然就有兴趣了,如果你喜欢我的文章,欢迎点赞、转发、评论加关注。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值