云网牛站
所在位置:首页 > Linux教程 > Linux系统用命令行配置时区并同步系统时间

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

2017-12-13 15:36:47作者:linux大神稿源:linuxdashen

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

 

检查当前系统的时区设置

用date命令查看时区设置

date

命令输出结果:

2017年 12月 13日 星期三 14: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

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

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

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

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

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

 

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

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

sudo ln -sf /usr/share/zoneinfo

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

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

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

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

再按一个空格,输入/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 2017-12-13 14:47:19 CST

Universal time: Wed 2017-12-13 06:47:19 UTC

RTC time: Wed 2017-12-13 06:47:19

Time zone: Asia/Shanghai (CST, +0800)

Network time on: yes

NTP synchronized: yes

RTC in local TZ: no

你可以看见,我的本地时间是14:49:19,但RTC时间是 06: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 2017-12-13 15:30:35 CST

Universal time: Wed 2017-12-13 07:30:35 UTC

RTC time: Wed 2017-12-13 07: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 2017-12-13 15: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这台时间服务器同步成功了。

 

相关主题

解决Ubuntu与Windows双系统时间不同步

精选文章
热门文章