尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Linux与Windows文件压缩解压命令详解

Linux与Windows文件压缩解压命令详解 1. 压缩与解压缩命令基础概念在Linux和Windows系统中文件压缩与解压缩是日常操作中最频繁使用的功能之一。作为一名系统管理员我几乎每天都要处理各种压缩包从简单的文档打包到大型项目部署压缩技术贯穿了整个工作流程。压缩的本质是通过特定算法减少文件占用的存储空间。这个过程就像打包行李箱时把衣服卷起来而不是平铺——通过更高效的排列方式我们能在有限空间内装入更多内容。常见的压缩算法有DEFLATEzip/gzip使用、LZMA7z/xz使用、BZip2等它们各有特点DEFLATE速度快但压缩率一般LZMA压缩率高但耗时较长BZip2则在两者间取得平衡。注意不同操作系统默认支持的压缩格式不同。Windows偏爱RAR/ZIP而Linux更常用gzip/bzip2/xz。跨平台传输文件时建议使用ZIP格式它的兼容性最好。2. Linux下的压缩命令详解2.1 gzip/gunzip命令gzip是Linux下最古老的压缩工具之一使用DEFLATE算法。它的基本用法简单直接# 压缩文件原文件会被替换为.gz文件 gzip filename # 解压文件 gunzip filename.gz # 查看压缩文件内容不解压 zcat filename.gz我在服务器日志处理中经常使用gzip特别是配合tar命令进行目录打包压缩时tar -czvf logs.tar.gz /var/log/nginx/这里的-z参数就是调用gzip进行压缩。实测一个10GB的日志目录压缩后通常能降到1GB左右。2.2 bzip2/bunzip2命令bzip2采用Burrows-Wheeler算法压缩率通常比gzip高15-20%但速度慢2-4倍。适合对压缩率要求高且不频繁访问的文件# 压缩生成.bz2文件 bzip2 large_file.iso # 解压并保留原压缩包 bunzip2 -k large_file.iso.bz22.3 xz/unxz命令xz使用LZMA2算法在压缩率和速度之间取得了很好的平衡。我常用它来压缩虚拟机镜像# 压缩-9表示最高压缩级别 xz -9c ubuntu.qcow2 ubuntu.qcow2.xz # 解压到标准输出 unxz -c ubuntu.qcow2.xz ubuntu-restored.qcow2经验对于qcow2格式的虚拟机磁盘先执行qemu-img convert -O qcow2 -c进行内部压缩再用xz压缩效果更好。3. ZIP/RAR格式的跨平台处理3.1 zip/unzip命令ZIP是跨平台兼容性最好的格式。Linux下使用zip命令时有个常见问题——压缩包在Windows解压后中文文件名乱码。解决方法是指定编码zip -r -O UTF-8 project.zip ./src/解压时如果遇到invalid compressed data错误可能是文件损坏或使用了不兼容的压缩方法。可以尝试unzip -FF corrupted.zip -d fixed_files3.2 rar/unrar命令RAR虽然非开源但在Windows用户中很流行。处理RAR文件需要额外安装unrar# Ubuntu/Debian sudo apt install unrar # CentOS/RHEL sudo yum install unrar # 解压到当前目录 unrar x windows_backup.rar避坑指南Windows下用WinRAR压缩时务必取消勾选保留损坏的文件选项否则在Linux解压时可能报错。4. 高级压缩技巧与排错4.1 多卷压缩与加密对于超大文件可以分卷压缩# 每个分卷100MB zip -r -s 100m archive.zip big_folder/加密压缩使用-e参数ZIP或-p参数RAR# ZIP加密会提示输入密码 zip -e secure.zip sensitive.doc # 非交互式加密不推荐密码会留在历史记录 zip -e -P MyPass123 secure.zip sensitive.doc4.2 压缩失败常见问题排查问题1磁盘空间不足压缩过程中报No space left on device可以使用df -h确认磁盘空间用-p参数保留原文件权限避免临时文件过大考虑分卷压缩问题2文件权限问题遇到Permission denied时可以# 尝试sudo需谨慎 sudo zip -r backup.zip /etc/ # 更好的方式是先复制到临时目录 mkdir /tmp/backup cp -a /etc/* /tmp/backup/ zip -r backup.zip /tmp/backup/问题3特殊文件处理压缩包含符号链接的目录时默认不会跟随链接。需要添加-y参数zip -ry symlinks.zip /path/with/links4.3 性能优化技巧对大文件使用--fast参数快速压缩牺牲压缩率多核CPU环境下使用pigz代替gzip并行压缩tar -cvf - big_dir | pigz big_dir.tar.gz压缩前先删除临时文件和无用日志find . -name *.tmp -delete5. 特殊场景下的压缩应用5.1 虚拟机磁盘压缩对于VDI、QCOW2等虚拟机磁盘直接压缩效果不佳。应先进行零填充再压缩# 对qcow2镜像 sudo virt-sparsify --compress compressed.qcow2 original.qcow2 # 对VDI镜像 VBoxManage modifymedium disk --compact5.2 内存压缩禁用WindowsWindows 10默认启用内存压缩可能影响性能。禁用方法Disable-MMAgent -MemoryCompression需要重启生效。5.3 Elasticsearch数据压缩将ES数据压缩后上传到OSS的推荐流程使用_snapshot API创建快照用tar打包快照目录用xz压缩权衡速度和压缩率通过OSS CLI上传curl -XPUT localhost:9200/_snapshot/my_backup/snapshot_1 tar -cJf es_backup.tar.xz /var/lib/elasticsearch/snapshots/ ossutil cp es_backup.tar.xz oss://my-bucket/6. 压缩命令的替代方案6.1 使用7z获得更高压缩率7z通常能比zip多压缩30-50%7z a -t7z -m0lzma -mx9 archive.7z folder/参数说明-t7z指定7z格式-m0lzma使用LZMA算法-mx9最大压缩级别6.2 使用zstd平衡速度与效率zstd是Facebook开发的新一代压缩工具速度接近gzip但压缩率更高# 压缩-3是速度/压缩率平衡点 tar -cvf - data/ | zstd -3 -o data.tar.zst # 解压 zstd -d data.tar.zst -o data.tar6.3 图片纹理压缩游戏开发中常用的纹理压缩工具# 使用PVRTexTool压缩PNG为PVRTC PVRTexTool -f PVRTC1_4 -i texture.png -o texture.pvr # 使用etcpack压缩为ETC2 etcpack texture.png out_dir -c etc27. 自动化压缩脚本示例7.1 日志轮转压缩脚本#!/bin/bash LOG_DIR/var/log/myapp DATE$(date %Y%m%d) # 压缩7天前的日志 find $LOG_DIR -name *.log -mtime 7 -exec gzip {} \; # 删除30天前的压缩包 find $LOG_DIR -name *.gz -mtime 30 -delete7.2 带进度显示的压缩脚本#!/bin/bash function compress_with_progress() { tar -cf - $1 | pv -s $(du -sb $1 | awk {print $1}) | gzip $1.tar.gz } compress_with_progress large_folder7.3 安全删除并压缩脚本#!/bin/bash # 安全擦除并压缩敏感文件 shred -u sensitive_file \ zip -e secure.zip sensitive_file8. 压缩工具的选择策略根据我的经验选择压缩工具时应考虑压缩目的临时传输zip速度快长期归档xz/7z压缩率高日志文件gzip平衡性好硬件环境多核CPUpigz/pbzip2/pxz老旧设备gzip -3文件类型文本bzip2/xz二进制zip/7z已压缩文件如jpg直接打包不压缩实际项目中我通常会先用不同工具测试样本文件。例如对一个500MB的日志目录测试原始大小500MB gzip -985MB (17%) 耗时25秒 bzip2 -972MB (14.4%) 耗时1分10秒 xz -968MB (13.6%) 耗时2分钟 7z -mx965MB (13%) 耗时3分钟根据这些数据日常日志备份我会选择gzip而重要项目归档会选择xz。
返回列表