date命令
date命令的百功能是显示和设置系统日期和时间。
该命令的一般格式为:度 date [选项]
显示时间格式(以+开头,后面知接格式)
date 设置时间格式
命令中各选项的道含义分别为:
-d datestr, --date datestr 显示由datestr描述的日内期
-s datestr, --set datestr
设置datestr 描述的日期
-u, --universal 显示或设置通用时容间
Linux 中的所有命令(包括函数)都是采用的系统时钟设置。
在Linux中,用于时钟查看和设置的命令主要有date、hwclock和clock。其中,clock和hwclock用法相近,只用一个就行,只不过clock命令除了支持x86硬件体系外,还支持Alpha硬件体系。
1、date 查看系统时间 # date 设置系统时间 # date –set “07/07/06 10:19″ (月/日/年时:分:秒) 2、hwclock/clock 查看硬件时间 # hwclock –show 或者# clock –show 设置硬件时间 # hwclock –set –date=”07/07/06 10:19″ (月/日/年 时:分:秒) 或者# clock –set –date=”07/07/06 10:19″ (月/日/年 时:分:秒) 3、硬件时间和系统时间的同步 按 照前面的说法,重新启动系统,硬件时间会读取系统时间,实现同步,但是在不重新启动的时候,需要用hwclock或clock命令实现同步。 硬件时钟与系统时钟同步:# hwclock –hctosys(hc代表硬件时间,sys代表系统时间)或者# clock –hctosys 系统时钟和硬件时钟同步:# hwclock –systohc或者# clock –systohc 4、时区的设置 # 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 Europe 9) Indian Ocean10) Pacific Ocean11) 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 Cambodia 25) Kyrgyzstan 42) Syria 9) China 26) Laos 43) Taiwan10) Cyprus 27) Lebanon 44) Tajikistan11) East Timor 28) Macau 45) Thailand12) Georgia 29) Malaysia 46) Turkmenistan13) Hong Kong 30) Mongolia 47) United Arab Emirates14) India 31) Myanmar (Burma) 48) Uzbekistan15) Indonesia 32) Nepal 49) Vietnam16) Iran 33) Oman 50) Yemen17) Iraq 34) Pakistan#? 输入9,中国 Please select one of the following time zone regions。
1) east China – Beijing, Guangdong, Shanghai, etc。2) Heilongjiang3) central China – Gansu, Guizhou, Sichuan, Yunnan, etc。
4) Tibet & most of Xinjiang Uyghur5) southwest Xinjiang Uyghur#? 输入1,北京时间 The following information has been given: China east China – Beijing, Guangdong, Shanghai, etc。 Therefore TZ=”Asia/Shanghai” will be used。
Local time is now: Fri Jul 7 10:32:18 CST 2006。Universal Time is now: Fri Jul 7 02:32:18 UTC 2006。
Is the above information OK?1) Yes2) No#? 输入1,确认 如果不用tzselect命令,可以修改文件变更时区。 # vi /etc/sysconfig/clock ZONE=Asia/Shanghai(查/usr/share/zoneinfo下面的文件) UTC=false ARC=false # rm /etc/localtime # ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 重新启动即可。
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) east China - Beijing, Guangdong, Shanghai, etc。
2) Heilongjiang 3) central China - Gansu, Guizhou, Sichuan, Yunnan, etc。 4) Tibet & most of Xinjiang Uyghur 5) southwest Xinjiang Uyghur #? 输入1,北京时间 The following information has been given: China east China - Beijing, Guangdong, Shanghai, etc。
Therefore TZ='Asia/Shanghai' will be used。 Local time is now: Fri Jul 7 10:32:18 CST 2006。
Universal Time is now: Fri Jul 7 02:32:18 UTC 2006。 Is the above information OK? 1) Yes 2) No #? 输入1,确认 如果不用tzselect命令,可以修改文件变更时区。
# vi /etc/sysconfig/clock ZONE=Asia/Shanghai(查/usr/share/zoneinfo下面的文件) UTC=false ARC=false # rm /etc/localtime # ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 重新启动即可。
shell是面向过程语言,无法做到同时进行两件事,推荐用python
python是题外话,这里面主要涉及到交互,就是另一台linux发布自己的时间,然后你去取,方法比较多,你在那边做个mand> [<arguments。>]
举个栗子1:
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ time sleep 2
real 0m2.005s
user 0m0.001s
sys 0m0.002s
小解其意:
real 0m2.005s :sleep这个程序运行耗时为0m2.005s
user 0m0.001s : 这个时间代表的是sleep运行在用户态的cpu时间
sys 0m0.002s : 这个时间代表的是sleep运行在核心态的cpu时间。
用户态(User Mode):
在用户态,代码不具备直接访问硬件或者访问内存的能力,而必须借助操作系统提供的可靠的,底层的APIs来访问硬件或者内存。由于这种隔离带来的保护作用,用户态的代码崩溃(Crash),系统是可以恢复的。我们大多数的代码都是运行在用户态的。
核心态(Kernel Mode):
在内核态,代码拥有完全的,不受任何限制的访问底层硬件的能力。可以执行任意的CPU指令,访问任意的内存地址。内核态通常情况下,都是为那些最底层的,由操作系统提供的,可信可靠的代码来运行的。内核态的代码崩溃将是灾难性的,它会影响到整个系统。
为什么要区分Kernel Mode 和 User Mode:
隔离保护,使得系统更稳定。
好,讲完用户态和核心态之后,我们来看user time,说过了,这个指的是程序foo运行在用户态的cpu时间,cpu时间不是墙上的钟走过的时间,而是指CPU工作时间。
举个栗子2:
#time -p 不显示单位
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ time -p sleep 2
real 2.00
user 0.00
sys 0.00
Shell时间运算及时间差计算方法
最近一段时间,在处理Shell 脚本时候,遇到时间的处理问题。 时间的加减,以及时间差的计算。
一、时间加减
这里处理方法,是将基础的时间转变为时间戳,然后,需要增加或者改变时间,变成 秒。
如:1990-01-01 01:01:01 加上 1小时 20分
处理方法:
a.将基础时间转为时间戳
?12345 time1=$(date +%s -d '1990-01-01 01:01:01') echo $time1 631126861 【时间戳】
b.将增加时间变成秒
?1234 [root@localhost ~]# time2=$((1*60*60+20*60)) [root@localhost ~]# echo $time2 4800
c.两个时间相加,计算出结果时间
?1234567 time1=$(($time1+$time2)) time1=$(date +%Y-%m-%d\ %H:%M:%S -d "1970-01-01 UTC $time1 seconds"); echo $time1 1990-01-01 02:21:01
二、时间差计算方法
如:2010-01-01 与 2009-01-01 11:11:11 时间差
原理:同样转成时间戳,然后计算天,时,分,秒
?123 time1=$(($(date +%s -d '2010-01-01') - $(date +%s -d '2009-01-01 11:11:11'))); echo time1
将time1 / 60 秒,就变成分了。
补充说明:
shell 单括号运算符号:
复制代码 代码如下:
a=$(date);
等同于:a=`date`;
双括号运算符:
复制代码 代码如下:
a=$((1+2));
echo $a;
等同于:
复制代码 代码如下:
a=`expr 1 + 2`