时间管理

文件和目录的三种时间

  • Access,atime,文件被访问的时间
  • Modify,mtime,文件内容被修改的时间
  • Change,ctime,文件元数据(属性)被修改的时间
# 查看文件的三种时间
# stat /etc/passwd
  File: /etc/passwd
  Size: 2167      	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 264753      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-08-28 15:34:27.591947624 +0800
Modify: 2022-08-28 15:34:27.527948064 +0800
Change: 2022-08-28 15:34:27.527948064 +0800
 Birth: -


# 只查看atime
ls -l --time=atime /etc/passwd

# 只查看mtime(不加任何选项则默认查看的是mtime)
ls -l /etc/passwd

# 只查看ctime
ls -l --time=ctime /etc/passwd


# 刷新文件的所有时间
touch /etc/passwd

在 Linux 系统中,每个文件和目录都有三种时间属性,它们分别是:

  1. 访问时间(Access Time,atime):表示文件或目录最后一次被访问或读取的时间。当用户或进程读取文件内容、执行文件或获取文件属性时,访问时间会被更新。
  2. 修改时间(Modification Time,mtime):表示文件或目录最后一次修改内容的时间。当文件的内容被修改、写入或更新时,修改时间会被更新。
  3. 更改时间(Change Time,ctime):表示文件或目录元数据(例如权限、所有者等)最后一次更改的时间。当文件或目录的元数据发生更改时,更改时间会被更新。

这三种时间属性在文件系统中以元数据的形式存储,并与每个文件或目录相关联。它们可以通过 ls -l 命令或 stat 命令查看。下面是一些相关命令示例:

  • 查看文件的时间属性:

    bashCopy code
    ls -l filename

    输出类似于:

    csharpCopy code
    -rw-r--r-- 1 user group 1024 May 20 10:30 filename

    在这个示例中,文件的访问时间是 “May 20 10:30”,修改时间是 “May 20 10:30”,更改时间也是 “May 20 10:30”。

  • 使用 stat 命令查看更详细的时间属性:

    bashCopy code
    stat filename

    输出会包含访问时间、修改时间和更改时间等详细信息。

需要注意的是,某些文件系统可能不会记录访问时间(atime)或更改时间(ctime)。也可以使用一些特殊的命令(例如 touch 命令)来修改这些时间属性,但通常情况下,它们由操作系统和文件系统自动管理并更新。

Linux 时间相关文件

时区文件

在 Linux 系统中,时区文件通常是位于/usr/share/zoneinfo/目录下的。时区文件的命名通常按照地区和城市的命名方式进行组织,例如/usr/share/zoneinfo/America/New_York表示美国纽约的时区。

然而,对于不同的发行版和操作系统,时区文件的存放路径可能会有所不同。下面是一些常见的 Linux 发行版中的时区文件存放路径:

  • Ubuntu 和 Debian:/usr/share/zoneinfo/
  • CentOS 和 Fedora:/usr/share/zoneinfo/
  • Arch Linux:/usr/share/zoneinfo/
  • SUSE Linux:/usr/share/zoneinfo/
  • Alpine Linux:/usr/share/zoneinfo/

此外,Linux 系统中还有一个 /etc/localtime 文件,它实际上是一个指向时区文件的符号链接。这个符号链接指向所选时区的具体文件,以提供当前系统的时区设置。

要更改系统的时区设置,你可以通过更新 /etc/localtime 文件或使用相关的命令(如timedatectltzselect)来进行设置。请注意,在修改时区设置时需要具有管理员权限。

其它

在 Linux 系统中,有几个与时间相关的文件和目录,它们在管理和维护系统时间方面起着重要的作用。以下是一些常见的时间相关文件和目录:

  1. /etc/timezone:该文件存储了系统默认时区的信息。它通常包含一个时区标识符,例如 “America/New_York”,用于指定系统的默认时区。
  2. /etc/localtime:这是一个符号链接,指向当前系统使用的时区文件。它可以是 /usr/share/zoneinfo/ 目录中的某个时区文件,具体取决于系统时区设置。
  3. /usr/share/zoneinfo/:该目录包含了各个时区的具体定义文件。每个时区都以不同的地区和城市命名,例如 “America/New_York” 或 “Asia/Tokyo”。/etc/localtime 文件会链接到此目录下的某个时区文件,以确定系统所使用的时区。
  4. /etc/timezone/etc/sysconfig/clock:这些文件在某些发行版中用于存储系统时钟的配置信息,包括时区设置和是否使用 UTC 时间等。
  5. /etc/adjtime:该文件记录了系统时钟的校准信息,用于在系统重启后恢复时钟的状态。它包含了时钟的偏差和校准参数,以便进行时间同步和调整。
  6. /var/log/wtmp/var/log/lastlog:这些文件是系统日志文件,记录了用户登录和注销的时间信息。它们可以用于跟踪用户的活动和登录历史。

这些文件和目录在 Linux 系统中用于管理和维护时间相关的设置和信息。根据具体的发行版和配置,可能会有一些变化。使用这些文件和目录,你可以设置系统的时区、校准时钟、跟踪用户登录时间等。

Linux 修改时区

方法一

  • 更推荐的做法
  • 需要安装:tzdata包(centos、ubuntu此包同名)
  • 需要有/etc/localtime这个软连接文件存在才可以
# 执行此命令
timedatectl set-timezone Asia/Shanghai

# 本质上是修改了软链接的指向
# ll /etc/localtime
lrwxrwxrwx 1 root root 33 Feb 28 13:31 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai

方法二

  • 修改前
# date
Wed Jun  7 10:47:05 UTC 2023


# cat /etc/timezone
Etc/UTC


# ll /etc/localtime
lrwxrwxrwx 1 root root 27 Jun  7 06:36 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC
  • 修改后
# ln -vfs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


# ll /etc/localtime
lrwxrwxrwx 1 root root 35 Jun  7 18:52 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai

# date
Wed Jun  7 18:53:16 CST 2023


# 此文件重启后也不会生效
# cat /etc/timezone
Etc/UTC

/etc/timezone 是一个文本文件,用于存储系统的时区信息。在一些Linux发行版中,/etc/timezone 文件包含当前系统的时区设置。

该文件的内容通常是时区标识符,例如 “Asia/Shanghai” 或 “Etc/UTC”。这些标识符遵循特定的时区命名约定,用于指定地理区域和时区偏移。

在你的例子中,/etc/timezone 文件的内容为 “Etc/UTC”,表示当前系统的时区设置为协调世界时(Coordinated Universal Time,UTC)。

需要注意的是,修改 /etc/localtime 文件并不会自动更新 /etc/timezone 文件的内容。因此,尽管你更改了 /etc/localtime 的符号链接以更改时区,但 /etc/timezone 文件仍然保持不变,显示旧的时区标识符。

如果你希望更新 /etc/timezone 文件以反映实际的时区设置,你可以手动编辑该文件,将其内容更改为对应的时区标识符。例如,在你的例子中,将内容更改为 “Asia/Shanghai”。

请注意,在大多数情况下,更改 /etc/timezone 文件不会自动更改系统的时区设置。它仅用于存储时区信息。要确保时区设置生效,你需要使用适当的工具或命令,如 timedatectl 命令,来应用时区更改并更新系统配置。

Ubuntu 时间相关设置

Ubuntu 默认的时间同步方式

Ubuntu 操作系统默认使用 systemd-timesyncd 服务来进行时间同步。systemd-timesyncd 是 systemd 系统和服务管理器的一部分,它提供了简单的网络时间协议(NTP)客户端功能。

systemd-timesyncd 通过与配置的 NTP 服务器进行通信,自动同步系统时间。它会在系统启动时自动启动,并在后台运行以保持时间的准确性。以下是 Ubuntu 操作系统中 systemd-timesyncd 的一些特点和配置信息:

  • 配置文件路径:/etc/systemd/timesyncd.conf
  • 默认 NTP 服务器:Ubuntu 默认情况下将使用 ntp.ubuntu.com 作为默认的 NTP 服务器。
  • 时间同步周期:默认情况下,systemd-timesyncd 每次同步时间间隔为 5 分钟。
  • 时间校准方式:systemd-timesyncd 使用逐渐调整时间的方式,以平滑地校准系统时钟。
  • 时区管理:systemd-timesyncd 与系统的时区设置无直接关联,它专注于时间同步而非时区管理。

你可以通过编辑 /etc/systemd/timesyncd.conf 文件来自定义 systemd-timesyncd 的配置,包括更改默认的 NTP 服务器、调整同步周期等。配置文件中包含了详细的注释,可帮助你了解各个选项的用途和配置方法。

使用以下命令可以检查 systemd-timesyncd 服务的状态:

systemctl status systemd-timesyncd

通过 systemctl 命令,你可以启动、停止、重启和查看 systemd-timesyncd 服务的状态。

需要注意的是,如果系统中已经存在其他的 NTP 客户端或服务(如 ntpd 或 chrony),它们可能会优先于 systemd-timesyncd 进行时间同步。在这种情况下,系统将使用其他 NTP 客户端或服务来管理时间同步。

修改为24小时制

echo "LC_TIME=en_DK.UTF-8" >> /etc/default/locale

# 修改完成后必须重启才能生效

同步时间

# 安装
apt -y install ntpdate

# 同步时间
ntpdate time1.aliyun.com >/dev/null

修改时间无效解决方法

# 用root用户修改服务器时间无效;使用hwclock -w也不行

# 解决方法:
# 需要取消自动从互联网同步时间才可以的
timedatectl set-ntp 0

上面的命令可以关闭自动同步,然后你再设置就好了

# 如果又要打开可以运行:
timedatectl set-ntp 1

CentOS 时间相关设置

CentOS 默认的时间同步方式

CentOS 操作系统默认使用 systemd-timesyncd 服务来进行时间同步,类似于 Ubuntu 操作系统。systemd-timesyncd 是 systemd 系统和服务管理器的一部分,提供了简单的网络时间协议(NTP)客户端功能。

在 CentOS 中,systemd-timesyncd 会在系统启动时自动启动,并在后台运行以保持时间的准确性。以下是 CentOS 操作系统中 systemd-timesyncd 的一些特点和配置信息:

  • 配置文件路径:/etc/systemd/timesyncd.conf
  • 默认 NTP 服务器:CentOS 默认情况下将使用 0.centos.pool.ntp.org1.centos.pool.ntp.org2.centos.pool.ntp.org3.centos.pool.ntp.org 作为默认的 NTP 服务器。
  • 时间同步周期:默认情况下,systemd-timesyncd 每次同步时间间隔为 5 分钟。
  • 时间校准方式:systemd-timesyncd 使用逐渐调整时间的方式,以平滑地校准系统时钟。
  • 时区管理:systemd-timesyncd 与系统的时区设置无直接关联,它专注于时间同步而非时区管理。

你可以通过编辑 /etc/systemd/timesyncd.conf 文件来自定义 systemd-timesyncd 的配置,包括更改默认的 NTP 服务器、调整同步周期等。配置文件中包含了详细的注释,可帮助你了解各个选项的用途和配置方法。

使用以下命令可以检查 systemd-timesyncd 服务的状态:

systemctl status systemd-timesyncd

通过 systemctl 命令,你可以启动、停止、重启和查看 systemd-timesyncd 服务的状态。

需要注意的是,如果系统中已经存在其他的 NTP 客户端或服务(如 ntpd 或 chrony),它们可能会优先于 systemd-timesyncd 进行时间同步。在这种情况下,系统将使用其他 NTP 客户端或服务来管理时间同步。

cat: /etc/systemd/timesyncd.conf: No such file or directory

如果你在 CentOS 上执行 cat /etc/systemd/timesyncd.conf 命令时出现了 “No such file or directory” 的错误消息,那可能是因为该文件不存在或路径不正确。

在某些 CentOS 版本中,systemd-timesyncd 可能不会使用 /etc/systemd/timesyncd.conf 这个配置文件。相反,它可能会使用 /usr/lib/systemd/timesyncd.conf/etc/systemd/timesyncd.conf.d/*.conf 这些路径下的配置文件。

你可以尝试使用以下命令来查看 systemd-timesyncd 的配置文件内容:

cat /usr/lib/systemd/timesyncd.conf

或者,查看 /etc/systemd/timesyncd.conf.d/ 目录下的配置文件(如果有的话):

ls /etc/systemd/timesyncd.conf.d/

请注意,确保你具有足够的权限来访问这些文件和目录。如果你不是以 root 用户身份执行这些命令,可能需要使用 sudo 权限。

如果你希望自定义 systemd-timesyncd 的配置,你可以在适当的位置创建一个配置文件,并按照 systemd-timesyncd 的配置规则进行设置。