linux时间
使用linux时,时间这一块不是很清楚,本篇博客记录网上搜集的教程并整理
时间概述
首先需要清楚两个时间概念:硬件时间
和系统时间
windows中的时间
Windows中的系统时间会自动保存在BIOS时钟里面,启动计算机的时候,系统会自动在BIOS里面取硬件时间,以保证时间的不间断。
linux系统中的时间
linux系统在默认情况下,系统时间和硬件时间并不会自动同步。在Linux运行过程中,系统时间和硬件时间以异步的方式运行,互不干扰。硬件时间的运行,是靠BIOS电池来维持,而系统时间,是用CPU Tick来维持的。在系统开机的时候,会自动从BIOS中取得硬件时间,设置为系统时间。
date
date命令方便查看当前系统时间和设置系统时间
- 查看系统时间
1 | root@linux:~# date # 打印当前时区时间 |
- 设置系统时间
1 | date -s "20210703 17:11:22" |
hwclock
硬件时间的设置,可以用hwclock或者clock命令。两者基本相同,只用一个就行,只不过clock命令除了支持x86硬件体系外,还支持Alpha硬件体系。
1 | root@linux:~# hwclock -h |
查看硬件时钟
1
2root@linux:~# hwclock --show
2021-07-03 17:17:35.708633+080同步系统时间到硬件时间
1
2
3
4
5[root@controller ~]# hwclock
Thu 06 Apr 2017 11:46:35 AM CST -0.028650 seconds
[root@controller ~]# hwclock -w
[root@controller ~]# hwclock
Thu 06 Apr 2017 11:47:00 AM CST -0.223930 seconds同步硬件时间到系统时间
1
2
3
4
5[root@controller ~]
Thu Apr 6 11:48:31 CST 2017
[root@controller ~]
[root@controller ~]
Thu Apr 6 11:48:41 CST 2017修改硬件时间
1
2
3[root@controller ~]
[root@controller ~]
Mon 12 Dec 2016 10:19:05 AM CST -0.107052 seconds
timedatectl
timedatectl命令对于RHEL / CentOS 7和基于Fedora 21+的分布式系统来说,是一个新工具,它作为systemd系统和服务管理器的一部分,代替旧的传统的用在基于Linux分布式系统的sysvinit守护进程的date命令。timedatectl命令可以查询和更改系统时钟和设置,你可以使用此命令来设置或更改当前的日期,时间和时区,或实现与远程NTP服务器的自动系统时钟同步。
1 | root@linux:~# timedatectl -h |
查看当前时间设置
1
2
3
4
5
6
7
8root@linux:~# timedatectl status
Local time: Sat 2021-07-03 17:26:02 CST
Universal time: Sat 2021-07-03 09:26:02 UTC
RTC time: Sat 2021-07-03 09:26:06
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: noname description Local time 本地时区时间 Universal time 世界协调时 RTC time 硬件时间(real-time clock) Time zone 当前设置的时区 System clock synchronized 如果和远程NTP服务器成功同步,显示为yes systemd-timesyncd.service active NTP时间同步是否开启,yes表示是,systemd-timesyncd服务为活动也就是开启了NTP时间同步 RTC in local TZ no表示硬件时钟设置为协调世界时(UTC),yes表示硬件时钟设置为本地时间 设置系统时间
1
2
3timedatectl set-time 15:58:30 #只设置时间
timedatectl set-time 20151120 #只设置日期
timedatectl set-time '16:10:40 2015-11-20' #同时设置日期和时间显示可用时区
1
timedatectl list-timezones
设置系统时区
1
2timedatectl set-timezone "Asia/Shanghai"
timedatectl set-timezone UTC设置硬件时钟时区
1
2timedatectl set-local-rtc 0 #将硬件时钟设置为协调世界时
timedatectl set-local-rtc 1 #将硬件时钟设置为本地时区设置系统时间同步到远程NTP服务器
1
2timedatectl set-ntp true # 开启同步
timedatectl set-ntp false # 关闭同步
ntpdate
NTP即Network Time Protocol(网络时间协议),是一个互联网协议,用于同步计算机之间的系统时钟。
为了避免主机时间因为长期运行下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。
Linux系统下,一般使用ntp服务器来同步不同机器的时间。一台机器,可以同时是ntp服务端和ntp客户端。在生产系统中,推荐使用像DNS服务器一样分层的时间服务器来同步时间。
不同机器间同步时间,可以使用ntpdate
命令,也可以使用ntpd
服务。
1 | [root@node1 ~]# ntpdate [NTP IP/hostname] |
常见问题
1. timedatectl
报错1
1 | $ timedatectl |
解决方案:
1 | apt-get install dbus |