实际时间(real time): 从command命令行开始执行到运行终止的消逝时间;
系统CPU时间(system CPU time): 命令执行完成花费的系统CPU时间,即命令在核心态中执行时间总和。
Linux命令的使用时linux运维中的核心基础,因此你需要知道常见的命令的功能选项,这样你才能够更好的处理遇到的问题。关于Linux命令学习这块,你学习刘遄老师的书籍《linux就该这么学》,相信你会把linux命令掌握得非常的透彻。
1 TIMEDATECTL命令 该命令是作为systemd系统和服务管理器的一部分分发的工具,可以用它来查看和更改系统时钟的配置,包括更改当前的日期和时间、设置时区以及可以激活与远端服务器系统时钟的自动同步,是红帽企业版 7 版本新增的命令。 1.1 展示当前日期和时间 可以使用timedatectl命令来展示当前日期和时间,并且有系统和硬件时钟的配置的详细信息。 [root@strong ~]# timedatectl Local time: Sat 2019-09-21 15:02:27 CST Universal time: Sat 2019-09-21 07:02:27 UTC RTC time: Sat 2019-09-21 07:02:27 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a 1.2 更改当前时间 更改当前时间,命令格式为:timedatectl set-time HH:MI:SS。 该命令同时更改系统时间和硬件时钟,执行结果与使用命令date --set 和hwclock --systohc的效果相同。 [root@strong ~]# timedatectl set-time 20:00:00 [root@strong ~]# timedatectl Local time: Sat 2019-09-21 20:00:04 CST Universal time: Sat 2019-09-21 12:00:04 UTC RTC time: Sat 2019-09-21 12:00:05 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a [root@strong ~]# timedatectl set-time 2019-09-15 [root@strong ~]# timedatectl Local time: Sun 2019-09-15 00:00:03 CST Universal time: Sat 2019-09-14 16:00:03 UTC RTC time: Sat 2019-09-14 16:00:03 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a 仅仅更改日期,时间会变为00:00:00,故更改日期时需把对应的时间加上,例如:timedatectl set-time "2019-09-21 15:16:00"。 1.4 更改时区 1.4.1 列出所有时区 [root@strong ~]# timedatectl list-timezones 1.4.2 更改时区 [root@strong ~]# timedatectl set-timezone Asia/Shanghai 2 DATE命令 该命令在所有Linux系统都可用,用于设置和查看当前日期和时间,常用于脚本中以格式化的形式用于展示系统时间的详细信息。 2.1 展示当前日期和时间 1)不带任何格式展示 [root@strong ~]# date Sat Sep 21 15:24:57 CST 2019 默认展示的是本地时间,以UTC的方式展示,需使用date --utc或date -u。 [root@strong ~]# date --utc Sat Sep 21 07:25:50 UTC 2019 2)格式化展示 客制化日期和时间的展示格式,使用命令:date +"格式"。 常用的格式为: 控制格式 描述 %H 以HH格式展示小时; %M 以MM格式展示分钟; %S 以SS格式展示秒; %d 以DD格式展示天数; %m 以MM格式展示月; %Y 以YYYY格式展示年; %Z 时区; %F 以YYYY-MM-DD格式展示日期,和%Y-%m-%d等价; %T 以HH:MM:SS格式展示时间,和%H:%M:%S等价; [root@strong ~]# date Sat Sep 21 15:37:18 CST 2019 [root@strong ~]# date +"%Y-%m-%d %H:%M:%S" 2019-09-21 15:38:00 2.2 更改当前时间 更改当前时间,命令格式为:date --set HH:MM:SS。 [root@strong ~]# date --set 15:40:20 Sat Sep 21 15:40:20 CST 2019 2.3 更改当前日期 更改当前日期,命令格式为:date --set YYYY-MM-DD。 [root@strong ~]# date --set 2019-09-25 Wed Sep 25 00:00:00 CST 2019 仅仅更改日期,时间会变为00:00:00,故更改日期时需把对应的时间加上,例如: [root@strong ~]# date --set "2019-09-21 15:42:35" Sat Sep 21 15:42:35 CST 2019。 3 CLOCK命令 该命令是用于访问硬件时钟的工具,也称为Real Time Clock(RTC),对应的设置保存在/etc/adjtime文件中。硬件时钟独立于 *** 作系统,即使系统关闭,它仍然工作,用于从硬件时钟展示时间。 3.1 展示当前日期和时间 [root@strong ~]# hwclock Sat 21 Sep 2019 03:51:24 PM CST -0.368709 seconds 3.2 设置日期和时间 设置日期和时间的命令为:hwclock --set --date "dd mmm yyyy HH:MM" [root@strong ~]# hwclock --set --date "21 Sep 2019 16:02:25" [root@strong ~]# hwclock Sat 21 Sep 2019 04:02:35 PM CST -0.342764 seconds 3.3 同步日期和时间 可以使用hwclock命令在硬件时钟和当前系统时间直接互相同步。 3.3.1 系统时间同步到硬件时钟 [root@strong ~]# hwclock --systohc 3.3.2 硬件时钟同步到系统时间 [root@strong ~]# hwclock --hctosysRTC时间 *** 作:
1.rtc时间是由rtc硬件控制的,所以在linux中想要修改和获取rtc时间就只能通过驱动的接口来获取和修改。
intrtc_test(void)
{
structrtc_timertc
intfd=-1
intret=-1
fd=open("/dev/rtc0",O_RDWR)
if(fd<0){
return-1
}
ret=ioctl(fd,RTC_RD_TIME,&rtc)
if(ret<0){
return-1
}
printf("\nCurrentRTCdata/timeis%d-%d-%d,%02d:%02d:%02d.\n",rtc.tm_mday,rtc.tm_mon+1,
rtc.tm_year+1900,rtc.tm_hour,rtc.tm_min,rtc.tm_sec)
ret=ioctl(fd,RTC_SET_TIME,&rtc)
if(ret<0){
return-1
}
return0
}
2.除了上面这种方式 *** 作rtc时间以外,linux中也有一个命令可以简化rtc时间 *** 作,hwclock,比如,可以通过system("hwclock-w")系统调用来把xtime设置到rtc硬件。
墙上时间(realtime、xtime):
linux系统中主要使用的就是xtime,它是系统运行的基础,很多程序都是依赖于xtime来运行的,接下来将介绍将如何 *** 作xtime。
1.获取、设置微秒级别的时间:
#include
#include
structtimeval
{
inttv_sec
inttv_usec
}
intgettimeofday(structtimeval*tv,structtimezone*tz)
intsettimeofday(conststructtimeval*tv,conststructtimezone*gz)
功能描述:
gettimeofday()获取当前时间,有tv指向的结构体返回。
settimeofday()把当前时间设成由tv指向的结构体数据。当前地区信息则设成tz指向的结构体数据。
2.获取秒级别的时间
typedeflongtime_t
time_ttime(time_t*t)
如果t是non-null,它将会把时间值填入t中
3.内核2.6版本后新增的clockapi接口
获取纳秒级别的时间
structtimespec{
time_ttv_sec/*秒s*/
longtv_nsec/*纳秒ns*/
}
intclock_getres(clockid_tclk_id,structtimespec*res)
intclock_gettime(clockid_tclk_id,structtimespec*tp)
intclock_settime(clockid_tclk_id、conststructtimespec*tp)
编译连接时采用-lrt才能编译通过。
clk_id可选参数:
CLOCK_REALTIME
系统全局的实时时钟.设置此时钟需要合适的权限.
CLOCK_MONOTONIC
只能被读取,无法被设置,表示monotonic时间起点.
CLOCK_PROCESS_CPUTIME_ID
从cpu每进程的高分辨率计时器.
CLOCK_THREAD_CPUTIME_ID
线程的特定cpu时间时钟.
系统启动时,会首先从rtc中读取rtc时间,并设置给xtime,而当ntp对系统时间进行更新时,首先设置xtime,然后调用hwclock设置到rtc硬件中。xtime根据需要的精度,可以通过上面几个接口来选择使用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)