在Linux运维、日志排查、脚本编写中,时间戳是必备的工具。它用一串数字精准标记时间,既能快速核对日志时序,也能方便跨系统时间同步,堪称运维必备技能。本文整理Linux时间戳核心命令、高频用法和实用技巧。
时间戳是指从格林威治时间1970年1月1日00时00分00秒起至现在的总秒数,是一种用于证明电子数据在特定时间点已存在且未被篡改的可验证数字凭证,是10位数字。秒级时间戳:10位纯数字,如1742956800,毫秒级很少使用。
date是Linux系统自带命令,无需额外安装,是时间戳操作的基本工具,涵盖获取当前时间戳、时间戳转可读时间、普通时间转时间戳三大核心用法,搭配格式符还能自定义输出样式。
执行一行命令,即可拿到当前系统对应的10位时间戳,常用于脚本打标、日志记录、定时任务判断。
date +%s

排查日志时,拿到一串时间戳看不懂,用这条命令一键转为年月日时分秒格式,一目了然。
#基础转换,直接出系统默认格式date -d@1774529089

#自定义标准格式date -d@1774529089 +"%Y-%m-%d%H:%M:%S"

实用技巧:-d @时间戳是固定写法,常用格式符一览:
%Y:4位年份
%m:2位月份
%d:2位日期
%H:24小时制小时
%M:分钟
%S:秒
想筛选某一时间段的日志,先把具体时间转为时间戳,再配合awk、grep命令筛选,精准高效。
#标准时间格式转时间戳date -d "2026-03-26 19:00:00" +%s

#带时区转换(避免时区偏差)date -d "2026-03-26 19:00:00 GMT+8" +%s

很多时候时间戳转换异常、日志时间不对,根本原因是系统时间不准、软硬件时间不同步,这几步校准操作一定要会。
新版Linux系统标配命令,一站式查看时区、时间、NTP同步状态,解决时区偏差最省事。
# 查看系统时间、时区、同步状态timedatectl# 设置为国内东八区(北京时间,必设)timedatectl set-timezone Asia/Shanghai# 开启NTP自动同步(杜绝时间漂移,推荐)timedatectl set-ntp true

实用技巧:服务器务必开启NTP自动同步,否则运行久了会出现时间偏差,导致时间戳不准、定时任务错乱。
Linux分系统时间和硬件时间,重启后时间错乱,就是两者不同步,用hwclock命令同步即可。
#查看硬件(服务器电池)时间hwclock#系统时间同步到硬件时间(防止重启失效)hwclock -w#硬件时间同步到系统时间hwclock -s

日常排查Nginx、应用日志时,批量处理时间戳才是最高效的方式,搭配awk命令,不用手动逐个转换。
把时间转为时间戳,查找当前目录下7天前修改的文件
#计算7天前的秒级时间戳seven_days_ago=$(date -d "7 days ago" +%s)#查找当前目录下,近7天修改过的文件(mtime对应文件修改时间戳)find . -type f -newermt "@$seven_days_ago"

#先可以直接不用变量,直接输入值find . -type f -newermt "@1742356800"

备注:这个命令在处理文件时非常有用。
直接将日志里的时间戳,批量转为可读时间,查看更直观。
# awk内置函数转换,无需调用date,速度更快awk '{print strftime("%Y-%m-%d %H:%M:%S", $1),$0}' /var/log/app.log
编写运维脚本时,用时间戳做判断,简洁稳定,不受时间格式影响。
#!/bin/bash#定义目标目录DATA_DIR="/data"#获取当前时间戳now=$(date +%s)#设置截止时间戳(2026-03-26 23:00:00)deadline=$(date -d "2026-03-26 23:00:00" +%s)#判断是否在指定时间内if [ $now -lt $deadline ];then echo "========================================" echo "在指定时间段内,开始查看 data 目录文件修改时间" echo "========================================" #检查目录是否存在 if [ ! -d "$DATA_DIR" ]; then echo "错误:目录 $DATA_DIR 不存在!" exit 1 fi #遍历data目录下所有文件,输出修改时间戳 + 格式化时间 echo -e "文件修改时间戳\t\t格式化修改时间\t\t文件名" for file in "$DATA_DIR"/*; do if [ -f "$file" ]; then #获取文件修改时间戳(Linux 通用) mtime=$(stat -c %Y "$file") #转换为可读时间 mtime_fmt=$(date -d @$mtime "+%Y-%m-%d %H:%M:%S") #输出结果 echo -e "$mtime\t\t$mtime_fmt\t\t$file" fi doneelse echo "已超过指定时间,不执行任务"fi

转换时间相差8小时:根源是时区未设为东八区,执行timedatectl set-timezone Asia/Shanghai即可解决。
服务器重启后时间错乱:未同步软硬件时间,校准系统时间后执行hwclock -w写入硬件。
时间戳越用越不准:未开启NTP自动同步,开启后定期同步,彻底杜绝时间漂移。
13位时间戳转换失败:date命令不支持13位,截取前10位秒级部分再转换即可。