请关注本头条号,每天坚持更新原创干货技术文章。
如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习
1. 前言
如果你想修改Linux系统里的时间,本文合适你。Linux上有多种修改时间的命令工具,本文介绍最常用、最通用的方法。
linux修改时间
先来了解世界时间的标准,包括GMT、UTC、CST、DST、以及操作系统同步时间的方式
1.1 UTC
整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。
1.2 GMT
格林威治标准时间 (Greenwich Mean Time)指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。
UT(世界时)和GMT(格林威治标准时)是相同的时间标准,都是基于天体观察的。
UT 是相同标准的“科学”名称。GMT:格林威治时间,是标准的“民间”名称。
因此,格林威治标准时(GMT)和世界时 (UT) 是相等的。
UTC是我们现在用的时间标准,GMT是老的时间计量标准。UTC是根据原子钟来计算时间,而GMT是根据地球的自转和公转来计算时间,也就是太阳每天经过位于英国伦敦郊区的皇家格林威治天文台的时间就是中午12点。由于现在世界上最精确的原子钟50亿年才会误差1秒,可以说非常精确。而GMT因为是根据地球的转动来计算时间的,而地球的自转正在缓速变慢,所以使用GMT的话,会不太精准,一般情况那感觉不到差异,但是UTC更加科学和精确。
1.3 CST
中国标准时间 (China Standard Time)
1.4 DST
夏令时(Daylight Saving Time) 指在夏天太阳升起的比较早时,将时钟拨快一小时,以提早日光的使用。(中国不使用)
我们需要知道的是:
GMT 8 = UTC 8 = CST
1.5 操作系统时间
以Linux为例,其实Windows或者其他操作系统也是类似的。
Linux时间有两个时间:
- Wall Time:系统时间,该时间由系统维护,可以是临时,也可以是网络上同步回来的,也可以是从硬件读取出来的,前提条件是系统服务正常运行,如果系统关机了,那就不存在Wall Time
- RTC Time:RTC(Real-Time Clock)或CMOS时间,即硬件时间,你可以理解为主板BIOS里的时间,由一块小电池维持运转,持续更新的时间。与服务器本身是否通电无关,与服务器的操作系统也无关。当操作系统重启后,原来的Wall Time时间将会忘记,并重新读取RTC时间。注意的是,CMOS仅保存日期时间数值,无法保存时区和夏令时设置。
所以Wall Time时间可以不等于RTC Time(比如你通过网络同步了准确的时间,而发现你的硬件时间不准确)。当你认为Wall Time是正确的,RTC Time时间是错误的,这时,你可以把系统时间写入到硬件,执行命令hwclock --systohc
2. 查看时间与时区
[root@zcwyou ~]# date -R
输出结果:
Fri, 23 Nov 2018 20:08:42 -0500
查看当前时区:
[root@zcwyou ~]# ll /etc/localtime
输出结果:
lrwxrwxrwx. 1 root root 38 Sep 26 22:33 /etc/localtime -> ../usr/share/zoneinfo/America/New_York
上面的输出信息表明,当前系统的时区为纽约,并非中国时区。
3. 修改Linux服务器时区
3.1 方法一:针对特定用户修改
使用tzselect指引,用于生产修改指引,命令本身并不会修改系统时间
[root@zcwyou ~]# tzselect
输出结果:
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
1) Africa
2) Americas
3) Antarctica
4) Arctic Ocean
5) Asia
6) Atlantic Ocean
7) Australia
8) Europe
9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.
?选择5,亚洲。
Please select a country.
1) Afghanistan 18) Israel 35) Palestine
2) Armenia 19) Japan 36) Philippines
3) Azerbaijan 20) Jordan 37) Qatar
4) Bahrain 21) Kazakhstan 38) Russia
5) Bangladesh 22) Korea (North) 39) Saudi Arabia
6) Bhutan 23) Korea (South) 40) Singapore
7) Brunei 24) Kuwait 41) Sri Lanka
8) Cambodia 25) Kyrgyzstan 42) Syria
9) China 26) Laos 43) Taiwan
10) Cyprus 27) Lebanon 44) Tajikistan
11) East Timor 28) Macau 45) Thailand
12) Georgia 29) Malaysia 46) Turkmenistan
13) Hong Kong 30) Mongolia 47) United Arab Emirates
14) India 31) Myanmar (Burma) 48) Uzbekistan
15) Indonesia 32) Nepal 49) Vietnam
16) Iran 33) Oman 50) Yemen
17) Iraq 34) Pakistan
?选择9,中国
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
?选择1北京时间
最后输出结果
The following information has been given:
China
Beijing Time
Therefore TZ='Asia/Shanghai' will be used.
Local time is now: Sat Nov 24 09:10:44 CST 2018.
Universal Time is now: Sat Nov 24 01:10:44 UTC 2018.
Is the above information OK?
1) Yes
2) No
?选择1,确认
根据以上提示,现在开始修改配置文件,针对当前用户生效
[root@zcwyou ~]# vi ~/.bash_profile
添加以下内容,
TZ='Asia/Shanghai'; export TZ
[root@zcwyou ~]# exit
重新登录系统,查看生效时间,已经成功。
[root@zcwyou ~]# date
输出结果:
Sat Nov 24 09:15:02 CST 2018
创建一个测试账号试试
[root@zcwyou ~]# useradd ocr
切换到测试账号
[root@zcwyou ~]# su - ocr
查看时间:
[ocr@zcwyou ~]$ date
输出结果:
Fri Nov 23 20:24:27 EST 2018
结论时,其他用户并没有生效。
退出测试账号,回到root用户。
[ocr@zcwyou ~]$ exit
3.2 方法2:针对所有用户,永久生效
如果想针对所有用户生效,修改/etc/localtime,/etc/localtime是一个链接文件,指向时区文件存放的位置/usr/share/zoneinfo/XXX/YYY
强制/etc/localtime软链接到/usr/share/zoneinfo/Asia/Shanghai
[root@zcwyou ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
检查:
[root@zcwyou ~]# ll /etc/localtime
输出结果:
lrwxrwxrwx. 1 root root 33 Nov 24 09:25 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai
表明设置成功,当前系统时区为Asia/Shanghai
测试其他用户:
[root@zcwyou ~]# su - ocr
输出结果:
Last login: Sat Nov 24 09:24:25 CST 2018 on pts/1
[ocr@zcwyou ~]$ date
输出结果:
Sat Nov 24 09:25:46 CST 2018
以上输出表明,所有账号设置已经立即生效,都在使用CST时间。
退出测试账号:
[ocr@zcwyou ~]$ exit
logout
删除测试账号:
[root@zcwyou ~]# userdel ocr
4. 查看和修改Linux的时间
4.1 查看时间和日期
[root@zcwyou ~]# date
输出结果
Sat Nov 24 13:46:30 CST 2018
注:date命令不加参数可以直接看到当前日期时间
4.2 设置时间和日期
将系统日期设定成2019年10月30日
[root@zcwyou ~]# date -s 10/30/2019
输出:
Wed Oct 30 00:00:00 CST 2019
时间从00:00开始
将系统时间设定成下午6点6分06秒的命令
[root@zcwyou ~]# date -s 18:06:06
以上设置只是临时修改系统时间,当系统重新启动的时候就会失效,并重新使用硬件时间。
所以需要将当前时间和日期写入BIOS,避免重启后失效
[root@zcwyou ~]# hwclock -w
当然也可以直接修改硬件时间:
[root@zcwyou ~]# hwclock --set --date '2020-09-16 13:17:00'
hwclock --show 查看硬件的时间
hwclock --hctosys 把硬件时间同步给操作系统,即以硬件时间为准。
5. RedHat Linux 7和 centos 7的时间日期工具
从CentOS 7开始,使用了一个新的时间工具timedatectl
5.1 使用timedatectl读取时间
timedatectl或者timedatectl status
[root@zcwyou ~]# timedatectl
输出结果:
Warning: Ignoring the TZ variable. Reading the system's time zone setting only.
Local time: Sat 2018-11-24 10:03:47 CST
Universal time: Sat 2018-11-24 02:03:47 UTC
RTC time: Sat 2018-11-24 02:03:08
Time zone: Asia/Shanghai (CST, 0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
5.2 使用timedatectl设置时间
命令格式:
timedatectl set-time "YYYY-MM-DD HH:MM:SS"
例如
[root@zcwyou ~]# timedatectl set-time "2018-11-24 12:00:30"
5.3 列出所有时区
[root@zcwyou ~]# timedatectl list-timezones
5.4 设置时区
[root@zcwyou ~]# timedatectl set-timezone Asia/Shanghai
5.5 是否NTP服务器同步
[root@zcwyou ~]# timedatectl set-ntp yes
yes或者no,NTP协议利用网络进行时间同步,使用非常普遍,特别是手机。
6. CentOS 6 使用NTP协议同步时间
CentOS 6 客户端配置如下:
安装ntp服务
[root@zcwyou ~]# yum -y install ntp
设置时间源:
[root@zcwyou ~]# vi /etc/ntp.conf
添加以下内容:
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
防火墙设置允许NTP协议通过:
[root@zcwyou ~]# iptables -I INPUT -p udp -m udp --sport 123 -j ACCEPT service iptables save
启动ntp协议
[root@zcwyou ~]# service ntpd start
设置ntp服务开机自启:
[root@zcwyou ~]# chkconfig --level 35 ntpd on
7. CentOS 7上使用NTP服务
7.1 搭建NTP服务器
安装相关服务:
[root@zcwyou ~]# yum -y install ntpdate ntp
修改配置文件
[root@zcwyou ~]# vi /etc/ntp.conf
按要求添加或者修改以下内容
新增以下内容,添加日志.logfile /var/log/ntpd.log
新增以下内容,只允许192.168.1.0/24网段上的所有设备从本机上查询和同步时间,假设你的客户端都在192.168.1.0/24网段上
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
前面加#注释以下服务器
server 0.centos.pool.ntp.org iburstserver 1.centos.pool.ntp.org iburstserver 2.centos.pool.ntp.org iburstserver 3.centos.pool.ntp.org iburst新增以下内容,添加国内的时间服务器地址server 0.cn.pool.ntp.org iburst
server 1.cn.pool.ntp.org iburst
server 2.cn.pool.ntp.org iburst
server 3.cn.pool.ntp.org iburst
新增以下内容,当网络服务器不可用时,使用本地时间,假设本地IP为123.123.123.123
server 123.123.123.123 iburst
fudge 127.0.0.1 stratum 10
新增以下内容,允许上层时间服务器主动修改本机时间.
restrict 0.cn.pool.ntp.org nomodify notrap noquery
restrict 1.cn.pool.ntp.org nomodify notrap noquery
restrict 2.cn.pool.ntp.org nomodify notrap noquery
设置NTP服务开机自启
[root@zcwyou ~]# systemctl enable ntpd [root@zcwyou ~]# systemctl enable ntpdate [root@zcwyou ~]# systemctl is-enabled ntpd
同步时间:
[root@zcwyou ~]# ntpdate -u 1.cn.pool.ntp.org
当服务端与客户端之间的时间误差过大时,此时修改时间可能对系统或应用带来不可预知问题,NTP会停止时间同步。若检查NTP启动后时间未同步时,应考虑可能是时间误差过大所致,此时需要先手动设置时间,具体方法请看上面的教程。
启动NTP服务器:
[root@zcwyou ~]# systemctl start ntpdate [root@zcwyou ~]# systemctl start ntpd
防火墙放开NTP服务器
[root@zcwyou ~]# firewall-cmd --permanent --add-service=ntp [root@zcwyou ~]# firewall-cmd --reload
以上是自建的NTP服务器。
7.2 NTP客户端
安装NTP组件:
[root@zcwyou ~]# yum -y install sntp ntp ntpdate
修改ntp配置文件
[root@zcwyou ~]# vim /etc/ntp.conf
添加以下内容,假设你的NTP服务器IP为123.123.123.123:
server 123.123.123.123
必须重启ntpd服务才能使新配置生效:
[root@zcwyou ~]# systemctl restart ntpd
借用crontab计划任务工具,每天凌晨0点同步时间并写入硬件:
[root@zcwyou ~]# crontab -e
添加以下内容,假设你的NTP服务器IP为123.123.123.123
0 0 * * * /usr/sbin/sntp -P no -r 123.123.123.123;hwclock -w
在服务器群中使用以设置,确保所有服务器时间一致。
本文已同步至博客站,尊重原创,转载时请在正文中附带以下链接:
https://www.linuxrumen.com/rmxx/182.html
点击了解更多,快速查看更多的技术文章列表。