在Linux系统中时间是个很重要的存在,大量的脚本或者定时任务都非常依赖系统时间,另外很多应用特别是高可用集群、数据库同步等都需要调用系统时间,如果时间有偏差很可能应用或同步不可用
系统时区调整
- timedatectl 显示当前系统时间、时区及NTP同步状态
- timedatectl list-timezones | grep Shanghai 列出需要的时区
- timedatectl set-timezone Asia/Shanghai 自动修改时区为东八区上海并同时更新时间
- ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 手动创建符号链接
- export TZ='Asia/Shanghai' 容器或者其他环境下手动设置时区
系统时间调整
手动调整:
- date 当前系统时间显示
- date -s "2025-05-01 15:30:00" 手动设置系统时间
- hwclock --systohc 将系统时间同步到硬件时钟(避免重启后失效)
- timedatectl set-time "2025-05-01 15:30:00" 设置系统时间,自动同步硬件时钟
- timedatectl set-ntp yes 启用NTP自动同步(推荐)
NTP服务自动校准:
- yum install chrony && systemctl start chronyd
- chronyc -a makestep 强制立即同步时间
- vim /etc/chrony.conf 自定义NTP服务器
- server ntp.aliyun.com iburst
- server ntp.tencent.com iburst
- chronyc sources -v 查看NTP源状态
系统时间获取
date / timedatectl 获取系统当前时间时区等信息
1:获取今天的日期
date +'%Y-%m-%d'
time=`date +"%Y-%m-%d %H:%M:%S"`2:获取昨天的日期
date -d "yesterday" +%Y-%m-%d
date -d "1 days ago" +%Y-%m-%d
dname1="$(date -d -1day +%Y%m%d)"3:获取前天的时间
date -d "2 days ago" +%Y-%m-%d
date -d -2day +%Y%m%d4:获取具体日期的前几天
date -d"15 day ago 2017-04-16" +%Y-%m-%d 5:获取明天
明天 dname1="$(date -d 1day +%Y%m%d)"
后天 dname1="$(date -d 2day +%Y%m%d)"
大后天 dname1="$(date -d 3day +%Y%m%d)"6:获取10分钟之前 10小时之前
获取一分钟之前
time=`date -d "1 minute ago" +"%Y-%m-%d %H:%M:%S"`
获取一小时之前
time=`date -d "1 hour ago" +"%Y-%m-%d %H:%M:%S"`
获取一天前时间
time=`date -d "1 day ago" +"%Y-%m-%d %H:%M:%S"`7:获取一个时间段日志
cat access.log.2022-08-26 | grep -E "(Aug 26 09 |Aug 26 10)" 精确到小时
sed -n "/2022-09-21 16:00/,/2022-09-21 16:30/p"
sed -n '/Aug 26 10:05/,/Aug 26 10:30/p' access.log.2022-08-26 精确到分钟和秒
sed -n '/26 10:05/,/26 10:30/p' access.log.2022-08-26 精准匹配时间需要带日期
sed -n "/2022\/09\/29 16:00/,/2022\/09\/29 16:20/p" /www/wwwlogs/nginx_api_error.log8: 月日前面不加0
-m -d
date +'%Y-%-m-%-d' (实际是2025-05-08 去0 显示为2025-5-8) 9:获取英文月份
march=$((date +%B) | cut -b 1-3) 截取前面3个字母 Sep 九月
评论 (0)