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 与时钟同步状态。