Linux tar 命令:打包压缩与数据归档完全指南

举报
yd_232564628 发表于 2026/10/07 20:21:36 2026/10/07
【摘要】 tar (Tape Archive) 诞生于 1979 年,是 Unix 世界最古老的工具之一,至今仍是 Linux 系统中最常用的归档命令。它的名字源于"磁带归档",最初用于将文件写入磁带备份,如今则广泛用于磁盘归档、网络传输和软件分发。tar 本身只负责"打包"(将多个文件合并为一个),压缩功能由外部算法(gzip、bzip2、xz、zstd)提供,但 tar 命令将它们无缝集成,使用时...

tar (Tape Archive) 诞生于 1979 年,是 Unix 世界最古老的工具之一,至今仍是 Linux 系统中最常用的归档命令。它的名字源于"磁带归档",最初用于将文件写入磁带备份,如今则广泛用于磁盘归档、网络传输和软件分发。tar 本身只负责"打包"(将多个文件合并为一个),压缩功能由外部算法(gzip、bzip2、xz、zstd)提供,但 tar 命令将它们无缝集成,使用时无需手动分步操作。

最基础的用法

tar -czf archive.tar.gz /path/to/dir
  • -c (create):创建归档文件。
  • -z (gzip):使用 gzip 压缩,生成 .tar.gz 或 .tgz 文件。
  • -f (file):指定归档文件名,必须放在参数最后,后面紧跟文件名。

解压命令:

tar -xzf archive.tar.gz

-x (extract) 表示解压,其他参数与压缩时一致。

实际使用中,高频场景与命令组合

1. 常见压缩格式对比

格式 参数 压缩率 速度 适用场景
.tar.gz -z 中等 快 通用首选,兼容性最好
.tar.bz2 -j 高 较慢 需要更小体积时
.tar.xz -J 最高 最慢 长期归档、节省存储
.tar.zst --zstd 高 极快 现代系统,兼顾速度与压缩率
tar -cjf archive.tar.bz2 /data    # bzip2
tar -cJf archive.tar.xz /data     # xz
tar -cf archive.tar.zst --zstd /data  # zstd

2. 查看归档内容(不解压)

tar -tzf archive.tar.gz

-t (list) 列出包内所有文件路径。配合 | head 或 | grep 可以快速确认包里有什么。

3. 解压到指定目录

tar -xzf archive.tar.gz -C /target/dir

-C 指定解压目标目录,目录必须已存在。这在部署软件时非常常用。

4. 排除特定文件或目录

tar -czf backup.tar.gz --exclude="*.log" --exclude=".cache" --exclude="node_modules" /data

--exclude 支持通配符,可以多次使用。也可以从文件读取排除列表:

tar -czf backup.tar.gz -X exclude.txt /data

5. 增量备份(仅打包变化的文件)

# 第一次全量备份
tar -czf backup-full.tar.gz /data

# 后续增量备份(只包含自上次备份后修改的文件)
tar -czf backup-incr.tar.gz --listed-incremental=backup.snar /data

--listed-incremental 需要一个快照文件(.snar)来记录上次备份的状态。

6. 追加文件到已有归档

tar -rf archive.tar newfile.txt

-r (append) 将新文件追加到归档末尾。注意:追加操作不支持压缩格式(.tar.gz 等),只能对未压缩的 .tar 文件使用。

7. 保留权限与符号链接

tar -czpf backup.tar.gz /data

-p (preserve-permissions) 保留原始文件的权限和属主信息,在服务器迁移或备份恢复时至关重要。

8. 流式传输(跨服务器直接归档)

# 将远程目录打包并通过 SSH 传输到本地
ssh user@remote "tar -czf - /remote/dir" > local_backup.tar.gz

# 或者直接将本地目录传输到远程并解压
tar -czf - /local/dir | ssh user@remote "tar -xzf - -C /remote/target"

用 - 代替文件名表示使用标准输入/输出,配合管道实现"边打包边传输",无需中间临时文件。

9. 分卷压缩(大文件拆分)

tar -czf - /large/data | split -b 2G - backup.tar.gz.part.

先将 tar 输出到管道,再用 split 按 2GB 切分。解压时需要合并:

cat backup.tar.gz.part.* | tar -xzf -

如果不知道如何下手,可以先尝试

tar -tzf archive.tar.gz | head -20

先查看包内前 20 个文件,确认归档内容无误后再解压。这是避免"解压后满屏文件"的安全习惯。

或者,当你需要备份一个网站目录时,一套标准流程是:

tar -czpf /backup/site-$(date +%Y%m%d).tar.gz \
    --exclude="*.log" \
    --exclude="cache" \
    /var/www/html

-p 保留权限,--exclude 排除日志和缓存,文件名带日期便于管理。

安全注意事项

  • 解压前先看内容:tar -tzf 确认路径结构,避免解压到错误位置。
  • 注意绝对路径:tar 默认会去掉路径开头的 /,防止意外覆盖系统文件。如果归档中包含绝对路径,解压时会提示 “Removing leading ‘/’”,这是正常的安全行为。
  • 大文件用流式处理:避免先打包再压缩产生双倍临时空间占用。
  • 验证归档完整性:tar -tzf archive.tar.gz > /dev/null 无报错即完整。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。