![典型的 Linux 中的默认时区是什么(如果有)?](https://linux22.com/image/1447814/%E5%85%B8%E5%9E%8B%E7%9A%84%20Linux%20%E4%B8%AD%E7%9A%84%E9%BB%98%E8%AE%A4%E6%97%B6%E5%8C%BA%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%88%E5%A6%82%E6%9E%9C%E6%9C%89%EF%BC%89%EF%BC%9F.png)
我正在管理 CentOS 6 Linux 操作系统。
我想删除所有明确的时区信息,因为这些信息可能会导致系统出现除 UTC 时区以外的任何情况。这是因为它是虚拟机的模板,也是因为它已决定将默认时区设为 UTC。
我是否必须更改/etc/sysconfig/clock
文件(我假设这是 CentOS 特定的配置实体),或者/etc/localtime
两者兼而有之?我可以同时删除两者吗?然后它会恢复到 UTC 或其他固有默认值吗?例如,我只是找不到有关系统在没有这些文件的情况下如何运行的文档。或者也许我不应该删除任何一个,但为什么时区偏好分布在两个文件中?除非每个文件的含义略有不同?
我当然可以通过实证测试,但我将来可能会更换发行版,然后再次拥有另一个时区,而我的脚本会尝试实现发行版中立的兼容性。
答案1
默认时区是无时区,即 UTC 时间。没有硬编码时区信息,因为它可能很快就会变得不正确/过时。
内核时钟始终按照 UTC 运行(或至少按照想是 UTC)。默认情况下,它期望从硬件时钟 (RTC) 读取 UTC 时间,但允许启动过程指定正确的“本地时间”偏移量,因为大多数 PC 在 RTC 中保存本地时间。
用户空间使用基于 UTC 的“纪元”时间戳,但在显示日期时会读取/etc/localtime
或环境变量。如果两者都不存在,您将获得 UTC。$TZ
如果需要,您还可以明确将它们设置为“UTC”或“Etc/UTC”(例如,export TZ=UTC
暂时覆盖系统范围的区域)。
一些发行版会拆分配置,因为区域信息文件本身没有区域名称,所以一旦管理员复制/usr/share/zoneinfo/Europe/London
到/etc/localtime
,就不再可能知道它是“欧洲/伦敦”。
例如,在设置屏幕中显示当前区域时需要该名称,或者localtime
在每次启动时更新文件时需要该名称(每次更新 zoneinfo 时都需要将其再次复制到 /etc)。
其他发行版通过符号链接区域信息文件并读取符号链接的目标来解决这个问题。然而,这需要/usr
很早就安装,这是老手们不喜欢的。
配置文件不可移植;/etc/sysconfig
特定于 Red Hat(Debian 有/etc/default
)。然而,systemd系统总是使用符号链接方法,并且有一个timedatectl set-timezone
用于更改它的工具。
答案2
在我的工作中,机器时常在世界各地物理移动,因此与时区的关联只会引起问题。
由于我也是 UTC 的忠实粉丝,所以我将时区设置为雷克雅未克。这样得到的结果是 UTC +0,没有那个烦人的 DST。
需要时,您可以将其符号链接/etc/localtime
到 中任何合适的时区定义/usr/share/zoneinfo/
。我也不确定这是否特定于 CentOS,我们恰好使用了很多 CentOS 服务器。