第1章-小试牛刀(09获取并设置日期及延时)
1.10.1预备知识
日期能够以多种格式呈现。在系统内部,日期被存储成一个整数,其取值为自1970年1月1日0时0分0秒起所流逝的秒数。这种计时方式称为纪元时或Unix时间。
可以在命令行中设置系统日期。下面来看看对其进行读取和设置的方法。
1.10.2实战演练
(1)读取日期:
image.png
(2)打印纪元时:
image.png
data命令可以将很多不同格式的日期转成纪元时。这就允许你使用多种日期格式作为输入。如果要从系统日志中或者其他标准应用程序生成的输出中获取日期信息,就完全不用烦心日期的格式问题。
将日期转换成纪元时:
image.png
选项--date指定了作为输入的日期。我们可以使用任意的日期格式化选项来打印输出。data命令可以根据制定的日期找出这一天是星期几:
image.png1.10.3节中的表1-1时一份日期格式字符串列表。
(3)用带有前缀+的格式化字符串作为date命令的参数,可以按照你的选择打印出相应格式的日期。例如:
image.png
(4)设置日期和时间:
date -s "格式化的日期字符串"
例如:
image.png
如果系统已经联网,可以使用ntpdate来设置日期和时间:
/usr/sbin/ntpdate -s time-b.nist.gov
(5)要优化代码,首先得先进行测量。date命令可以用于计算一组命令所花费的执行时间:
image.png
date命令的最小精度时秒。对命令计时的另一种更好的方式是使用time命令:
time commandOrScriptNmae.
1.10.4补充内容
编写以循环方式运行的监控脚本时,设置时间间隔是必不可少的。让我们来看看如何生成延时。
在脚本中生成延时
sleep命令可以延迟脚本执行一段时间(以秒为单位)。下面的脚本使用tput和sleep从0开始时到40秒:
在上面的例子中,变量依次使用了有seq命令生成的一系列数字。我们用tput sc存储光标位置。在每次循环中,通过tput rc恢复之前的存储的光标位置,在终端中打印出新的count值,然后使用tputs ed清除从当前光标位置到行尾之间的所有内容。行被清空之后,脚本就可以显示出新的值。sleep可以使用脚本在每次循环迭代之间延迟1秒钟。