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. 结合管道(高频场景)

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

六、常见注意事项

  1. 二进制文件慎用 :tac 面向文本,操作二进制文件会乱码。
  2. 大日志文件 :tac 比从头 cat 翻到末尾效率更高,优先用于日志排查。
  3. 分隔符转义 :分隔符为 * . \ 等特殊字符时,加单引号 '\' 转义。
  4. 不修改原文件:tac 只是输出反转内容,不会改动源文件。
相关推荐
无足鸟ICT12 小时前
【RHCA+】vmstat命令(监控系统资源)
linux·服务器
闪亮的路灯12 小时前
Linux 安装mqtt服务mosquitto
linux·运维·服务器
HideF13 小时前
nmcli
linux·服务器·网络
qetfw13 小时前
UOS DHCP Relay:跨网段分配与 IP、DNS、网关验证
linux·服务器·网络·tcp/ip·uos
叼烟扛炮15 小时前
Linux 学习笔记(四十一):TCP 并发演进——从单进程到多线程服务器
linux·运维·服务器·网络·笔记·学习·tcp/ip
ynchyong15 小时前
Linux 有两个 “版本“
linux·发行版·内核版本
叼烟扛炮15 小时前
Linux 学习笔记(四十四):HTTP 协议解析与极简 Web 服务器实战
linux·服务器·学习
叼烟扛炮16 小时前
Linux 学习笔记(四十三):网络编程进阶——自定义协议解决 TCP 粘包与守护进程
linux·开发语言·网络·笔记·tcp/ip
Escalating_xu16 小时前
【Linux 网络编程】DNS 与 ICMP:从域名解析到 ping、traceroute,把“网络通不通”问清楚
linux·网络·php
一枕槐安48718 小时前
大模型限流、重试、超时处理:API 调用健壮性方案
linux·服务器·php·大模型api·指数退避·限流控制·超时预算