linux 日期、时间、时区设置

inux系统时钟有两个,一个是硬件时钟,即BIOS时间,就是我们进行CMOS设置时看到的时间,另一个是系统时钟,是linux系统Kernel时间。当Linux启动时,系统Kernel会去读取硬件时钟的设置,然后系统时钟就会独立于硬件运作。有时我们会发现系统时钟和硬件时钟不一致,因此需要执行时间同步,下面就分享一下时间设置及时钟同步的命令使用方法

1. tzselect

  • linux 系统时钟
    使用date命令设置时间、日期
# 将时间设置为11点23分10秒
[root@Minimall ~]# date -s 11:23:10
# 将日期设置为2017年10月5日
[root@Minimall ~]# date -s 10/05/2017
# 将时间设置为2017年10月5日11点38分30秒(MMDDhhmmYYYY.ss)
[root@Minimall ~]# date 1005113817.30
Thu Oct  5 11:38:30 EDT 2017
[root@Minimall ~]# date 100511402017.20
Thu Oct  5 11:40:20 EDT 2017
  • linux硬件时钟
[root@Minimall ~]# hwclock 
Thu 05 Oct 2017 11:41:35 AM EDT  -0.955086 seconds
[root@Minimall ~]# hwclock --show
Thu 05 Oct 2017 11:41:39 AM EDT  -0.955529 seconds
[root@Minimall ~]# clock --show
Thu 05 Oct 2017 11:41:45 AM EDT  -0.955689 seconds

设置硬件时间

设置硬件时间
# hwclock --set --date="10/05/17 11:55" (月/日/年时:分:秒)
或者
# clock --set --date="10/06/17 11:55" (月/日/年时:分:秒)
  • 同步系统及硬件时钟
    可以使用hwclock或者clock进行同步
[root@Minimall ~]# date
Thu Oct  5 11:23:15 EDT 2017
[root@Minimall ~]# clock
Thu 05 Oct 2017 11:48:36 AM EDT  -0.955181 seconds
[root@Minimall ~]# clock --hctosys #hc硬件时间  sys系统时间
[root@Minimall ~]# date
Thu Oct  5 11:49:02 EDT 2017
[root@Minimall ~]# 

当然也可以反向同步,clock --systohc 用系统时钟同步(to)硬件时钟

  • tzselect 时区设置
    执行命令tzselect命令 --> Asia --> China --> Beijing Time..., 如下文操作:
[root@Minimall ~]# tzselect 
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
 1) Africa
 2) Americas
 3) Antarctica
 4) Arctic Ocean
 5) Asia
 6) Atlantic Ocean
 7) Australia
 8) Europe
 9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.
#? 5
Please select a country.
 1) Afghanistan       18) Israel            35) Palestine
 2) Armenia       19) Japan         36) Philippines
 3) Azerbaijan        20) Jordan            37) Qatar
 4) Bahrain       21) Kazakhstan        38) Russia
 5) Bangladesh        22) Korea (North)     39) Saudi Arabia
 6) Bhutan        23) Korea (South)     40) Singapore
 7) Brunei        24) Kuwait            41) Sri Lanka
 8) Cambodia          25) Kyrgyzstan        42) Syria
 9) China         26) Laos          43) Taiwan
10) Cyprus        27) Lebanon           44) Tajikistan
11) East Timor        28) Macau         45) Thailand
12) Georgia       29) Malaysia          46) Turkmenistan
13) Hong Kong         30) Mongolia          47) United Arab Emirates
14) India         31) Myanmar (Burma)       48) Uzbekistan
15) Indonesia         32) Nepal         49) Vietnam
16) Iran          33) Oman          50) Yemen
17) Iraq          34) Pakistan
#? 9
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
#? 1

The following information has been given:

    China
    Beijing Time

Therefore TZ='Asia/Shanghai' will be used.
Local time is now:  Thu Oct  5 23:54:42 CST 2017.
Universal Time is now:  Thu Oct  5 15:54:42 UTC 2017.
Is the above information OK?
1) Yes
2) No
#? 1

You can make this change permanent for yourself by appending the line
    TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai
[root@Minimall ~]#

执行完tzselect命令选择时区后,时区并没有更改,只是在命令最后提示你可以执行TZ='Asia/Shanghai'; export TZ 并将这行命令添加到.profile中,然后退出并重新登录。参考下图中date命令看到的结果,最终时区显示为CST,即中国标准时间。

[root@Minimall ~]# date
Thu Oct  5 11:57:51 EDT 2017
[root@Minimall ~]# TZ='Asia/Shanghai'; export TZ
[root@Minimall ~]# date
Thu Oct  5 23:58:03 CST 2017

2. timedatectl

设置时区同样, 在 CentOS 7 中, 引入了一个叫 timedatectl 的设置设置程序

$ timedatectl # 查看系统时间方面的各种状态
      Local time: 四 2014-12-25 10:52:10 CST
  Universal time: 四 2014-12-25 02:52:10 UTC
        RTC time: 四 2014-12-25 02:52:10
        Timezone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
  • timedatectl list-timezones # 列出所有时区
  • timedatectl set-local-rtc 1 # 将硬件时钟调整为与本地时钟一致, 0 为设置为 UTC 时间
  • timedatectl set-timezone Asia/Shanghai # 设置系统时区为上海
    其实不考虑各个发行版的差异化, 从更底层出发的话, 修改时间时区比想象中要简单:
  • cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

推荐阅读更多精彩内容