命令与包管理65 条

tar 打包与解包

归档事实标准:-c 创建、-x 解包、-t 列表,配合 z/xz 压缩;备份脚本里用 -C 切目录、--exclude 排除缓存目录。

信创系统运维速查系统更新于 2026-10-13

tar 是什么

tar 是归档工具:把一堆文件和目录头尾相接打成一个流,本身不做压缩,压缩由后接的 gzip、xz、zstd 完成,所以同一套命令能生成 tar、tar.gz、tar.xz 各种格式。选项里的 -c 创建、-x 解包、-t 列表是三大动作,-f 指定归档文件名且必须紧跟其后。麒麟 V10、UOS、openEuler 预装的都是 GNU tar,脚本与备份流程里出现的 tar 命令在这三个平台上可以直接套用。

基本信息

所属GNU tar(POSIX 归档格式)
适用平台Kylin V10 / UOS / openEuler / 各类 Linux
语法tar [选项] -f 归档文件 [文件或目录...]
压缩格式-z 用 gzip,-J 用 xz,--zstd 用 zstd
切换目录-C 目录 指定起点,避免打进绝对路径
排除--exclude=模式,可重复多次

典型使用场景

  • 备份目录前先打包:把整个应用目录压成一个文件再传输或归档
  • 跨机器搬迁:打包后在目标机解到指定目录,省去逐个复制
  • 发版包:把构建产物打成固定命名的压缩包交给运维或客户
  • 收集取证材料:把日志目录整体打包,保留目录结构与权限
  • 查看别人给的归档内容:不落地直接 tar tf 列表,判断是否可解
  • 受限带宽传输:选压缩率更高的格式减小体积

典型用法

典型用法
tar czf app-$(date +%F).tgz -C /data app --exclude='app/cache'   # 打包并排除缓存
ls -lh app-*.tgz                             # 确认产物大小合理
tar tzf app-2026-10-13.tgz | head            # 解包前先看前几行内容
tar tzf app-2026-10-13.tgz | wc -l           # 核对条目数量是否对得上
tar xzf app-2026-10-13.tgz -C /restore       # 解到指定目录而不是当前目录
tar cJf big-archive.tar.xz -C /data huge     # 高压缩率场景用 xz
rsync -avP app-2026-10-13.tgz backup:/data/  # 传到备份机

常用选项对照

选项作用备注
-c创建归档常与 z、f 连写成 czf
-x解开归档建议配 -C 指定目标目录
-t只列内容不解包陌生归档必做的一步
-f指定归档文件必须紧跟文件名,顺序不能乱
-z / -Jgzip / xz 压缩gzip 快而通用,xz 小但耗 CPU
-C 目录切换处理目录打包与解包的起点
--exclude排除匹配项写相对路径,避免误排全部
-p保留权限解包时按需使用,root 下更完整
格式选择看用途:跨系统交付优先 tar.gz,通用性最好;留给归档、对体积敏感的选 tar.xz,代价是压缩慢且吃 CPU;新版系统上 zstd 兼顾速度与压缩率,但对方环境未必支持,交付前先确认。
用 -C 进目录再打包,包内路径就是相对路径,恢复时不会因为带前导斜杠而写进系统目录;只需要包内某一层内容时,可用 --strip-components=1 去掉最外层目录,避免解出多余的层级。

易错点

  • 用绝对路径打包:tar 会提示去掉前导斜杠,恢复时虽做了保护,但脚本里路径假设容易出错,正确做法是 -C 进目录用相对路径
  • 直接解包陌生归档:条目可能包含绝对路径或向上级跳转的路径,有覆盖系统文件的风险,先 tar tf 检查再解
  • --exclude 写成绝对路径或写成包内不存在的形式会静默失效,结果把缓存、临时文件一起打进包里
  • 归档文件与被归档目录放在同一路径,且用通配符把归档文件本身也卷进去,越打越大

数据来源与参考

  • GNU tar 手册
  • 各发行版备份指南
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌