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
它将在终端里打开一个会话窗口,让你选择你的地理位置。
然后选择时区所对应的城市。我选择了上海。
选择确定后,你的系统时间会立即作出改变。
适用于所有Linux发行版的更改时区的方法
以下方法适用于所有Linux发行版。首先打开一个终端窗口,输入下面的命令。
sudo ln -sf /usr/share/zoneinfo
先不要按Enter键,我们需要按一下Tab键。终端会列出许多地理位置。
在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这台时间服务器同步成功了。
你好 请问这篇文章可以转载吗
可以,注明来源就行了。原文链接要用 HTML 代码的形式,如:
<a href=”https://www.linuxdashen.com/linux系统用命令配置时区并同步系统时间”>Linux系统用命令行配置时区并同步系统时间</a>
直接粘贴原文URL会有乱码。