Linux与window时钟时区流程和一些小细节

发布时间 2023-06-02 12:20:07作者: 没有翅膀的蜗牛

Linux与window时钟时区流程和一些小细节

Linux修改时钟两种:手动和联网

手动:date命令

[root@haha sysconfig]# date #显示当前系统时钟
2023年 05月 31日 星期三 18:00:07 CST
[root@haha sysconfig]# date -d "+2month" #显示现在时钟经过计算后的时钟,不会改变系统时钟,说白了就是帮自己计算一下时间
2023年 07月 31日 星期一 18:02:28 CST
[root@haha sysconfig]# date -s "2018-01-01 23:12:34" #设置系统时钟,会改变系统时钟。
2018年 01月 01日 星期一 23:12:34 CST
[root@haha sysconfig]# date +"%Y%m%d" #按照这个格式显示当前系统时钟(不同的字母代表不同的含义具体看手册man)
20180101
[root@haha sysconfig]# date +"%Y-%m-%d %H:%M:%S" #可以添加符号输出(不同的字母代表不同的含义具体看手册man)
2018-01-01 23:16:41

联网:ntpdate 好像还有个chrony是服务器时间同步的主要工具,两者的主要区别就是

执行ntpdate 后,时间是立即修整,中间会出现时间断档;

而执行chrony后,时间也会修正,但是是缓慢将时间追回,并不会断档。这里只说ntpdate,chrony另行百度

ntpdate -u cn.pool.ntp.org #注意这里要加-u参数,不然可能会报no server suitable for synchronization found  (国家授时中心210.72.145.44已经连接不上!可以用其他ntp源)
国内:
cn.pool.ntp.org  中国开源免费NTP服务器
ntp1.aliyun.com 阿里云NTP服务器
ntp2.aliyun.com 阿里云NTP服务器
time1.aliyun.com 阿里云NTP服务器
time2.aliyun.com 阿里云NTP服务器
国外:
time1.apple.com 苹果NTP服务器
time2.apple.com 苹果NTP服务器
time3.apple.com 苹果NTP服务器
time4.apple.com 苹果NTP服务器
time5.apple.com 苹果NTP服务器
time1.google.com 谷歌NTP服务器
time2.google.com 谷歌NTP服务器
time3.google.com 谷歌NTP服务器
time4.google.com 谷歌NTP服务器
pool.ntp.org 开源免费NTP服务器
来源:https://www.cnblogs.com/luchuangao/p/7795293.html
###############################开始操作########################################33
31 May 23:07:50 ntpdate[40193]: step time server 185.209.85.222 offset 170708673.093979 sec
[root@haha sysconfig]# date     #系统时钟
2023年 05月 31日 星期三 23:09:20 CST
[root@haha sysconfig]# hwclock  #硬件时钟也可以用clock命令
2023年06月01日 星期四 23时09分29秒  -0.683149 秒
[root@haha sysconfig]# clock		
2023年06月01日 星期四 23时09分45秒  -0.386856 秒
[root@haha sysconfig]# clock -w  #将系统时钟写进硬件时钟硬件时钟命令具体看下面解释
###############################################################################
你问我为什么要把系统时钟写进硬件时钟?因为现在只是把系统时钟修改了,而系统重新启动后是需要硬件时钟(RTC)作为参考依据的,毕竟系统关机后系统停止运行系统时钟停止了。(虽然系统可能关机的时候会把系统时钟自动写进硬件时钟中。。。。)
hwclock   或者clock   clock与hwclock相同
[root@localhost ~]# type -a hwclock
hwclock is /sbin/hwclock
hwclock is /usr/sbin/hwclock
[root@localhost ~]# ll /sbin/hwclock /usr/sbin/hwclock 
-rwxr-xr-x. 1 root root 46940 11月 22 23:27 /sbin/hwclock
lrwxrwxrwx. 1 root root    18 3月  26 19:27 /usr/sbin/hwclock -> ../../sbin/hwclock
[root@localhost ~]# type -a clock
clock is /sbin/clock
[root@localhost ~]# ll /sbin/clock 
lrwxrwxrwx. 1 root root 7 3月  26 19:27 /sbin/clock -> hwclock

下面是常见命令用法
-r, --show        读取并打印硬件时钟(read hardware clock and print result)
-s, --hctosys     将硬件时钟同步到系统时钟(set the system time from the hardware clock)
-w, --systohc     将系统时钟同步到硬件时钟(set the hardware clock to the current system time)


修改完以后可能还有坑

因为时区问题,一般来说个人用户(不用双系统不用虚拟机或服务器)是不会因为系统时间而感到苦恼的,毕竟只要有网操作系统自动解决。所以这里以双系统为例说一下:Linux与windows时间不一样。

计算机硬件本身是有时钟的(上面说了,BIOS更准确的说是RTC)实时时钟(RTC)芯片是普遍应用在集成电路上的一个模块,采用内置的高精度晶体振荡器作为时钟源,在PC和服务器中,为了保证RTC在主机断电后还可以继续保持运转,整机厂商还会在主板上焊接电池模块对RTC进行供电。也就是说,对于一个整机设备而言,RTC芯片是一切时间的来源。
i2c总线是集成电路上的一种通信链路,连接集成商电路上各个硬件模块,在本文中主要是用于连接主机(BIOS)和RTC芯片,通常情况下,系统关机时CPU会清空其寄存器,这就导致了设备在再一次启动时,会通过i2c总线初始化访问RTC。(主板上有个电池是维持主板时间的能源,如果没电了硬件不通电时间就乱了,一般恢复出厂时间)
粗略的逻辑如下图所示:

所以系统时间来自于此(毕竟不开机系统时间就停止),对于windows来说,开机从硬件得到的时间就是本地区的时钟(当然也可以设置),所以没什么可以动的,那就只能是linux了。

对Linux而言是否把硬件时间作为本地时区要看是否设置了UTC=true,这个设置在/etc/sysconfig/clock 文件(有的Linux系统可能没有(一般rehat有),vim直接添加就是)

[root@localhost ~]# /etc/sysconfig/clock

#打开clock文件,将相关内容改成以下内容
UTC=false #协调世界时
ARC=false
ZONE="Asia/Shanghai"
###上面是文件内容###
###下面是来源于网络注释###
ZONE=Asia/Shanghai;/usr/share/zoneinfo 下面的文件。
UTC=false; 硬件时钟是否为 UTC 或者说 GMT 时钟。
ARC=false;如果是在 Alpha 机器上,则设置为 true 。
把硬件时钟设置为 UTC 的好处就是他能自动设置夏时制,缺点时,在安装有多重操作系统启动的机器上,在另外的操作系统上时钟会错误。

Linux 的时钟设置文件为:/etc/localtime ,实际上这个文件是 /usr/share/zoneinfo 目录下对应文件的符号连接。假设我们所处的地区位于上海,那么只要运行以下的命令就可以设置时区了。

,我猜测如果没有设置为false那么Linux就会把硬件时钟作为UTC,然后Linux经过时区计算,将系统显示为本地时区的时间,如果为false那么应该就直接把硬件时钟作为本时区时钟,所以问题就出来了如果UTC=true(硬件时间=windows时钟!=Linux经过转换时钟,那么windows与Linux双系统就会相差约8小时,linux>windows时间8小时)。还有就是Linux没有所谓的北京时间,只有所谓的IANA互联网数字分配机构)的时区数据库(Time Zone Database)作为系统的时区。在该数据库中,中国地区的IANA标准时区有四个——上海、香港、澳门和台北,因此“北京时间”在Linux系统里面本质上是没有的,所以映射为上海时区。

上面如果没有设置ZONE那么就还存在时区问题(毕竟虽然解决的Windows与Linux时钟不一样的问题,但如果用Linux计算其他时区时钟时就会混乱,毕竟不知道“本地时区”是不是真本地时区。)

除了上面的更改时区的方式还有一个tzselect命令(注t=time,z=zone,应该是这样)

[root@localhost ~]# tzselect #按照提示进行选择时区(上面说过没有所谓的北京时区,只有IANA时区数据库)
[root@localhost ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#或者直接连接过去。

本篇部分来自网络上的大佬们的分享,为此感谢。如果有错误之处大佬们希望指出。

Linux 系统时间和硬件时间 - Dus - 博客园 (cnblogs.com)

Linux系统时间和硬件时间设置 - Οo白麒麟оΟ - 博客园 (cnblogs.com)

Linux系统时间、系统时区和时钟同步的部分理解_木下-俱欢颜的博客-CSDN博客