Linux 【02-tac命令超详细教程】

Linux tac 命令超详细教程

tac反向逐行输出 命令,和 cat 功能相反(cat 正序读文件,tac 倒序读),常用于日志倒查、反转文本、逆向处理输出流。

一、基本语法

bash 复制代码
tac [选项] [文件]
  • 无文件时:读取标准输入(键盘/管道输出)
  • 支持多文件、管道、重定向

二、默认用法(最常用)

1. 反向查看单个文件

把文件最后一行放第一行,第一行放最后一行输出:

bash 复制代码
# 正序查看
cat test.txt

# 倒序查看
tac test.txt

示例:

复制代码
# test.txt 内容
第一行
第二行
第三行

# tac test.txt 输出
第三行
第二行
第一行

2. 结合管道(高频场景)

搭配 lsgrepdmesg、日志查询,倒查最新内容

示例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 倒序逐行输出 倒查日志、逆向文本处理

六、常见注意事项

  1. 二进制文件慎用tac 面向文本,操作二进制文件会乱码。
  2. 大日志文件tac 比从头 cat 翻到末尾效率更高,优先用于日志排查。
  3. 分隔符转义 :分隔符为 * . \ 等特殊字符时,加单引号 '\' 转义。
  4. 不修改原文件:tac 只是输出反转内容,不会改动源文件。
相关推荐
Jurio.1 小时前
tmux 安装与使用教程:SSH 断开后任务继续运行,终端分屏与多窗口管理
linux·经验分享·ssh·tmux
YJlio2 小时前
《Sysinternals实战指南》16.5 Ctrl2Cap 工具详解:把 Caps Lock 变成 Ctrl 的键盘改造与回退方法
linux·运维·服务器·网络·python·学习·计算机外设
l'm coming2 小时前
[linux]内核启动加载驱动文件的流程
linux·arm开发·驱动开发·嵌入式
一拳一个娘娘腔2 小时前
CVE-2026-31431 — “Copy Fail“ 深度拆解
linux·安全
麦麦麦当劳大王2 小时前
Linux SSH服务端配置指南
linux·运维·服务器·ssh
Yiyaoshujuku3 小时前
化学谱图数据API接口,数据字段一览!
linux·服务器·前端
__Witheart__3 小时前
make menuconfig 使用全流程
linux·ubuntu·rockchip
2601_951645783 小时前
Linux 编程语言全解析:C、C++、Python、Go、Rust 谁更强?
linux·python·go·c·编程语言
阿坤带你走近大数据3 小时前
Linux中管道符的作用
java·linux·服务器