我有一台双启动的 PC,为了让 Windows 和 Linux 在时间上达成一致,我已将硬件时钟设置为 Linux 中的本地时间,如所述这里。
现在我想编写一个脚本来检查我的 Linux 设置是否符合我的要求 - 为此,我需要检查硬件时钟是以本地时间还是 UTC 保存的。但是,即使硬件时钟是 UTC,它hwclock
也会给我本地时间的时间。
那么,如何知道 Linux 中的硬件时钟设置为本地时间还是 UTC?
(Linux 是 Crunchbang 11 - Debian 系列,Windows 是 8.1)
答案1
您可以使用或hwclock
显示结果。 localtime
utc
只需对每种情况使用相应的标志:
jim@g6:~$ sudo hwclock --localtime
lun 11 ago 2014 03:12:18 CLT -0.547401 seconds
jim@g6:~$ sudo hwclock --utc
dom 10 ago 2014 23:12:22 CLT -0.672848 seconds
然后运行date
并检查上述哪些结果与的输出相匹配date
。
答案2
您可以尝试下面的脚本:
#!/bin/bash
curl time.nist.gov:13 2>&1|tee time_nist_gov_13
while cat time_nist_gov_13|grep 'Empty\|denied\|unreachable'
do
sleep 0.1
curl time.nist.gov:13 2>&1|tee time_nist_gov_13
done
str=$(cat time_nist_gov_13 | sed '1,3d'|awk '{print $3}')
hh=$(echo $str|awk -F':' '{print $1}')
mm=$(echo $str|awk -F':' '{print $2}')
a=$(date -u | awk '{print $4 }'| awk -F':' '{print $1}')
b=$(date -u | awk '{print $4 }'| awk -F':' '{print $2}')
mindiff=$(echo "$b-$mm"|bc)
if [ $mindiff == "-1" ] ; then $mindiff = "1";
fi
if [ "$hh" == "$a" ] && ([ "$mm" == "$b" ] || [ "$mindiff" == "1" ]) ; then echo "Your Local time is assigned to UTC";
else echo "Your Local time is NOT assigned to UTC";
fi
解释如下:脚本获取 UTC+0 时间并将其与date -u
当地时间减去以 UTC+0 为参考的时区差异进行比较,如果相同,则表示您的当地时间符合您的时区要求。
它并不总是完美地工作,因为服务器有时可能无法访问,脚本将等待,并且脚本只处理三种错误过滤'Empty\|denied\|unreachable'
因此,一旦您得到“您的本地时间与 UTC 绑定”,就是这样,本地时间与 UTC 绑定,并带有本地时区偏移。
但无论如何,我编写此脚本是为了给出一个想法,如果您需要更认真的想法,请提供更多详细信息。这样任何人都可以看到您对该功能的要求。希望它有所帮助。