Linux压缩解压入门:tar、gzip、zip 三个命令一次吃透
Linux压缩解压入门tar、gzip、zip 三个命令一次吃透【免费下载链接】linux-tutorial:penguin: Linux教程主要内容Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorial升级要上了动手前得把 /var/www 整个目录打成压缩包丢进备份目录同事发来的源码包却是 .tar.gz你愣是没拆开。Linux压缩解压看着杂就是 tar、gzip、zip 三个工具各管一段——linux-tutorial 仓库里攒了不少实战。这篇按解包→备份→传文件走一遍每节只留能直接复制的最小命令集。概念钥匙打包和压缩是两码事先记住一点打包不等于压缩。tar 像行李箱把一堆文件和目录装进一个 .tar 文件体积一点没变gzip 像真空袋把单个文件压成 .gz体积肉眼可见地缩下去。.tar.gz 就是两者叠加先 tar 装好再 gzip 抽气。想明白这一句两个最常见的困惑就通了tar -cvf之后大小没变只用了行李箱没用真空袋。gzip 压不了目录真空袋一次只能装一个东西得先让 tar 把目录装进行李箱再整体压缩。记混的后果很具体对目录直接跑 gzip 会报错退出或者把一堆 .gz 散落一地到时候一个个还原更累。 解包场景.tar、.tar.gz、.tar.bz2 怎么拆拆包就看后缀纯 .tar 直接解.gz 加 -z.bz2 加 -j。生产环境里我习惯先用 -tvf 列一遍清单再动手免得文件解错地方# 先看包里有什么 tar -tvf source.tar.gz # 纯打包文件 tar -xvf package.tar # gzip 压的包-z 对应 gzip tar -zxvf source.tar.gz # bzip2 压的包-j 对应 bzip2 tar -jxvf package.tar.bz2参数拆开看-t 列清单、-x 解出、-v 显示过程、-f 指定包名。想解到别的路径在行尾追加 -C /目标/目录 即可。更多组合见仓库里的Linux 文件压缩和解压。 备份场景Linux目录压缩备份到指定路径日常把目录备份走一条 tar 就够。-c 建包、-v 显示过程、-f 定包名-z 走 gzip-j 走 bzip2# 打包 gzip包名带日期戳防覆盖 tar -zcvf /backup/app_$(date %Y%m%d).tar.gz /var/www/app # 磁盘紧张换 bzip2压得更小速度慢一截 tar -jcvf /backup/app_$(date %Y%m%d).tar.bz2 /var/www/app想精细控制程度gzip 的级别参数从 1 排到 9数字越小越快9 的压缩率最高默认 6 居中。注意 tar 压缩级别要写在包名后面另外 gzip 直接压会吃掉原文件想留原件就用 -c 把结果导出去# -1 求快-9 求小 gzip -1 quick.log gzip -9 archive.log # tar 调 gzip级别参数跟在包名后 tar -zcvf fast_backup.tar.gz -1 /data/logs # 保留原文件结果写入新文件 gzip -c big.log big.log.gz # 解压-d 或 gunzip 二选一 gunzip big.log.gz顺带一句-C 还能改变包内路径基准tar -zcvf /backup/x.tar.gz -C /var/www app包内不再带全盘绝对路径换机器恢复时更灵活。 跨平台场景zip 打包、排除文件、解压到指定目录给 Windows 同事发文件用 zip 最省事。两个参数最高频-r 递归进目录-x 排除不要的东西——日志和临时文件挡在外面包体干净还小一号# 递归打目录顺带排除日志和临时文件 zip -r project.zip src/ docs/ -x *.log *.tmp # 对方解压到指定目录-o 表示同名直接覆盖 unzip project.zip -d /tmp/recv/ # 不拆包先看清单大文件传完先验完整性 unzip -l project.zip unzip -t project.zipzip 默认会逐个列出文件名嫌吵就加 -q 安静处理。目录大到超过介质限制时分卷打每个卷 100MB收包方用同一条命令合回去# 分卷生成 project.zip.001、.002…… zip -s 100m -r project.zip /data/big/ # 合并把分卷并回一个完整包 zip -s 0 -r project.zip project.zip.001 实战脚本网站备份 自动保留最近 10 份这个脚本干两件事打一份带时间戳的备份再把超出最近 10 份的旧备份删掉存好丢进 crontab 就能长期跑#!/bin/bash # 备份站点目录自动清理只留最近 10 份 SRC/var/www/site DIR/backup Fsite_$(date %Y%m%d_%H%M).tar.gz tar -zcvf $DIR/$F $SRC ls -t $DIR/site_*.tar.gz | tail -n 11 | xargs -r rm -f -- echo backup done: $DIR/$F清理逻辑拆开看ls -t按时间从新到旧排tail -n 11取第 11 份往后xargs -r保证列表为空时什么都不做避免误删。仓库里还有一个同类案例系统快照报告脚本 也是拿 tar 把系统关键信息打包归档的。⚡ 常见坑.tar.xz、认不出的格式、赶时间包是 .tar.xz。那是 xz 压的参数是大写 -J别和小写 -jbzip2搞混# xz 压缩包注意大写 tar -Jxvf package.tar.xz后缀见所未见不知道是什么。先用 file 命令问它真实身份再决定用什么拆file mystery.bin赶时间速度优先。把级别降到 1 就行gzip -1、zip -r -1或 tar 包名后追加 -1。同一份数据1 级和 9 级的耗时能差出几倍空间紧张才值得上 9。命令速查表需求命令打包不压缩tar -cvf pack.tar dir/打包 gziptar -zcvf pack.tar.gz dir/打包 bzip2tar -jcvf pack.tar.bz2 dir/解 .tar.gztar -zxvf pack.tar.gz解 .tar.bz2tar -jxvf pack.tar.bz2解 .tar.xztar -Jxvf pack.tar.xz只看包内清单tar -tvf pack.tar.gz解压到指定目录tar -zxvf pack.tar.gz -C /tmp/out/gzip 保留原文件gzip -c a.txt a.txt.gz解压 gzgunzip a.txt.gzzip 递归 排除文件zip -r a.zip dir/ -x *.logzip 解压到指定目录unzip a.zip -d /tmp/out/zip 完整性测试unzip -t a.zip把打包和压缩分开理解之后参数其实不用死记看后缀选工具-z/-j/-J 对号入座就行。更细的参数组合和边界情况可以翻 linux-tutorial 仓库的Linux 命令大全继续练手。【免费下载链接】linux-tutorial:penguin: Linux教程主要内容Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorial创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考