Linux系统用命令行配置时区并同步系统时间

这篇文章介绍如何用命令行在Linux系统下配置时区并使用NTP协议让系统时间与时区自动同步。

检查当前系统的时区设置

用date命令查看时区设置

date

命令输出结果:

2016年 03月 02日 星期三 02:50:15 EST

可以发现,我的系统被设置成了美国东部时区(Eastern Standard Time)。但我在中国,所以我需要把时间从EST更改成CST(China Standard Time)。

Debian系Linux发行版更改时区的方法

基于Debian的Linux发行版,包括Debian,Ubuntu, Linux Mint,Elementary OS等可以使用下面的命令更改时区。

sudo dpkg-reconfigure tzdata

它将在终端里打开一个会话窗口,让你选择你的地理位置。

sudo dpkg-reconfigure tzdata

然后选择时区所对应的城市。我选择了上海。

选择时区所对应的城市

选择确定后,你的系统时间会立即作出改变。

适用于所有Linux发行版的更改时区的方法

以下方法适用于所有Linux发行版。首先打开一个终端窗口,输入下面的命令。

sudo ln -sf /usr/share/zoneinfo

先不要按Enter键,我们需要按一下Tab键。终端会列出许多地理位置。

适用于所有Linux发行版的更改时区的方法

sudo ln -sf /usr/share/zoneinfo/后面输入一个地理位置,例如,我输入了Asia。然后再按一下Tab键,会列一很多个城市,输入时区所对应的城市,例如我输入了shanghai。

输入时区所对应的城市

再按一个空格,输入/etc/localtime。所以最后你输入的命令为

sudo ln -sf /usr/share/zoneinfo/your-geographic-area/your-city /etc/localtime

现在按Enter键运行这个命令。它会创建一个软链接,将/etc/localtime文件指向对应的时区文件。你的系统时间会立即发生改变,可以用date命令查看。但有一些桌面环境,如XFCE,任务栏的时间不会改变,用户需要重新登录才能看到变化。

Real Time Clock

RTC的全称是Real Time Clock,也叫做硬件时钟(hardware clock). RTC时间是由主板的CMOS电池驱动的。即使你关闭电脑,RTC时钟也会一直运转,除非CMOS电池没电了。很多情况下,RTC时间并不准确。

要查看你的RTC时间,输入以下命令

timedatectl

输出结果

Local time: Wed 2016-03-02 17:47:19 CST
 Universal time: Wed 2016-03-02 09:47:19 UTC
 RTC time: Wed 2016-03-02 09:47:19
 Time zone: Asia/Shanghai (CST, +0800)
 Network time on: yes
 NTP synchronized: yes
 RTC in local TZ: no

你可以看见,我的本地时间是17:49:19, 但RTC时间是 09:47:19。RTC时间与本地时间不相同。有时候这会给系统的程序带来问题。RTC时间是不可靠的。

RTC时间默认没有时区。要让系统以UTC时区读取RTC时间,执行下面的命令

timedatectl set-local-rtc 0

要让系统以本地时区读取RTC时间,运行这个命令。

timedatectl set-local-rtc 1

推荐以UTC时区读取RTC时间,这可以减少麻烦。

让系统时间与本地时区时间自动同步

有时候,即使你正确设置好了时区,你的系统时间仍然有可能不准确。我们可以使用NTP协议来让系统时间与本地时区时间自动同步。

许多程序需要准确的时间才能发挥应有的功能。而NTP可以为网络上的机器提供精确的时间。NTP是一个应用层协议,使用UDP作为传输层协议。NTP时间服务器从原子钟(atomic clock)获取精确的时间。

使用Systemd的Linux系统可以用以下命令启用NTP网络时间自动同步。

timedatectl set-ntp true

这条命令会启动systemd-timesyncd服务。查看NTP状态 。

timedatectl status

输出结果:

 Local time: Wed 2016-03-02 18:30:35 CST
 Universal time: Wed 2016-03-02 10:30:35 UTC
       RTC time: Wed 2016-03-02 10:30:35
      Time zone: Asia/Shanghai (CST, +0800)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no

网络时间(network time)为Yes就表示启用了NTP时间同步,NTP同步(NTP synchronized)有两个状态:Yes或No。如果 Network time没有启用,那么NTP同步的状态一定为No。现在可以查看systemd-timesyncd的状态。

sudo systemctl status systemd-timesyncd

输出结果:

● systemd-timesyncd.service - Network Time Synchronization
  Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
  Active: active (running) since Wed 2016-03-02 18:30:29 CST; 1h 37min ago
    Docs: man:systemd-timesyncd.service(8)
Main PID: 2243 (systemd-timesyn)
  Status: "Synchronized to time server 202.112.29.82:123 (0.arch.pool.ntp.org)."
   Tasks: 2 (limit: 512)
  CGroup: /system.slice/systemd-timesyncd.service
  └─2243 /usr/lib/systemd/systemd-timesyncd

可以发现,系统与202.112.29.82这台时间服务器同步成功了。

为这篇文章评分
[Total: 10 Average: 4.2]

2 Responses to “Linux系统用命令行配置时区并同步系统时间

  • Riven Nero
    6 years ago

    你好 请问这篇文章可以转载吗

    • Linux魔法师
      6 years ago

      可以,注明来源就行了。原文链接要用 HTML 代码的形式,如:

      <a href=”https://www.linuxdashen.com/linux系统用命令配置时区并同步系统时间”>Linux系统用命令行配置时区并同步系统时间</a>

      直接粘贴原文URL会有乱码。

Leave a Reply

Your email address will not be published.

The maximum upload file size: 2 MB. You can upload: image, audio, video, document, spreadsheet, interactive, text, archive, code, other. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop file here