第二十五章 Linux系统时间管理详解
一、概述
在Linux中有硬件时钟与系统时钟两种时钟。硬件时钟是指主板上的时钟设备对应的时钟,也就是通常可以在BIOS画面设定的时钟;系统时钟则是指kernel中的时钟;所有Linux相关指令与函数都是读取系统时钟的设定。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟就会独立运行。
二、显示或设置系统日期与时间-date
1.含义
date命令来自于英文单词的时间、时钟,其功能是用于显示或设置系统日期与时间信息。运维人员可以根据想要的格式来输出系统时间信息,时间格式MMDDhhmm[CC][YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数。
语法格式:date [选项] [+输出形式]
2.常用参数
| -d datestr | 显示 datestr 中所设定的时间 (非系统时间),自定义时间 |
|---|---|
| -s datestr | 将系统时间设为 datestr 中所设定的时间 |
| -u | 显示目前的格林威治时间 |
| --help | 显示帮助信息 |
| --version | 显示版本编号 |
3.常用示例
以默认格式输出系统当前的日期与时间信息
[root@jindada ~]# date
Wed Jul 29 11:19:19 CST 2020
按照“年-月-日”的指定格式输出系统当前的日期信息
[root@jindada ~]# date +%Y #世纪
2020
[root@jindada ~]# date +%y #年代
20
[root@jindada ~]# date +%m #月份
07
[root@jindada ~]# date +%d #日期
29
[root@jindada ~]# date +%Y-%m-%d
2020-07-29
[root@jindada ~]# date +%F #显示日期
2020-07-29
[root@jindada ~]# date +%y-%m-%d
20-07-29
按照“小时:分钟:秒”的指定格式输出系统当前的时间信息
[root@jindada ~]# date +%H #时
11
[root@jindada ~]# date +%M #分
23
[root@jindada ~]# date +%S #秒
24
[root@jindada ~]# date
Wed Jul 29 11:23:28 CST 2020
[root@jindada ~]# date +%H:%M:%S
11:23:43
[root@jindada ~]# date +%T #显示时间
11:24:08
[root@jindada ~]# date +%F-%T
2020-07-29-11:24:34
按照星期的指定格式输出系统当前的日期信息
[root@jindada ~]# date +%w #周几
3
[root@jindada ~]# date +%W #今年第几周
30
[root@jindada ~]# date +%s #距离1970年1月1日0分0秒过来多少秒
1595993167
4.自定义日期示例
[root@jindada ~]# date +%F
2020-07-29
[root@jindada ~]# date -d "-1 day" +%F
2020-07-28
[root@jindada ~]# date -d "+1 day" +%F
2020-07-30
[root@jindada ~]# date -d "+1 month" +%F
2020-08-29
[root@jindada ~]# date -d "-1 month" +%F
2020-06-29
[root@jindada ~]# date -d "-1 year" +%F
2019-07-29
[root@jindada ~]# date -d "+1 year" +%F
2021-07-29
5.修改系统时间
[root@jindada ~]# date
Wed Jul 29 11:31:42 CST 2020
[root@jindada ~]# date -s 20200730
Thu Jul 30 00:00:00 CST 2020
[root@jindada ~]# date
Thu Jul 30 00:00:08 CST 2020
[root@jindada ~]# date -s 2020/07/29
Wed Jul 29 00:00:00 CST 2020
[root@jindada ~]# date
Wed Jul 29 00:00:02 CST 2020
[root@jindada ~]# date -s 11:32:30
Wed Jul 29 11:32:30 CST 2020
[root@jindada ~]# date
Wed Jul 29 11:32:31 CST 2020
[root@jindada ~]# date -s "20200730 11:00:00"
Thu Jul 30 11:00:00 CST 2020
三、设置日期与时间-ntpdate
1.含义
ntpdate命令是用来设置本地日期和时间。它从指定的每个服务器获得了一些样本,并应用标准 NTP 时钟过滤器和选择算法来选择最好的样本。
使用很多服务器可以大幅度改善 ntpdate 命令的可靠性与精度。尽管能使用单一服务器,但您能通过提供至少三个或四个服务器以获得更好的性能。
如果一个类似 xntpd 守护程序的 NTP 服务器守护程序正在同一主机上运行,命令将拒绝ntpdate设置日期。
语法格式:ntpdate [参数]
2.安装
[root@jindada ~]# yum install ntpdate -y
3.常用参数
| -aKeyid | 使用 Keyid 来认证全部数据包 |
|---|---|
| -b | 通过调用 settimeofday 子例程来增加时钟的时间 |
4.时间同步
# 向时间服务器进行同步时间
ntp.aliyun.com
ntp1.aliyun.com .... ntp7.aliyun.com
[root@jindada ~]# ntpdate ntp.aliyun.com
29 Jul 11:36:33 ntpdate[31370]: step time server 203.107.6.88 offset -84415.000442 sec
[root@jindada ~]# date
Wed Jul 29 11:36:35 CST 2020
[root@jindada ~]# date -s 20200730
Thu Jul 30 00:00:00 CST 2020
[root@jindada ~]# ntpdate ntp.aliyun.com
29 Jul 11:36:56 ntpdate[31392]: step time server 203.107.6.88 offset -44591.413933 sec
[root@jindada ~]# date
Wed Jul 29 11:37:02 CST 2020
四、设置日期与时间-hwclock
1.含义
hwclock命令是一个硬件时钟访问工具,它可以显示当前时间、设置硬件时钟的时间和设置硬件时钟为系统时间,也可设置系统时间为硬件时钟的时间。
在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。所有Linux相关指令与函数都是读取系统时钟的设定。
语法格式:hwclock [参数]
2.常用参数
| --debug | 显示hwclock执行时详细的信息。 |
|---|---|
| --directisa | hwclock预设从/dev/rtc设备来存取硬件时钟。若无法存取时,可用此参数直接以I/O指令来存取硬件时钟。 |
| --hctosys | 将系统时钟调整为与目前的硬件时钟一致。 |
| --set --date=<日期与时间> | 设定硬件时钟。 |
| --show | 显示硬件时钟的时间与日期。 |
| --systohc(-s) | 将硬件时钟调整为与目前的系统时钟一致。 |
| --test | 仅测试程序,而不会实际更改硬件时钟。 |
| --utc | 若要使用格林威治时间,请加入此参数,hwclock会执行转换的工作。 |
| --version | 显示版本信息。 |
3.常见示例
查看硬件时间
[root@jindada ~]# hwclock
Tue 08 Nov 2022 03:01:49 PM CST -0.832248 seconds
设置硬件时间要依赖于操作系统时间,具体方法如下
[root@jindada ~]# hwclock -s #将系统时间同步到BIOS
[root@jindada ~]# hwclock -w #将BIOS时间同步系统
查看版本信息
[root@jindada ~]# hwclock -v
hwclock from util-linux 2.23.2
五、设置系统时间与日期-timedatectl
1.含义
timedatectl命令来自于英文词组”time date control“的缩写,其功能是用于设置系统时间与日期。与date命令设置日期时间不同,timedatectl命令设置过的日期时间信息将被写入到系统配置文件中,从而立即且长期有效,不会随系统重启后而失效,同时还能够查看系统时间与日期,一站式搞定系统时间~
语法格式:timedatectl [参数]
2.常用参数
| status | 显示当前时间设置 |
|---|---|
| set-time TIME | 设置系统时间 |
| set-timezone ZONE | 设置系统时区 |
| list-timezones | 显示已知时区 |
| set-ntp (true/false) | 开启或关闭NTP |
3.常用示例
查看当前系统中的时区、日期、时间等信息
[root@jindada ~]# timedatectl status
Local time: Tue 2022-11-08 15:09:28 CST
Universal time: Tue 2022-11-08 07:09:28 UTC
RTC time: Tue 2022-11-08 07:09:28
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: no
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
关闭NTP时间同步服务器功能
[root@jindada ~]# timedatectl set-ntp false
[root@jindada ~]# timedatectl status
Local time: Tue 2022-11-08 15:12:30 CST
Universal time: Tue 2022-11-08 07:12:30 UTC
RTC time: Tue 2022-11-08 07:12:30
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: no
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
设置系统日期
[root@jindada ~]# timedatectl set-time 2022-11-11
设置系统时间
[root@jindada ~]# timedatectl set-time 20:18
查看可选时区
[root@jindada ~]# timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
………………省略部分输出信息………………
设置系统时区
[root@jindada ~]# timedatectl set-timezone "Asia/Shanghai"

浙公网安备 33010602011771号