Linux 系统时间与硬件时间

Linux系统 gongyj 905℃ 已收录 0评论

系统时间: 一般说来就是我们执行 date 命令看到的时间,Linux 系统下所有的时间调用(除了直接访问硬件时间的命令)都是使用的这个时间。

硬件时间: 主板上 BIOS 中的时间,由主板电池供电来维持运行,系统开机时要读取这个时间,并根据它来设定系统时间(注意:系统启动时根据硬件时间设定系统时间的过程可能存在时区换算,这要视具体的系统及相关设置而定)。

UTC时间:Coordinated Universal Time 世界协调时间(又称世界标准时间、世界统一时间),在一般精度要求下,它与GMT(Greenwich Mean Time,格林威治标准时间)是一样的,其实也就是说 GMT≈UTC,但 UTC 是以原子钟校准的,更精确。
本地时间:由于处在不同的时区,本地时间一般与UTC是不同的,换算方法就是

本地时间 = UTC + 时区 或 UTC = 本地时间 - 时区

时区东为正,西为负,例如在中国,本地时间都使用北京时间,在 Linux 上显示就是 CST(China Standard Time,中国标准时,注意美国的中部标准时 Central Standard Time 也缩写为 CST,与这里的 CST 不是一回事!),时区为东八区,也就是 +8 区,所以 CST=UTC+(+8小时) 或 UTC=CST-(+8小时)。

一、时间命令

1、系统时间 date

直接调用 date,得到的是本地时间如果想得到 UTC 时间的话,使用 date -u。

[root@localhost ~]# date
2015年 11月 14日 星期六 19:06:15 CST
[root@localhost ~]# date -u
2015年 11月 14日 星期六 11:06:20 UTC

2、硬件时间 clock

clock 是 /sbin/hwclock 的软链接,直接调用 /sbin/hwclock 显示的时间就是 BIOS 中的时间吗?未必!这要看 /etc/sysconfig/clock 中是否启用了 UTC,如果启用了 UTC(UTC=true),显示的其实是经过时区换算的时间而不是 BIOS 中真正的时间,如果加上 –localtime 选项,则得到的总是 BIOS 中实际的时间。

[root@localhost ~]# hwclock
2015年11月14日 星期六 19时11分08秒  -0.406813 seconds
[root@localhost ~]# hwclock --utc
2015年11月14日 星期六 19时11分13秒  -0.453621 seconds
[root@localhost ~]# hwclock --localtime
2015年11月14日 星期六 11时11分25秒  -0.328638 seconds

如果修改 /etc/sysconfig/clock 里的 UTC 参数,需要重启才能生效,UTC=false 时,date、hwclock、hwclcok –localtime 输出的时间应该都一致,且此时 hwclock –utc 是没有意义的。

设置硬件时间:

hwclock --set --date="07/07/06 10:19:00" (月/日/年 时:分:秒)
或
hwclock --set --date="2006-07-06 10:19:00" (月/日/年 时:分:秒)

3、时区的设置

可以使用 tzselect 命令,按照向导选择时区,如果不想使用这个命令,可以修改文件来变更时区。

[root@localhost ~]# vim /etc/sysconfig/clock
ZONE=Asia/Shanghai(查/usr/share/zoneinfo下面的文件)
UTC=false

[root@localhost ~]# rm /etc/localtime
[root@localhost ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

重启后,时区就会改变了。

4、Linux 与 Windows 双系统时间同步

方式 A:使用 UTC(对linux就是 /etc/sysconfig/clock 中 UTC=true)

       开机: BIOS——->UTC(将BIOS中的时间看成是UTC)——(时区变化)—–>CST

       关机: CST ——-(时区变化)—–>UTC——-存储到——>BIOS

方式 B:不使用 UTC(对linux就是 /etc/sysconfig/clock 中 UTC=false)

       开机: BIOS———————>CST(将BIOS中的时间看成是CST)

       关机: CST ———存储到——>BIOS

通过设定 /etc/sysconfig/clock,Linux 可以支持这两种方式,然而 Windows 只支持方式 B(至少是默认支持B),那么在双系统情况下,如果 Linux 设成 A 方式,那么在 linux 与 Windows 系统切换时一定会造成时间混乱的,解决办法就是将 Linux 中 的 UTC 禁用,也设成 B 方式就可以了。

二、修改文件时间时间戳

 Linux 文件主要有三个时间,使用 touch 命令,可以修改文件的时间状态。

(1)modification time (mtime,修改时间):这个时间指的是文件内容修改的时间,而不是文件属性的修改,在写入文件时随文件内容的更改而更改的时间,用命令 ls -l 默认显示的就是这个时间。

(2)status time (ctime,状态时间):当一个文件的状态改变时,这个时间就会改变,例如更改了文件的权限与属性等,它就会改变。

(3)access time (atime,访问时间):当读取文件内容时,就会更改这个时间,例如使用 cat 去读取 /etc/man.config,那么该文件的atime就会改变。

例如:

1、使用 ls 命令查看

[root@localhost ~]# ls -l --full-time /etc/man.config
-rw-r--r--. 1 root root 4940 2013-02-22 10:13:09.000000000 +0800 /etc/man.config
[root@localhost ~]# ls -l --time=atime --full-time /etc/man.config
-rw-r--r--. 1 root root 4940 2015-11-12 13:36:02.010580572 +0800 /etc/man.config
[root@localhost ~]# ls -l --time=ctime --full-time /etc/man.config
-rw-r--r--. 1 root root 4940 2015-06-02 11:40:11.989999375 +0800 /etc/man.config

在 cat /etc/man.config 执行之后再查看 atime,该时间已经更改。

[root@localhost ~]# ls -l --time=atime --full-time /etc/man.config
-rw-r--r--. 1 root root 4940 2015-11-14 19:16:02.010580572 +0800 /etc/man.config

查看三种状态还可以使用以下短格式选项:

ls -lc filename         列出文件的 ctime
ls -lu filename         列出文件的 atime
ls -l filename          列出文件的 mtime

2、使用 stat 命令可以同时查看三个时间值:

[root@localhost ~]# stat /etc/man.config
  File: "/etc/man.config"
  Size: 4940            Blocks: 16         IO Block: 4096   普通文件
Device: 802h/2050d      Inode: 1574135     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-11-14 19:16:02.010580572 +0800
Modify: 2013-02-22 10:13:09.000000000 +0800
Change: 2015-06-02 11:40:11.989999375 +0800

文件的时间很重要,因为如果误判文件时间,可能会造成某些程序无法正常运行,万一我们发现一个文件的时间是未来的时间(很多时候会有这个问题,我们在安装的时候提到的 GMT 时间就是那个意思)。

3、touch 命令

怎样才能让次时间变成现在的时间呢?我们只需要一个 touch 命令即可。

touc 的用法

touch [-acdmt] 文件

选项与参数:

-a:仅修订 access time;

-c:仅修改文件的时间,若该文件不存在则不建立新文件;

-d:后面可以接欲修订的日期而不用目前的日期,也可以使用 –date="日期或时间";

-m:仅修改 mtime;

-r :使用参考文件的时间记录,将改时间状态赋给另一个文件;

-t:后面可以接欲修订的时间而不用目前的时间,格式为[YYMMDDhhmm];

例如:

[root@localhost ~]# touch -t 201511112030 inbak.log
[root@localhost ~]# stat inbak.log
  File: "inbak.log"
  Size: 0               Blocks: 0          IO Block: 4096   普通空文件
Device: 802h/2050d      Inode: 917696      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-11-11 20:30:00.000000000 +0800
Modify: 2015-11-11 20:30:00.000000000 +0800
Change: 2015-11-14 19:26:31.813466424 +0800
[root@localhost ~]# touch -d "2 days ago" inbak.log
[root@localhost ~]# stat inbak.log
  File: "inbak.log"
  Size: 0               Blocks: 0          IO Block: 4096   普通空文件
Device: 802h/2050d      Inode: 917696      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-11-12 19:26:45.300977026 +0800
Modify: 2015-11-12 19:26:45.300977026 +0800
Change: 2015-11-14 19:26:45.300478794 +0800
[root@localhost ~]# touch -d "2015-11-12 13:14:15" inbak.log
[root@localhost ~]# stat inbak.log
  File: "inbak.log"
  Size: 0               Blocks: 0          IO Block: 4096   普通空文件
Device: 802h/2050d      Inode: 917696      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-11-12 13:14:15.000000000 +0800
Modify: 2015-11-12 13:14:15.000000000 +0800
Change: 2015-11-14 19:27:18.955422780 +0800
[root@publish ~]# touch -r inbak.log /etc/man.config
[root@publish ~]# stat /etc/man.config
  File: "/etc/man.config"
  Size: 4940            Blocks: 16         IO Block: 4096   普通文件
Device: 802h/2050d      Inode: 1574135     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-11-12 13:14:15.000000000 +0800
Modify: 2015-11-12 13:14:15.000000000 +0800
Change: 2015-11-14 19:27:57.304447906 +0800

注意看,日期在 atime 与 mtime 都改变了,但是 ctime 则是记录目前的时间!如果与要修改秒数,只能用 -d 参数,可以精确到纳秒。

本站文章如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:http://blog.chopmoon.com/favorites/236.html
喜欢 (1)
发表我的评论
取消评论

表情 代码 贴图 加粗 链接 私信 删除线 签到

Hi,请填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
正在加载中……