在Linux系统中,时间戳(Timestamp)是指自1970年1月1日00:00:00 UTC(称为“Unix纪元”)以来经过的秒数,常用于日志记录、文件时间戳标记、数据排序等场景,掌握Linux时间戳相关的命令,能够高效地处理与时间相关的任务,以下是常用的时间戳命令及其详细用法,包括date
、stat
、touch
等工具,以及时间戳与日期格式之间的转换方法。

date
命令:时间戳与日期的转换
date
是Linux中最常用的时间处理工具,支持时间戳与人类可读日期格式的相互转换。
将当前时间转换为时间戳
使用date +%s
命令可以获取当前时间对应的时间戳:
date +%s
输出可能为1634567890
,表示当前时间距离Unix纪元的秒数。
将时间戳转换为日期格式
若需将时间戳转换为可读日期,可以使用date -d
选项,并结合符号指定时间戳:

date -d @1634567890
默认输出格式为“星期 月 日 时:分:秒 时区”,例如Mon Oct 18 10:58:10 CST 2021
,若需自定义格式,可通过符号指定,
date -d @1634567890 +"%Y-%m-%d %H:%M:%S"
输出为2021-10-18 10:58:10
,其中%Y
表示四位年份,%m
表示月份,%d
表示日期,%H
、%M
、%S
分别表示时、分、秒。
获取指定日期的时间戳
若需将日期转换为时间戳,可先使用date -d
指定日期,再通过date +%s
获取时间戳:
date -d "2021-10-18 10:58:10" +%s
输出为1634567890
。

常用date
命令格式化符号
以下是date
命令中常用的格式化符号及其含义:
| 符号 | 含义 | 示例输出 |
|------|--------------------|----------------|
| %Y | 四位年份 | 2021 |
| %y | 两位年份 | 21 |
| %m | 月份(01-12) | 10 |
| %d | 日期(01-31) | 18 |
| %H | 小时(00-23) | 10 |
| %M | 分钟(00-59) | 58 |
| %S | 秒(00-60) | 10 |
| %F | 等价于%Y-%m-%d | 2021-10-18 |
| %T | 等价于%H:%M:%S | 10:58:10 |
stat
命令:查看文件时间戳
stat
命令用于显示文件的详细状态信息,包括文件的访问时间(atime)、修改时间(mtime)和状态改变时间(ctime)。
查看文件时间戳
stat filename
输出示例:
File: test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 801h/2049d Inode: 131073 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2021-10-18 11:00:00.000000000 +0800
Modify: 2021-10-18 11:00:00.000000000 +0800
Change: 2021-10-18 11:00:00.000000000 +0800
Birth: -
Access
:文件最后一次被访问的时间(atime)。Modify
最后一次被修改的时间(mtime)。Change
:文件状态(如权限、所有者)最后一次改变的时间(ctime)。
提取文件时间戳为Unix时间戳
若需将文件时间戳转换为Unix时间戳,可结合date
命令处理,获取文件的修改时间戳:
stat -c %Y filename
%Y
表示修改时间的时间戳,%X
表示访问时间的时间戳,%Z表示状态改变时间的时间戳。
touch
命令:修改文件时间戳
touch
命令通常用于创建空文件,但也可通过-t
或-d
选项修改文件的时间戳。
使用-t
选项设置时间戳
-t
选项的格式为[[CC]YY]MMDDhhmm[.ss]
,
touch -t 202110181100.00 test.txt
将文件test.txt
的修改时间设置为2021年10月18日11:00:00。
使用-d
选项设置日期
-d
选项支持更灵活的日期格式,
touch -d "2021-10-18 11:00:00" test.txt
其他时间戳相关工具
-
hwclock
:用于查看和硬件时钟(RTC)相关的时间,通常与系统时间同步:hwclock --show # 显示硬件时钟时间 hwclock --hctosys # 将硬件时钟时间同步到系统时间
-
timedatectl
:在支持systemd的现代Linux发行版中,用于管理时间和时区:timedatectl status # 查看时间状态 timedatectl set-timezone "Asia/Shanghai" # 设置时区
时间戳处理的实际应用
-
日志分析:在服务器日志中,时间戳常用于按时间范围筛选日志,提取2021年10月18日之后的日志:
grep " $(date -d '2021-10-18' +%s)" /var/log/syslog
-
文件备份时间标记:通过文件时间戳实现增量备份,仅备份修改时间晚于指定时间的文件:
find /path -type f -newermt "2021-10-18" -exec cp {} /backup/ \;
相关问答FAQs
问题1:如何将当前时间戳转换为UTC时区的日期?
解答:使用date
命令的-u
选项(或--utc
)指定UTC时区,
date -u -d @1634567890 +"%Y-%m-%d %H:%M:%S"
输出为2021-10-18 02:58:10
(比北京时间晚8小时)。
问题2:如何批量修改目录下所有文件的修改时间为当前时间?
解答:使用find
命令结合touch
实现,
find /path -type f -exec touch {} \;
此命令会将/path
目录下所有文件的修改时间更新为当前时间。