外部过滤器,程序和命令--时间/日期 命令

来源:互联网 发布:淘宝号为什么被冻结 编辑:程序博客网 时间:2024/06/08 05:09

时间/日期和计时

date

  直接调用date命令就会把日期和时间输出到stdout上. 这个命令有趣的地方在于它的格式化和分析选项上.


例: 使用date命令.

#!/bin/bash# date.shecho "The number of days since the years beginning is `date +%j`."# 需要在调用格式的前边加上一个'+'号.# %j用来给出今天是本年度的第几天.echo "The number of seconds elapsed since 01/01/1970 is `date +%s`."# %s 将会产生从"UNIX 元年"到现在为止的秒数,prefix=tempsuffix=$(date +%s)         # 'date'命令的"+%s"选项是GNU特性.filename=$prefix.$suffixecho $filename#  这是一种非常好的产生"唯一"临时文件的方法.#+ 甚至比使用$$都强.exit 0

  -u选项将给出UTC时间(Universal Coordinated Time).

bash$ dateFri Aug 18 21:22:35 CST 2017bash$ date -uFri Aug 18 13:22:53 UTC 2017

  date命令有许多的输出选项. 比如 %N 将以十亿分之一为单位表示当前时间. 这个选项的一个有趣的用法就是用来产生一个6位的随机数.

date +%N | sed -e 's000$//' -e 's/^0//'# 去掉开头和结尾的0.

  当然,还有许多其他的选项(查看man date).

date +%j# 显示今天是本年度的第几天(从11日开始计算).date +%k%M# 使用24小时的格式来显示当前小时数和分钟数.date            # Fri Aug 18 21:30:25 CST 2017TZ=EST date     # Fri Aug 18 08:30:05 EST 2017SixDayAgo=$(date --date='6 days ago')OneMonthAgo=$(date --date='1 month ago')OneYearAgo=$(date --date='1 year ago')

zdump

  时区dump:查看特定时区的当前时间.

bash$ zdump ESTEST  Fri Aug 18 08:33:55 2017 ESTbash$ zdump UTCUTC  Fri Aug 18 13:34:05 2017 UT

time

  输出统计出来的命令执行的时间.
  time ls -l / 给出的输出大概是如下格式:

...real    0m0.002suser    0m0.000ssys     0m0.000s

touch

  用来更新文件被访问或修改的时间的工具, 这个时间可以是当前系统的时间,也可以是指定的时间, 这个命令也用来产生一个新文件. 命令 touch zzz 将产生一个 zzz 为名字的0字节长度文件, 当然前提是 zzz 文件不存在. 为了存储时间信息, 就需要一个时间戳为空的文件, 比如当你想跟踪一个工程的修改时间的时候, 这就非常有用了.

  * touch命令等价于:>> newfile(对于一个普通文件).


at

  at命令是一个作业控制命令, 用来在指定时间点上执行指定的命令集合.它有点像cron命令, 然而, at命令主要还是用来执行那种一次性执行的命令集合.

  at 2pm January 15将会产生提示, 提示你输入需要在这个时间上需要执行的命令序列. 这些命令应该是可以和shll脚本兼容的, 因为实际上在一个可执行的脚本中, 用户每次只能输入一行. 输入将以Ctl-D结束.

  你可以使用 -f 选项或者使用(<)重定向操作符, 来让at命令从一个文件中读取命令集合. 这个文件其实就一个可执行的的脚本, 虽然它是一个不可交互的脚本. 在文件中包含一个run-parts命令, 对于执行一套不同的脚本来说是非常聪明的做法.

bash$ at 2:30 am Firday < at-jobs.listjob 2 at 2000-10-27 02:30

batch

  batch作业控制命令与at令的行为很相像, 但是batch命令被用来在系统平均负载量降到 .8 以下时执行一次性的任务. 与at命令相似的是, 它也可以使用 -f 选项来从文件中读取命令.


cal

  从 stdout 中输出一个格式比较整齐的日历. 既可以指定当前年度, 也可以指定过去或将来的某个年度.


sleep

  这个命令与一个等待循环的效果一样. 你可以指定需要暂停的秒数,这段时间将什么都不干. 当一个后台运行的进程需要偶尔检测一个时间时,这个功能很有用.也可以用于计时.

sleep 3         # 暂停3秒.

  * sleep默认是以秒为单位,但是你也可以指定分钟,小时,或则天数为单位.

sleep 3 h       # 暂停3小时!

  如果你想每隔一段时间来运行一个命令的话,那么watch命令将比sleep命令好的多.


usleep

  指定需要sleep的微秒数 (“u”会被希腊人读成”mu”, 或者是 micro- 前缀). 与上边的sleep命令相同, 但这个命令以微秒为单位. 当需要精确计时, 或者需要非常频繁的监控一个正在运行进程的时候, 这个命令非常有用.

usleep 30       # 暂停30微秒.

  事实上usleep命令并不能提供非常精确的计时,所以如果你需要运行一个实时任务的话,这个命令并不合适.


hwclock, clock

  hwclock命令可以访问或调整硬件时钟. 这个命令的一些选项需要具有root权限. 在系统启动的时候, /etc/rc.d/rc.sysinit , 会使用hwclock来从硬件时钟中读取并设置系统时间.

  clock命令与hwclock命令完全相同.