Linux 文本处理 cat 与 tee 命令详解 📜

掌握「看内容」「写文件」「分流输出」三大核心技能,提升命令行工作效率
📖 目录导航
✨ 命令特点
- 📖 简洁高效: 两个命令解决大多数文本处理需求
- 🔄 灵活组合: 可与管道符和其他命令完美配合
- 💾 双向操作: 既支持读取也支持写入文件
- 🎯 精准控制: 支持追加、覆盖等多种写入模式
- 🛡️ 安全可靠: 提供防止误操作的保护机制
🎯 一、命令定位
命令 |
核心能力 |
类比说明 |
适用场景 |
cat |
读取、拼接、创建文件 |
文本胶水 |
查看内容、合并文件、创建文档 |
tee |
分流输出,同时显示和保存 |
三通水管 |
日志记录、调试输出、权限提升写入 |
📊 功能对比矩阵
功能 |
cat |
tee |
说明 |
读取文件 |
✅ |
❌ |
cat 主要用于读取 |
写入文件 |
✅ |
✅ |
两者都支持写入 |
屏幕输出 |
✅ |
✅ |
都可输出到终端 |
管道处理 |
✅ |
✅ |
都支持管道操作 |
多文件操作 |
✅ |
✅ |
都支持多个文件 |
输出分流 |
❌ |
✅ |
tee 的独特功能 |
🔍 二、cat 命令详解
📝 基本语法
🎯 常用选项
选项 |
说明 |
示例 |
-n |
显示行号 |
cat -n file.txt |
-b |
显示行号(跳过空行) |
cat -b file.txt |
-s |
压缩连续空行 |
cat -s file.txt |
-A |
显示所有字符(包括控制字符) |
cat -A file.txt |
-E |
在每行末尾显示 $ |
cat -E file.txt |
-T |
将制表符显示为 ^I |
cat -T file.txt |
💡 实用示例
1. 基础文件操作
1 2 3 4 5 6 7 8 9 10 11
| cat filename.txt
cat file1.txt file2.txt
cat -n server.log
cat -b config.conf
|
2. 文件创建与编辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| cat > newfile.txt Hello World This is a new file Ctrl+D
cat >> existing.txt Additional content Ctrl+D
cat > script.sh << 'EOF'
echo "Hello from script" EOF
|
3. 文件合并与处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| cat part1.txt part2.txt > complete.txt
cat file1.txt file2.txt | sort > sorted.txt
cat longfile.txt | less
cat file.txt | head -10
cat file.txt | tail -10
|
4. 高级用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| cat binaryfile | hexdump -C
cat > config.json << 'EOF' { "server": "localhost", "port": 8080, "enabled": true } EOF
for file in *.txt; do cat "$file" | grep "error" >> all_errors.txt done
|
🔀 三、tee 命令详解
📝 基本语法
🎯 常用选项
选项 |
说明 |
示例 |
-a |
追加模式(不覆盖) |
`cmd |
tee -a log.txt` |
-i |
忽略中断信号 |
`cmd |
tee -i output.txt` |
-p |
诊断写入错误 |
`cmd |
tee -p file.txt` |
💡 实用示例
1. 基础输出分流
1 2 3 4 5 6 7 8 9 10 11
| ls -la | tee directory_listing.txt
echo "New entry" | tee -a log.txt
dmesg | tee system.log boot.log
ps aux | tee process_list.txt /tmp/backup_process.log
|
2. 调试与日志记录
1 2 3 4 5 6 7 8 9 10 11
| python script.py 2>&1 | tee execution.log
sudo apt install nginx | tee install.log
make 2>&1 | tee build.log
echo "Task started at $(date)" | tee -a task_log.txt
|
3. 权限管理
1 2 3 4 5 6 7 8
| echo "new config value" | sudo tee /etc/config.conf
echo "additional setting" | sudo tee -a /etc/settings.conf
systemctl status nginx | tee /var/log/nginx-status.log | sudo tee /shared/nginx-status.log
|
4. 高级分流技巧
1 2 3 4 5 6 7 8 9 10 11
| netstat -tulpn | tee raw_connections.txt | grep ":80" | tee http_connections.txt
tail -f /var/log/syslog | tee monitor.log | grep "error"
df -h | tee disk_usage.txt | awk '$5 > "80%" {print "Warning:", $0}'
cat file.txt | tee original.txt | iconv -f UTF-8 -t ASCII > ascii_version.txt
|
🚀 四、黄金组合技巧
1. 备份 + 修改配置
1 2 3 4 5 6 7 8 9 10 11
| cat /etc/nginx/nginx.conf | \ sudo tee nginx.conf.backup | \ sed 's/listen 80;/listen 8080;/' | \ sudo tee /etc/nginx/nginx.conf
|
2. 安装与日志记录
1 2 3 4 5 6 7 8 9
| { echo "=== 开始安装: $(date) ===" sudo apt update sudo apt install -y git nodejs npm echo "=== 安装完成: $(date) ===" } 2>&1 | tee /var/log/software_install.log
|
3. 多日志实时聚合
1 2 3 4 5 6
| tail -f /var/log/nginx/access.log /var/log/nginx/error.log | \ tee nginx_combined.log | \ grep -E "(ERROR|WARN|40[0-9]|50[0-9])"
|
4. 数据流水线处理
1 2 3 4 5 6 7 8 9 10
| cat raw_data.csv | \ tee original_data_backup.csv | \ grep -v "test" | \ tee filtered_data.csv | \ awk -F',' '{print $1","$3","$5}' | \ tee final_data.csv | \ wc -l
|
5. 系统监控与告警
1 2 3 4 5 6 7 8 9 10 11
| { echo "=== 系统健康检查: $(date) ===" echo "--- 内存使用 ---" free -h echo "--- 磁盘空间 ---" df -h echo "--- CPU负载 ---" uptime } | tee /var/log/health_check.log | \ awk '/^Warning:/ {print "ALERT:", $0; system("mail -s \"系统告警\" admin@example.com")}'
|
⚠️ 五、注意事项
🚫 常见陷阱与解决方案
问题 |
风险 |
解决方案 |
文件覆盖 |
意外丢失数据 |
使用 >> 或 tee -a 追加 |
权限不足 |
写入失败 |
使用 sudo tee 提权 |
特殊字符 |
解析错误 |
heredoc 加引号 <<'EOF' |
大文件处理 |
内存溢出 |
使用 less /head /tail |
二进制文件 |
终端乱码 |
避免用 cat 显示二进制文件 |
🛡️ 安全最佳实践
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| cat important_file.txt | less
alias rm='rm -i' alias cp='cp -i' alias mv='mv -i'
cp file.txt file.txt.bak
cat file.txt > file.txt.backup
set -u
if cat file.txt > /dev/null; then echo "文件读取成功" else echo "文件读取失败" >&2 fi
|
🔧 性能优化建议
1 2 3 4 5 6 7 8 9
| cat largefile.txt | buffer | tee backup.txt | processing_command
cat bigfile.txt | tee original.txt | pigz > compressed.gz
|
🧩 六、速查表
⚡ 快速参考
需求 |
命令 |
示例 |
查看文件 |
cat file |
cat config.txt |
显示行号 |
cat -n file |
cat -n script.sh |
创建文件 |
cat > file |
cat > note.txt |
追加内容 |
cat >> file |
cat >> log.txt |
合并文件 |
cat f1 f2 > f3 |
cat part1 part2 > whole |
屏幕+文件输出 |
`cmd |
tee file` |
`ls |
tee list.txt` |
追加输出 |
`cmd |
tee -a file` |
`echo test |
tee -a log.txt` |
多文件输出 |
`cmd |
tee f1 f2` |
`cmd |
tee log1 log2` |
sudo 写入 |
`cmd |
sudo tee file` |
`echo data |
sudo tee /etc/config` |
🎯 场景化模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| cat > README.md << 'EOF'
项目描述... EOF
tail -f /var/log/app.log | tee monitor.log
sudo apt install package | tee install.log
cat config | tee backup | sed 's/old/new/' | sudo tee config
cat data | tee raw | filter | tee cleaned | transform | tee final
|
🔧 七、高级用法
🎨 彩色输出处理
1 2 3 4 5 6 7 8
| grep --color=always "pattern" file.txt | tee output.txt
cat colored_output.txt | ansi2txt > clean_output.txt
tail -f app.log | awk '/ERROR/ {print "\033[31m" $0 "\033[0m"} /WARN/ {print "\033[33m" $0 "\033[0m"}' | tee -a colored_log.txt
|
🔄 实时数据流处理
1 2 3 4 5 6 7 8 9 10 11 12 13
| tcpdump -i eth0 -w - | tee raw.pcap | tshark -i - | tee parsed.txt | grep "HTTP"
vmstat 1 | tee system_stats.log | awk '$1 ~ /[0-9]+/ {print "CPU idle:", $15"%"}'
tail -f /var/log/application.log | \ tee raw_logs.log | \ grep "ERROR\|WARN" | \ tee errors.log | \ awk '{print strftime("%Y-%m-%d %H:%M:%S"), $0}' | \ tee timestamped_errors.log
|
📊 数据转换与编码
1 2 3 4 5 6 7 8 9 10 11
| cat file.txt | tee original_utf8.txt | iconv -f UTF-8 -t ASCII > ascii.txt
tar czf - directory/ | tee backup.tar.gz | md5sum > backup.md5
cat sensitive.txt | gpg --encrypt | tee encrypted.gpg | base64 > encrypted.b64
cat data.csv | tee original.csv | csv2json | tee data.json | jq . > formatted.json
|
🤖 自动化脚本集成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #!/bin/bash
set -euo pipefail
LOG_FILE="/var/log/backup_$(date +%Y%m%d).log"
{ echo "=== 备份开始: $(date) ===" echo "备份 MySQL 数据库..." mysqldump -u root --all-databases | tee >(gzip > db_backup.sql.gz) | wc -l echo "备份重要文件..." tar czf - /etc /home | tee >(sha256sum > backup.sha256) | split -b 1G - backup_part_ echo "=== 备份完成: $(date) ===" echo "备份大小: $(du -h db_backup.sql.gz)" } | tee -a "$LOG_FILE"
mail -s "备份完成报告" admin@example.com < "$LOG_FILE"
|
🐧 系统管理高级技巧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| cat /etc/ssh/sshd_config | \ tee sshd_config.backup | \ sed 's/#PermitRootLogin yes/PermitRootLogin no/' | \ sudo tee /etc/ssh/sshd_config
for server in web{1..5}; do ssh "$server" "cat > /tmp/config <<'EOF' $(cat local_config.txt) EOF" | tee "deploy_$server.log" done
{ echo "系统审计报告 - $(date)" echo "用户登录记录:" last echo "当前进程:" ps aux echo "网络连接:" netstat -tulpn } | tee "/var/log/audit/audit_$(hostname)_$(date +%Y%m%d).log"
watch -n 1 ' echo "=== 实时系统监控 ===" echo "CPU使用: $(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/")% idle" echo "内存使用: $(free -h | grep Mem | awk "{print \$3}/\$2}")" echo "磁盘使用: $(df -h / | awk "NR==2 {print \$5}")" ' | tee -a /var/log/system_monitor.log
|
🎯 总结
cat
是文本处理的瑞士军刀,tee
是输出分流的多面手。掌握这两个命令,就能高效处理大多数文本操作任务!
✅ 最佳实践清单
- ✅ 总是备份重要文件 - 使用
cat file | tee backup
模式
- ✅ 使用追加模式防覆盖 - 记得
tee -a
和 >>
- ✅ 处理权限问题 -
sudo tee
是你的好朋友
- ✅ 记录操作日志 - 重要操作都用
tee
记录
- ✅ 测试命令效果 - 先用
cat
预览再操作
- ✅ 使用 heredoc - 复杂内容用
<<'EOF'
语法
- ✅ 管道组合 - 多个命令用管道连接
- ✅ 错误处理 - 检查命令返回值
$?
- ✅ 资源监控 - 大文件处理注意内存使用
- ✅ 安全第一 - 重要操作前确认再确认
🔧 故障排查指南
- 文件无法读取 → 检查权限
ls -l file
- 输出乱码 → 检查文件编码
file -i filename
- 权限不足 → 使用
sudo tee
提升权限
- 磁盘空间不足 → 检查
df -h
- 命令不存在 → 检查
which cat
和 which tee
- 管道中断 → 使用
tee -i
忽略中断信号
- 特殊字符问题 → 使用
<<'EOF'
避免扩展
通过掌握 cat
和 tee
命令的各种用法和技巧,你将能够在 Linux 命令行环境中高效地处理文本数据,实现复杂的文本处理工作流。🐧✨
Linux 文本处理 cat 与 tee 命令详解 📜