Linux 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无报错即完整。
- 点赞
- 收藏
- 关注作者
评论(0)