tar是归档工具,仅打包不压缩,可配合gzip等算法实现压缩;zip是跨平台压缩工具,支持单文件压缩、密码保护和分卷。

Linux 文件管理中,tar 和 zip 是两类定位不同但常配合使用的工具:tar 是系统级打包核心,擅长处理目录结构与权限保留;zip 则主打跨平台兼容,天然支持单文件压缩、密码保护和分卷。掌握它们的分工与组合,才能真正高效管理文件。
tar:打包为先,压缩可选
tar 的本质是归档(archive),不是压缩。它把多个文件或整个目录树“装进一个盒子”,不改变体积。是否压缩,取决于你是否调用外部算法。
-
只打包不压缩:适合需保留原始大小、快速归档日志或临时整理场景。
命令:tar -cvf archive.tar /path/to/dir -
打包 + gzip 压缩(.tar.gz):最通用组合,兼顾速度与压缩率,适合日常备份与传输。
命令:tar -czvf backup_$(date +%Y%m%d).tar.gz /var/log/nginx -
打包 + xz 压缩(.tar.xz):压缩率最高,适合长期归档或空间敏感场景,但耗时较长。
命令:tar -cJvf docs.tar.xz ~/Documents/ -
解压到指定位置:避免污染当前目录,-C 后必须跟完整路径,且该目录需已存在。
命令:tar -xzvf app.tar.gz -C /opt/app-release/
zip:单文件友好,开箱即用
zip 不依赖 tar,能直接压缩单个文件或递归压缩目录,生成的 .zip 文件在 Windows/macOS 上双击即可打开,无需额外工具。
-
压缩目录并保持结构:-r 参数必不可少,否则只压目录本身(空文件夹)。
命令:zip -r project.zip ./src ./config.yml -
排除特定文件或类型:用 -x 配合通配符,避免打包临时文件或敏感配置。
命令:zip -r code.zip . -x "*.log" "node_modules/*" ".git/*" -
加密压缩(密码保护):-e 参数会提示输入密码,解压时需手动提供。
命令:zip -er private.zip ~/secret/ -
分卷压缩大文件:-s 指定每卷大小,自动命名 .z01、.z02…zip,Windows 也能识别。
命令:zip -r -s 50m backup.zip /home/user/large_data/
关键区别与选用建议
别再纠结“哪个更好”,而要看你要解决什么问题:
- 要备份服务器配置、保留软链接/权限/属主?→ 用 tar -cpzf(-p 保权限,-z 用 gzip)
- 要把项目发给 Windows 同事,对方不会用终端?→ 用 zip -r
- 日志太多,只想合并成一个文件方便移动,不求变小?→ tar -cf logs.tar /var/log/*.log
- 需要加密传输敏感数据?→ zip -er 更直观;若需更强安全控制,可先 tar 打包,再用 gpg 加密
实用技巧与避坑提醒
几个高频出错点,帮你少走弯路:
-
-f 必须放在所有选项最后:写成
tar -zcvf file.tar.gz dir/正确;tar -fzcv file.tar.gz dir/会报错 -
解压前先预览内容:用
tar -tzf archive.tar.gz | head -20查看前20行,确认路径无误再解压 -
zip 压缩后原文件不删除,tar 默认也不删源;但
gzip file.txt会删原文件——注意区分工具行为 -
中文路径或特殊字符:tar 默认支持;zip 在部分旧版本中可能乱码,建议加
-U(UTF-8 编码)参数:zip -rU cn.zip 中文目录/











