首页/系统/Linux 运维命令速查/ts 给管道输出加时间戳
文本处理77 条

ts 给管道输出加时间戳

moreutils 家族的小工具:给任何命令的每行输出加时间戳;日志接管、耗时分析(-i 增量模式)都非常顺手。

Linux 运维命令速查系统更新于 2026-10-13

ts 是什么

ts 是 moreutils 工具集里的小工具,给标准输入的每一行加上时间戳前缀,通常接在管道后半段。它有几个实用模式:默认输出绝对时间,加 -i 变成增量模式显示本行距上一行的时间差,也可以传入格式化字符串自定义外观。接管长期运行的日志流、分析命令各阶段耗时都很顺手。

基本信息

所属moreutils 包(非系统默认,需要安装)
语法命令 | ts [选项] [时间格式]
安装方式Debian 系 apt install moreutils;RHEL 系 yum install moreutils(EPEL)
常用选项-i 增量时间、-s 相对起始时间、-r 配合 -i 输出间隔秒数

典型使用场景

  • 给 ping、curl 探测循环的输出加时间戳,便于与告警时间对齐
  • tail -f 跟踪日志时补上到达时间,区分写入时间与到达时间
  • 用增量模式分析命令各阶段耗时分布
  • 记录备份、迁移这类长时间操作的时间线
  • 给重启等运维操作加上时间戳形成留痕
  • 在管道中临时补齐上游缺失的时间信息

常用示例

常用示例
ping -c 3 1.1.1.1 | ts                  # 默认形如 Oct 12 10:00:00
tail -f /var/log/app.log | ts '[%F %T]' # 自定义格式,精确到秒
tail -f app.log | ts -i                 # 增量:本行距上一行的耗时
./etl.sh | ts -i                        # 分析各阶段耗时分布
stdbuf -oL prog | ts '[%H:%M:%.S]'      # 上游行缓冲,时间戳才准
systemctl restart app | ts '[%F %T]'    # 记录操作时间线
sleep 2 | ts '[%F %T]'                  # 先验证格式是否合预期

常用选项

选项作用说明
-i增量时间显示与上一行的间隔,而非绝对时间
-s相对起始时间显示距第一行的时间
-r配合 -i 使用把间隔显示为距上一行的秒数
时间格式strftime 格式串如 [%F %T] 精确到秒
无参数默认时间格式形如 Oct 12 10:00:00
ts 依赖完整的行:上游全缓冲时多行会一起到达,时间戳挤成一堆失去意义。配合 stdbuf -oL,或使用本身按行刷新的命令,得到的结果才准确。
-i 的耗时是行到达的时间差,不是程序内部的真实耗时。上游批量输出时数值会明显失真,先解决缓冲问题再解读数字。
时间戳取自系统时钟,NTP 校时跳变会让时间线错乱。跨机做时间线分析前先核对各机的 date 与时钟同步状态。

易错点

  • 上游全缓冲时用 ts 计时:整块输出一次到达,时间戳全部相同,耗时分析失去意义
  • 把 -i 的数值当成程序内部耗时:实际测量的是输出到达的间隔
  • 机器时钟未校时就做时间线分析:时间跳变让先后顺序都不成立
  • 忘记安装 moreutils:命令不存在直接报错,需先确认包是否已装

数据来源与参考

  • man 1 ts(moreutils 手册,joeyh.name/code/moreutils)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌