Linux系统时间处理命令

在平时的系统维护的过程中,经常遇到和时间相关的操作。比如查看当前系统的时间和时区、数据库和日志的备份程序、时间和时间戳的互相转换等。下面总计一下date命令常用的操作。

1)获取系统当前的时间,具体的时间格式化字符串请参考文章的最后部分。

[root@monitor ~]# date +"%Y-%m-%d %H:%M"
2017-11-08 15:45

2)获取昨天的时间。

[root@monitor ~]# date -d "yesterday" +%Y-%m-%d
2017-11-07
[root@monitor ~]# date -d "1 days ago" +%Y-%m-%d 
2017-11-07

3)获取7天前的时间。

[root@monitor ~]# date -d "7 days ago" +%Y-%m-%d 
2017-11-01

4)把当前时间转化成时间戳。

[root@monitor ~]# Current_Time=`date`            
[root@monitor ~]# echo $Current_Time            
Wed Nov 8 16:05:25 CST 2017
[root@monitor ~]# Timestamp=$(date -d "${Current_Time}" +%s)
[root@monitor ~]# echo $Timestamp 
1510128325

5)把上面的时间戳转换成时间。

[root@monitor ~]# Current_date=`date -d @"$Timestamp" "+%Y-%m-%d %H:%M"`           
[root@monitor ~]# echo $Current_date
2017-11-08 16:05

6)获取本月的第一天时间。

[root@monitor ~]# date +%Y-%m-01
2017-11-01

7)获取上个月的第一天时间。

[root@monitor ~]# DateTime=`date +%Y-%m-01`                        
[root@monitor ~]# echo $DateTime
2017-11-01
[root@monitor ~]# LastMouthStartDay=`date -d"$DateTime last month" +%Y-%m-%d`                  
[root@monitor ~]# echo $LastMouthStartDay
2017-10-01

8)获取上个月的最后一天时间。

[root@monitor ~]# DateTime=`date +%Y-%m-01`                        
[root@monitor ~]# echo $DateTime
2017-11-01
[root@monitor ~]# LastMouthEndDay=`date -d"$DateTime last day" +%Y-%m-%d`          
[root@monitor ~]# echo $LastMouthEndDay
2017-10-31

9)按照天遍历上个月的每一天时间。

[root@monitor ~]# cat LastMonuthPerdays.sh 
#!/bin/sh

DateTime=`date +%Y%m01`
StartTime=`date -d"$DateTime last month" +%Y%m%d`
EndTime=`date -d"$DateTime last day" +%Y%m%d`

while (( $EndTime >= $StartTime ))
    do
        echo $StartTime $value
        StartTime=`date -d "+1 day $StartTime" +%Y%m%d`
    done
[root@monitor ~]# sh LastMonuthPerDays.sh 
20171001
20171002
...
20171030
20171031

10)把今天的时间从凌晨按照5分钟的时间间隔遍历。

[root@monitor ~]# cat TodayPer5min.sh 
#!/bin/sh

ToDay=`date -d "today" +%Y-%m-%d`
sec=$(date -d "${Today}" +%s) 


while true
    do
        let sec=sec+300
        Time=`date -d @"$sec" "+%Y-%m-%d %H:%M"`
        echo $Time 
    done
[root@monitor ~]# sh TodayPer5min.sh |more
2017-11-08 00:05
2017-11-08 00:10
2017-11-08 00:15
2017-11-08 00:20
2017-11-08 00:25
2017-11-08 00:30
2017-11-08 00:35
2017-11-08 00:40
......

Linux系统时间相关的格式化字符串如下:

% H 小时(00..23)
% I 小时(01..12)
% k 小时(0..23)
% l 小时(1..12)
% M 分(00..59)
% p 显示出AM或PM
% r 时间(hh:mm:ss AM或PM),12小时
% s 从1970年1月1日00:00:00到目前经历的秒数
% S 秒(00..59)
% T 时间(24小时制)(hh:mm:ss)
% X 显示时间的格式(%H:%M:%S)
% Z 时区 日期域
% a 星期几的简称( Sun..Sat)
% A 星期几的全称( Sunday..Saturday)
% b 月的简称(Jan..Dec)
% B 月的全称(January..December)
% c 日期和时间( Mon Nov 8 14:12:46 CST 1999)
% d 一个月的第几天(01..31)
% D 日期(mm/dd/yy)
% h 和%b选项相同
% j 一年的第几天(001..366)
% m 月(01..12)
% w 一个星期的第几天(0代表星期天)
% W 一年的第几个星期(00..53,星期一为第一天)
% x 显示日期的格式(mm/dd/yy)
% y 年的最后两个数字( 1999则是99)
% Y 年(例如:1970,1996等) 

11)拷贝大文件的时候由于出口带宽的被占满需要限制拷贝文件的速率。-l参数man手册的含义是Limits the used bandwidth, specified in Kbit/s.即scp命令分配的带宽200000/1000=200 Mbit/s。

[root@monitor ~]# scp -l 200000 -r cobbler.ks 192.168.200.5:/tmp/

2条评论

促美优品 says: 回复

留个脚印,并预祝博主下一年快乐,因为我知道博主今年很快乐!

1163848899 says: 回复

博客还真是个好东西!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

昵称 *