Linux tac 命令超详细教程
tac 是 反向逐行输出 命令,和 cat 功能相反(cat 正序读文件,tac 倒序读),常用于日志倒查、反转文本、逆向处理输出流。
一、基本语法
bash
tac [选项] [文件]
- 无文件时:读取标准输入(键盘/管道输出)
- 支持多文件、管道、重定向
二、默认用法(最常用)
1. 反向查看单个文件
把文件最后一行放第一行,第一行放最后一行输出:
bash
# 正序查看
cat test.txt
# 倒序查看
tac test.txt
示例:
# test.txt 内容
第一行
第二行
第三行
# tac test.txt 输出
第三行
第二行
第一行
2. 结合管道(高频场景)
搭配 ls、grep、dmesg、日志查询,倒查最新内容。
示例1:倒查系统日志(看最新日志)
bash
# 查看系统日志,从最后一行开始展示
cat /var/log/messages | tac
# 先过滤关键字,再倒序
grep "error" /var/log/nginx/access.log | tac
示例2:反转命令输出
bash
ls -l | tac
三、核心选项详解
1. -r / --regex:将分隔符当作正则表达式
tac 默认以换行符 为行分隔符,-r 开启正则匹配分隔符。
2. -s 分隔符 / --separator=STRING:指定行分隔符
自定义行结束符(不再用换行),多用于处理特殊格式文本、CSV、日志片段。
用法演示
现有文本 data.txt,以 # 作为分段标记:
段1内容#段2内容#段3内容
默认 tac 只会整行反转,指定分隔符 # 反转分段:
bash
tac -s '#' data.txt
输出:
段3内容#段2内容#段1内容
结合正则分隔符(-rs):
bash
# 以数字作为分隔符反转
tac -rs '[0-9]' file.txt
3. -b / --before:将分隔符放在行首
默认分隔符在行尾,-b 让分隔符跟随到反转后的行开头,配合 -s 使用。
示例:
bash
# 原内容:a#b#c
tac -b -s '#'
# 输出:#c#b#a
4. --help:查看帮助
bash
tac --help
5. --version:查看版本
bash
tac --version
四、实战经典案例
案例1:倒查 Nginx 最新访问日志(生产常用)
日志文件大时,tac + grep 快速定位最新报错/请求:
bash
# 查看最新 100 条 nginx 日志(倒序)
tac /var/log/nginx/access.log | head -n 100
# 查找最新的 404 错误
tac /var/log/nginx/error.log | grep -i 404
案例2:反转多行输入(交互式)
直接执行 tac,手动输入多行,按 Ctrl+D 结束输入,自动反转:
bash
tac
# 输入:
a
b
c
# 按下 Ctrl+D,输出:
c
b
a
案例3:反转文件并保存为新文件
不修改原文件,将反转结果写入新文件:
bash
tac test.txt > test_rev.txt
案例4:处理无换行的长文本(自定义分隔符)
文本以 ; 分隔多条记录,批量反转:
bash
# 原内容:1;2;3;4
tac -s ';' test.log
# 输出:4;3;2;1
案例5:结合 tail 组合(查看末尾再反转)
先取文件最后20行,再整体反转,阅读更友好:
bash
tail -n 20 app.log | tac
五、tac 与 cat 对比
| 命令 | 作用 | 适用场景 |
|---|---|---|
cat |
正序逐行输出 | 正常查看、拼接文件 |
tac |
倒序逐行输出 | 倒查日志、逆向文本处理 |
六、常见注意事项
- 二进制文件慎用 :
tac面向文本,操作二进制文件会乱码。 - 大日志文件 :
tac比从头cat翻到末尾效率更高,优先用于日志排查。 - 分隔符转义 :分隔符为
* . \等特殊字符时,加单引号'\'转义。 - 不修改原文件:
tac只是输出反转内容,不会改动源文件。