压缩文件可以节省存储空间、加快传输速度。Linux 提供了多种压缩工具,最常用的是 tar 配合 gzip 或 bzip2。了解各种压缩格式的特点,选择合适的工具,是日常运维的基本技能。
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 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 -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 压缩率比 gzip 高,但速度较慢。
bzip2 file.txt
bzip2 -k file.txt
bzip2 -d file.txt.bz2
bunzip2 file.txt.bz2
tar -cjvf archive.tar.bz2 dir/
tar -xjvf archive.tar.bz2
-j 表示使用 bzip2 压缩。
xz 压缩率最高,但速度最慢,适合长期存储。
xz file.txt
xz -k file.txt
xz -d file.txt.xz
unxz file.txt.xz
tar -cJvf archive.tar.xz dir/
tar -xJvf archive.tar.xz
-J 表示使用 xz 压缩。
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 -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 -czvf 创建,tar -xzvf 解压--exclude 排除文件