文章

如何在 Linux 中设置或修改时区

本文是 Linuxize 网站关于更改 Linux 时区的一篇文章的翻译

如何在 Linux 中设置或修改时区

原文:https://linuxize.com/post/how-to-set-or-change-timezone-in-linux/

如何在 Linux 中设置或修改时区

一个时区是指拥有相同标准时间的一块地理区域。一般来说,时区是在安装操作系统时设置的,但是安装后再设置也是很容易的。

使用正确的时区对于许多跟系统有关的任务和进程来说是很重要的。比如说,一个定时命令的守护进程使用系统时区来执行定时任务。时区也被用在日志的时间戳上。

这个教程介绍了在 Linux 中设置或修改时区的必要步骤。

检查当前时区

timedatectl 是一个命令行工具,可以允许我们查看和修改系统的时间和日期。在现代所有基于 systemd 的 Linux 系统中都包含这个命令。

要查看当前时区,不加参数直接运行 timedatectl

1
2
3
4
5
6
7
8
julian@basoom:~$ timedatectl
               Local time: Wed 2023-12-13 18:11:22 UTC
           Universal time: Wed 2023-12-13 18:11:22 UTC
                 RTC time: Wed 2023-12-13 18:11:23
                Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

上面的输出中显示系统的时区是 UTC。

系统的时区是通过创建一个 /etc/localtime 软链接并指向位于 /usr/share/zoneinfo 目录的某一个二进制时区标识文件来设置的。

另一种查看时区的办法是用 ls 命令查看软链接的指向

1
2
julian@basoom:~$ ls -l /etc/localtime 
lrwxrwxrwx 1 root root 27 Dec 13 18:11 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC

在 Linux 中修改时区

在修改时区之前,你需要知道你想要使用的时区的全名。时区的命名规则遵守“地区/城市”的格式。

要查看所有可用的时区,使用 timedatectl list-timezones 命令或者直接列举出 /usr/share/zoneinfo 目录下的所有文件。

1
2
3
4
5
6
7
8
9
10
11
julian@basoom:~$ timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Asmera
Africa/Bamako
Africa/Bangui
Africa/Banjul
...

当你知道了你要使用的时区的全名后,假如说是 America/New_York,使用管理员权限运行如下命令

1
sudo timedatectl set-timezone America/New_York

此时再使用 timedatectl 命令查看是否修改成功

1
2
3
4
5
6
7
8
julian@basoom:~$ timedatectl
               Local time: Wed 2023-12-13 13:21:16 EST
           Universal time: Wed 2023-12-13 18:21:16 UTC
                 RTC time: Wed 2023-12-13 18:21:16
                Time zone: America/New_York (EST, -0500)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

恭喜!你成功修改了系统的时区!

通过创建软链接修改时区

如果你运行的系统比较老,没有 timedatectl 这个工具,你也可以通过修改 /etc/localtime 软链接的指向来修改时区。

先移除当前的软链接文件

1
sudo rm -rf /etc/localtime

找到你要设置的时区文件,并创建软链接

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

要检查是否成功,可以用 date 命令,输出中会包含时区信息。

本文由作者按照 CC BY 4.0 进行授权