文件压缩与解压

压缩文件可以节省存储空间、加快传输速度。Linux 提供了多种压缩工具,最常用的是 tar 配合 gzip 或 bzip2。了解各种压缩格式的特点,选择合适的工具,是日常运维的基本技能。

tar 归档

tar 本身只打包不压缩,把多个文件合并成一个归档文件。

创建归档

tar -cvf archive.tar file1 file2 dir/
tar -cvf backup.tar /home/user/

选项含义:

选项含义
-c创建归档
-v显示过程
-f指定文件名

解开归档

tar -xvf archive.tar
tar -xvf archive.tar -C /target/dir/

-x 解开,-C 指定目标目录。

查看归档内容

tar -tvf archive.tar

-t 列出内容。

追加文件

tar -rvf archive.tar newfile

-r 追加到现有归档。

gzip 压缩

gzip 是最常用的压缩工具,压缩速度快,压缩率适中。

压缩文件

gzip file.txt
gzip -k file.txt

默认会删除原文件,-k 保留原文件。压缩后文件名为 file.txt.gz。

解压文件

gzip -d file.txt.gz
gunzip file.txt.gz

查看压缩文件内容

zcat file.txt.gz
zless file.txt.gz
zgrep "pattern" file.txt.gz

压缩级别

gzip -1 file.txt
gzip -9 file.txt

-1 最快压缩,-9 最高压缩率。默认是 -6。

tar + gzip

tar 和 gzip 配合使用,边打包边压缩:

创建压缩包

tar -czvf archive.tar.gz dir/
tar -czvf backup.tar.gz /home/user/

-z 表示使用 gzip 压缩。

解压

tar -xzvf archive.tar.gz
tar -xzvf archive.tar.gz -C /target/

bzip2 压缩

bzip2 压缩率比 gzip 高,但速度较慢。

压缩

bzip2 file.txt
bzip2 -k file.txt

解压

bzip2 -d file.txt.bz2
bunzip2 file.txt.bz2

tar + bzip2

tar -cjvf archive.tar.bz2 dir/
tar -xjvf archive.tar.bz2

-j 表示使用 bzip2 压缩。

xz 压缩

xz 压缩率最高,但速度最慢,适合长期存储。

压缩

xz file.txt
xz -k file.txt

解压

xz -d file.txt.xz
unxz file.txt.xz

tar + xz

tar -cJvf archive.tar.xz dir/
tar -xJvf archive.tar.xz

-J 表示使用 xz 压缩。

zip 压缩

zip 是跨平台格式,Windows 和 Linux 都支持。

压缩

zip archive.zip file1 file2
zip -r archive.zip dir/

-r 递归压缩目录。

解压

unzip archive.zip
unzip archive.zip -d /target/

查看内容

unzip -l archive.zip

压缩格式对比

格式扩展名压缩率速度兼容性
gzip.gz
bzip2.bz2
xz.xz最高一般
zip.zip最好

选择建议:

  • 日常使用:tar.gz
  • 需要高压缩率:tar.xz
  • 跨平台共享:zip

实用示例

备份目录

tar -czvf backup_$(date +%Y%m%d).tar.gz /home/user/

排除特定文件

tar -czvf archive.tar.gz --exclude='*.log' dir/
tar -czvf archive.tar.gz --exclude='node_modules' project/

增量备份

tar -czvf backup.tar.gz -g snapshot.snar /home/user/

分卷压缩

tar -czvf - dir/ | split -b 100m - backup.tar.gz.

恢复:

cat backup.tar.gz.* | tar -xzvf -

压缩日志

find /var/log -name "*.log" -mtime +7 -exec gzip {} \;

比较压缩效果

gzip -c file > file.gz
bzip2 -c file > file.bz2
xz -c file > file.xz
ls -lh file*

小结

  • tar 打包,gzip/bzip2/xz 压缩
  • tar.gz 最常用,平衡压缩率和速度
  • tar.xz 压缩率最高,适合长期存储
  • zip 跨平台兼容性好
  • tar -czvf 创建,tar -xzvf 解压
  • --exclude 排除文件