Linux 归档的核心答案是:tar 命令是绝对主力,搭配 gzip、bzip2 或 xz 就能同时完成打包和压缩,这是 Linux 环境下最通用、最可靠的归档方案,没有之一。
Linux archive 命令怎么用:从入门到实战
刚接触 Linux 时,面对一堆后缀 .tar、.tar.gz、.zip 的文件,很容易发懵,其实它们本质都是“归档包”,只是压缩算法和工具不同,下面直接拆解用法,让你看完就能上手。
创建归档:tar 的三种常用写法
- 纯打包,不压缩:
tar -cvf archive.tar /path/to/dir
参数 -c 创建,-v 显示过程,-f 指定文件名,输出 .tar 文件,体积不变但便于传输。 - 打包并 gzip 压缩:
tar -czvf archive.tar.gz /path/to/dir
多了一个 -z,自动调用 gzip 压缩,这是最常用的组合,兼容性极好。 - 打包并 bzip2 压缩:
tar -cjvf archive.tar.bz2 /path/to/dir
参数 -j 换用 bzip2,压缩率更高但速度稍慢,适合大文件归档。 - 打包并 xz 压缩:
tar -cJvf archive.tar.xz /path/to/dir
参数 -J 使用 xz,压缩率最高,但解压时间也最长,适合长期存档。
解压归档:看到后缀选参数
解压比创建更简单,记住一个通用命令:tar -xvf archive.tar,然后根据压缩格式追加参数:
- .tar.gz 或 .tgz:
tar -xzvf archive.tar.gz - .tar.bz2:
tar -xjvf archive.tar.bz2 - .tar.xz:
tar -xJvf archive.tar.xz - 如果只记得后缀,直接
tar -xvf archive.tar后加对应参数,或干脆用tar -xaf archive.tar(自动识别格式,但部分旧版不支持)。
查看归档内容而不解压
tar -tvf archive.tar.gz
参数 -t 列出文件列表,不会解压到硬盘,配合 grep 可以快速筛选:tar -tvf archive.tar.gz | grep "keyword"
。
Linux 归档文件格式对比:tar.gz vs tar.bz2 vs zip
很多人纠结到底用哪种格式,这取决于你的场景和需求,下面从压缩率、速度、兼容性三个维度对比。
压缩率与速度实测参考
| 格式 | 典型压缩率(相对原大小) | 压缩速度 | 解压速度 | 适用场景 |
|---|---|---|---|---|
| tar.gz | 40%-50% | 快 | 快 | 日常备份、软件分发 |
| tar.bz2 | 30%-40% | 较慢 | 中等 | 长期存档、节省空间 |
| tar.xz | 20%-30% | 慢 | 快 | 冷备份、极限压缩 |
| zip | 50%-60% | 中等 | 快 | 跨平台传输、Windows 协作 |
程序员更爱 tar.gz,因为 gzip 在速度和压缩率之间平衡得最好,且几乎所有 Linux 发行版都原生支持。 而 zip 格式虽然跨平台,但 Linux 下默认不带 zip 命令,需要额外安装,zip 无法保留文件权限、软链接等 Unix 属性。
什么时候该选 zip?
- 文件需要传给 Windows 同事,且对方不熟悉解压 tar,涉及大量小文件,zip 的固实压缩效率不如 tar.gz,但胜在对方能直接双击打开。
- 使用场景:公司内部跨平台资料交换,交付给客户的是文档而非系统文件。
Linux 归档备份场景:从系统配置到项目目录
归档不只是压缩文件,更是系统管理员日常备份的核心手段,下面按实际需求拆解三个典型场景。
定期备份网站目录
公司网站运行在 CentOS 上,每天需要备份 /var/www/html 目录,用 crontab 配合 tar 即可实现自动化。
0 3 tar -czf /backup/www_$(date +%Y%m%d).tar.gz /var/www/html
这条命令每天凌晨3点执行,生成带日期的备份文件。注意: 备份路径建议单独挂载分区,避免系统盘写满。
跨服务器迁移项目
需要把开发环境的项目目录完整迁移到生产服务器,包含所有子目录、链接和权限。
# 在源服务器打包,保留权限 tar -cpzf project.tar.gz /opt/project # 传输到目标服务器 scp project.tar.gz user@target:/tmp/ # 在目标服务器解压,保持原路径 tar -xpzf project.tar.gz -C /
参数 -p 保留权限,-C 指定解压目录。这样迁移后,文件属主、权限、软链接全部保留,省去手动配置的麻烦。
增量归档与差异备份
全量备份每天做太费空间,可以用 tar 的增量模式,首次创建快照文件,后续只备份变化部分。
# 第一次全量,生成快照文件 tar -g /var/snapshot/data.snap -czf backup_full.tar.gz /data # 第二天增量,基于快照只备份新文件 tar -g /var/snapshot/data.snap -czf backup_inc1.tar.gz /data
增量归档适合数据量大、变化率低的场景,比如日志归档、数据库冷备,但需注意:快照文件必须保留,否则无法恢复完整数据。
Linux 归档高级技巧:分卷、加密与速度优化
遇到超大文件或需要安全传输时,基础命令就不够用了,以下技巧能帮你应对更复杂的场景。
分卷归档:大文件拆成小包
用 tar 配合 split 命令,把归档包拆成 100MB 一个的小文件,方便通过邮件或限制上传大小的平台传递。
tar -czf - largefile.tar.gz | split -b 100M - archive_part.tar.gz.
合并时反向操作:
cat archive_part.tar.gz. | tar -xzf -
加密归档:保护敏感数据
用 gpg 对归档包进行对称加密,密码强度由你决定。
# 加密压缩 tar -czf - /data | gpg -c -o backup.tar.gz.gpg # 解密解压 gpg -d -o - backup.tar.gz.gpg | tar -xzf -
注意:加密后的文件即使被他人获取,没有密码也无法解压,适合传输包含客户信息或密钥的备份。
多线程压缩:提升速度
gzip 和 bzip2 默认单线程,可以利用 pigz 或 pbzip2 并行压缩,速度提升明显(尤其在多核服务器上)。
# 安装 pigz sudo apt install pigz # Debian/Ubuntu # 使用 pigz 代替 gzip tar -cvf - /data | pigz -p 4 > archive.tar.gz
参数 -p 指定线程数,建议不超过 CPU 核心数。对于几十 GB 的归档,能节省一半以上的时间。
Linux archive 常见问题解答
问:tar 和 gzip 到底是什么关系?为什么总看到 tar.gz 这种组合?
tar 只负责打包,把多个文件合并成一个,不压缩;gzip 是压缩工具,但只能处理单个文件,所以先打包再用 gzip 压缩,就得到了 tar.gz 文件,解压时先解压再拆包,全程由 tar 的 -z 参数自动调用 gzip 完成。
问:zip 命令在 Linux 下怎么用?和 tar 比哪个更好?
zip 命令格式:zip -r archive.zip /path/to/dir,解压用 unzip archive.zip,zip 的优势是跨平台,Windows 直接支持,但 zip 无法保留 Linux 文件权限、符号链接等元数据,而 tar 在 Linux 生态中拥有更完整的功能,包括增量备份、保留属主、权限递归等。如果你是纯粹在 Linux 环境内使用,tar 是更专业的选择;如果经常和 Windows 交换文件,zip 更省心。
问:如何查看一个 tar.gz 文件里都有哪些文件,但不想解压出来?
使用 tar -tvf 文件名.tar.gz,参数 -t 会列出所有文件路径和大小,不解压也不占用额外空间,如果只想看某个特定文件是否存在,可以搭配 grep:tar -tvf backup.tar.gz | grep "config.php"。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/511269.html


