tee -a 实现日志追加与多路输出:用 -a 避免覆盖、支持多文件并行追加,适用于长期记录、同步备份、权限绕过及实时监控;配合 -i、-u 和时间戳可提升可靠性与可读性。

用 tee -a 实现日志追加和多路输出,核心就两点:不覆盖已有内容 + 一份输入写进多个文件。它特别适合运维中需要长期记录、同步备份、权限绕过或实时监控的场景。
追加写入:避免日志被清空
默认 tee 每次都会覆盖目标文件,而 -a(即 --append)让新内容直接加到文件末尾。这对持续运行的服务或定时任务很关键:
- 脚本反复执行时,每次输出都追加进同一个日志:
./deploy.sh | tee -a deploy.log - 多个命令分步执行,汇总到一个文件:
date | tee -a ops.log; df -h | tee -a ops.log; uptime | tee -a ops.log - 配合
2>&1合并错误输出,防止报错信息丢失:python app.py 2>&1 | tee -a app_runtime.log
多路输出:一次写入,多份保存
tee -a 支持同时指定多个文件名,所有内容会并行追加到每个文件中,无需重复执行命令:
- 本地存一份,远程 NFS 挂载点也存一份:
journalctl -u nginx | tee -a /var/log/nginx/audit.log /mnt/nfs/backup/nginx-audit.log - 区分用途:一份给监控系统解析,一份供人工排查:
tail -f /var/log/syslog | tee -a /tmp/realtime-syslog.log /tmp/debug-syslog.log - 配合
sudo写入受保护路径(如/etc):echo "192.168.1.100 db-prod" | sudo tee -a /etc/hosts
增强实用性的小技巧
纯 tee -a 已经够用,但加几个参数能让日志更可靠、更易读:
- 加
-i忽略中断信号:长任务中按 Ctrl+C 不会丢已缓存的数据,比如ping 8.8.8.8 | tee -ai ping.log - 加
-u禁用缓冲:确保每行日志立刻落盘,适合监控类场景:tail -f /var/log/auth.log | tee -au /backup/auth-realtime.log - 带时间戳(用 while 循环):
./backup-job.sh 2>&1 | while IFS= read -r line; do echo "$(date '+%H:%M:%S') $line"; done | tee -a backup-timed.log
常见误操作提醒
几个容易踩的坑,注意避开:
- 别漏掉
-a却以为是追加——没这个参数就是覆盖,历史日志全没了 - 写入多个文件时,所有文件路径都要存在且有写权限;任一路径不可写,整个
tee会失败 -
sudo tee -a是对tee提权,不是对前面的命令提权。如果前面命令也需要 root 权限,得单独加sudo - 不要用
tee -a替代日志轮转。长期追加会导致单文件过大,建议配合logrotate或定期归档


















