tar(Tape Archive)是 Linux/Unix 系统中最常用、最强大的归档工具之一。它不仅能将多个文件/目录打包成一个文件,还能结合压缩算法(如 gzip、bzip2、xz)实现高效压缩。
本文将全面解析 tar 的用法、选项和实战技巧。
一、为什么需要 tar?
在 Linux 中:
- 打包(Archiving):将多个文件合并为一个文件(不减少体积)
- 压缩(Compression):减小文件体积(如 gzip、bzip2)
tar 本身只负责打包,但可调用外部压缩工具实现“打包+压缩”一体化操作。
“✅ 典型场景:
- 备份整个项目目录 →
project.tar.gz - 分发软件源码包 →
nginx-1.25.3.tar.gz
二、基本语法
tar [选项] [归档文件名] [要打包的文件/目录...]
常见选项
“⚠️ 注意:-f 后必须紧跟归档文件名,且通常放在选项末尾!
三、常用操作示例
1. 打包(不压缩)
# 将 demo 目录 和 file.txt 文件 打包为 archive.tartar -cf archive.tar demo file.txt# 打包整个 demo 目录(保留结构)tar -cf demo.tar demo/
2. 打包并压缩(最常用!)
使用 gzip(.tar.gz 或 .tgz)
# 把整个 demo 目录打包压缩为 demo.tar.gztar -czf demo.tar.gz demo/
使用 bzip2(.tar.bz2)
tar -cjf project.tar.bz2 demo/
使用 xz(.tar.xz)
tar -cJf project.tar.xz demo/
“💡 压缩效率对比(一般情况):
3. 解压归档文件
解压 .tar.gz
tar -xzf demo.tar.gz
解压到指定目录
# -C 指定的目标目录必须已经存在,否则 tar 会报错并失败。tar -xzf demo.tar.gz -C /opt/test/a# 如果目录不存在,就先创建目录,再解压mkdir -p /opt/test/a && tar -xzf demo.tar.gz -C /opt/test/a
4. 查看归档内容(不解压)
# 列出所有文件tar -tzf demo.tar.gz# 搜索特定文件tar -tzf demo.tar.gz | grep "file"
四、高级技巧
1. 排除文件/目录
# 排除 .git 和 node_modulestar -czf project.tar.gz --exclude='.git' --exclude='node_modules' my_project/
“支持通配符:
tar -czf backup.tar.gz --exclude='*.log' --exclude='tmp/*' /var/log
2. 从文件列表打包
# 先生成文件列表find /data -name "*.txt" > filelist.txt# 按列表打包tar -czf texts.tar.gz -T filelist.txt
3. 增量备份(仅打包新增/修改文件)
# 第一次全量备份tar -czf backup_full.tar.gz /data# 后续增量备份(需配合 --listed-incremental)tar --listed-incremental=snapshot.snar -czf backup_inc1.tar.gz /data
“📌 适用于大型数据定期备份。
4. 通过管道直接传输(无需中间文件)
# 本地打包并直接解压到另一目录tar -cf - my_project/ | tar -xf - -C /backup/# 远程传输(结合 ssh)tar -czf - my_project/ | ssh user@remote "tar -xzf - -C /remote/backup/"
“✅ 节省磁盘空间,适合大文件迁移。
五、常见问题排查
❌ 错误:tar: Cannot connect to ...: resolve failed
tar -xf -- "-myfile.tar.gz"
❌ 错误:gzip: stdin: not in gzip format
- 解决:先用
file archive.tar 检查类型
file mydata.tar.gz # 输出应包含 "gzip compressed data"
❌ 权限丢失?
- 若解压后权限异常,加
--same-permissions(或 -p):
tar -xzf archive.tar.gz -p
六、最佳实践建议
| |
|---|
| tar -czf name.tar.gz dir/ |
| tar -cJf backup.tar.xz /data |
| tar -xzf file.tar.gz -C /target/ |
| |
| tar --exclude='__pycache__' --exclude='.venv' -czf app.tar.gz . |
七、与其他压缩工具对比
“✅ 在 Linux 生态中,.tar.gz** 是事实标准**。
结语
tar 虽然历史悠久,但因其灵活、高效、标准化,至今仍是 Linux 用户不可或缺的工具。掌握其核心选项(-c, -x, -t, -f, -z/-j/-J)和常用组合,能极大提升你的文件管理效率。
“🔧 记住口诀:“打包用 c,解压用 x,查看用 t,文件用 f,压缩加 z/j/J”