tar-compression
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinese归档与压缩
归档与压缩
概述
概述
tar/gzip/xz 归档压缩、分卷备份技能。
tar/gzip/xz 归档压缩、分卷备份技能。
tar 基础
tar 基础
创建归档
创建归档
bash
undefinedbash
undefined创建 tar 归档
创建 tar 归档
tar -cvf archive.tar /path/to/dir
tar -cvf archive.tar /path/to/dir
创建并 gzip 压缩
创建并 gzip 压缩
tar -czvf archive.tar.gz /path/to/dir
tar -czvf archive.tar.gz /path/to/dir
创建并 bzip2 压缩
创建并 bzip2 压缩
tar -cjvf archive.tar.bz2 /path/to/dir
tar -cjvf archive.tar.bz2 /path/to/dir
创建并 xz 压缩
创建并 xz 压缩
tar -cJvf archive.tar.xz /path/to/dir
tar -cJvf archive.tar.xz /path/to/dir
多个目录/文件
多个目录/文件
tar -czvf archive.tar.gz dir1 dir2 file1.txt
undefinedtar -czvf archive.tar.gz dir1 dir2 file1.txt
undefined解压归档
解压归档
bash
undefinedbash
undefined解压 tar
解压 tar
tar -xvf archive.tar
tar -xvf archive.tar
解压 gzip
解压 gzip
tar -xzvf archive.tar.gz
tar -xzvf archive.tar.gz
解压 bzip2
解压 bzip2
tar -xjvf archive.tar.bz2
tar -xjvf archive.tar.bz2
解压 xz
解压 xz
tar -xJvf archive.tar.xz
tar -xJvf archive.tar.xz
解压到指定目录
解压到指定目录
tar -xzvf archive.tar.gz -C /target/dir
undefinedtar -xzvf archive.tar.gz -C /target/dir
undefined查看内容
查看内容
bash
undefinedbash
undefined列出内容
列出内容
tar -tvf archive.tar
tar -tzvf archive.tar.gz
tar -tvf archive.tar
tar -tzvf archive.tar.gz
搜索文件
搜索文件
tar -tzvf archive.tar.gz | grep "filename"
undefinedtar -tzvf archive.tar.gz | grep "filename"
undefined常用选项
常用选项
bash
undefinedbash
undefined排除文件/目录
排除文件/目录
tar -czvf archive.tar.gz --exclude='*.log' --exclude='cache' /path
tar -czvf archive.tar.gz --exclude='*.log' --exclude='cache' /path
从文件读取排除列表
从文件读取排除列表
tar -czvf archive.tar.gz --exclude-from=exclude.txt /path
tar -czvf archive.tar.gz --exclude-from=exclude.txt /path
保留权限
保留权限
tar -czvf archive.tar.gz --preserve-permissions /path
tar -czvf archive.tar.gz --preserve-permissions /path
增量备份
增量备份
tar -czvf archive.tar.gz --newer='2024-01-01' /path
undefinedtar -czvf archive.tar.gz --newer='2024-01-01' /path
undefined压缩工具
压缩工具
gzip
gzip
bash
undefinedbash
undefined压缩
压缩
gzip file.txt # 生成 file.txt.gz,删除原文件
gzip -k file.txt # 保留原文件
gzip -9 file.txt # 最高压缩率
gzip file.txt # 生成 file.txt.gz,删除原文件
gzip -k file.txt # 保留原文件
gzip -9 file.txt # 最高压缩率
解压
解压
gunzip file.txt.gz
gzip -d file.txt.gz
gunzip file.txt.gz
gzip -d file.txt.gz
查看压缩文件
查看压缩文件
zcat file.txt.gz
zless file.txt.gz
zgrep "pattern" file.txt.gz
undefinedzcat file.txt.gz
zless file.txt.gz
zgrep "pattern" file.txt.gz
undefinedbzip2
bzip2
bash
undefinedbash
undefined压缩
压缩
bzip2 file.txt
bzip2 -k file.txt # 保留原文件
bzip2 -9 file.txt # 最高压缩率
bzip2 file.txt
bzip2 -k file.txt # 保留原文件
bzip2 -9 file.txt # 最高压缩率
解压
解压
bunzip2 file.txt.bz2
bzip2 -d file.txt.bz2
bunzip2 file.txt.bz2
bzip2 -d file.txt.bz2
查看
查看
bzcat file.txt.bz2
undefinedbzcat file.txt.bz2
undefinedxz
xz
bash
undefinedbash
undefined压缩
压缩
xz file.txt
xz -k file.txt # 保留原文件
xz -9 file.txt # 最高压缩率
xz -T 4 file.txt # 多线程
xz file.txt
xz -k file.txt # 保留原文件
xz -9 file.txt # 最高压缩率
xz -T 4 file.txt # 多线程
解压
解压
unxz file.txt.xz
xz -d file.txt.xz
unxz file.txt.xz
xz -d file.txt.xz
查看
查看
xzcat file.txt.xz
undefinedxzcat file.txt.xz
undefinedzstd
zstd
bash
undefinedbash
undefined压缩
压缩
zstd file.txt
zstd -19 file.txt # 最高压缩率
zstd -T0 file.txt # 自动多线程
zstd file.txt
zstd -19 file.txt # 最高压缩率
zstd -T0 file.txt # 自动多线程
解压
解压
unzstd file.txt.zst
zstd -d file.txt.zst
undefinedunzstd file.txt.zst
zstd -d file.txt.zst
undefined分卷备份
分卷备份
split 分割
split 分割
bash
undefinedbash
undefined按大小分割
按大小分割
split -b 100M archive.tar.gz archive.tar.gz.part_
split -b 100M archive.tar.gz archive.tar.gz.part_
按行分割
按行分割
split -l 10000 largefile.txt part_
split -l 10000 largefile.txt part_
合并
合并
cat archive.tar.gz.part_* > archive.tar.gz
undefinedcat archive.tar.gz.part_* > archive.tar.gz
undefinedtar 分卷
tar 分卷
bash
undefinedbash
undefined创建分卷
创建分卷
tar -czvf - /path/to/dir | split -b 100M - backup.tar.gz.part_
tar -czvf - /path/to/dir | split -b 100M - backup.tar.gz.part_
解压分卷
解压分卷
cat backup.tar.gz.part_* | tar -xzvf -
undefinedcat backup.tar.gz.part_* | tar -xzvf -
undefined常见场景
常见场景
场景 1:网站备份
场景 1:网站备份
bash
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup"
WEB_DIR="/var/www/html"bash
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup"
WEB_DIR="/var/www/html"创建备份
创建备份
tar -czvf ${BACKUP_DIR}/web_${DATE}.tar.gz
--exclude='.log'
--exclude='cache/'
${WEB_DIR}
--exclude='.log'
--exclude='cache/'
${WEB_DIR}
tar -czvf ${BACKUP_DIR}/web_${DATE}.tar.gz
--exclude='.log'
--exclude='cache/'
${WEB_DIR}
--exclude='.log'
--exclude='cache/'
${WEB_DIR}
保留最近 7 天
保留最近 7 天
find ${BACKUP_DIR} -name "web_*.tar.gz" -mtime +7 -delete
undefinedfind ${BACKUP_DIR} -name "web_*.tar.gz" -mtime +7 -delete
undefined场景 2:数据库备份压缩
场景 2:数据库备份压缩
bash
undefinedbash
undefinedMySQL
MySQL
mysqldump -u root -p database | gzip > db_backup.sql.gz
mysqldump -u root -p database | gzip > db_backup.sql.gz
解压恢复
解压恢复
gunzip < db_backup.sql.gz | mysql -u root -p database
gunzip < db_backup.sql.gz | mysql -u root -p database
PostgreSQL
PostgreSQL
pg_dump database | xz > db_backup.sql.xz
undefinedpg_dump database | xz > db_backup.sql.xz
undefined场景 3:增量备份
场景 3:增量备份
bash
#!/bin/bash
SNAPSHOT="/backup/snapshot.snar"
BACKUP_DIR="/backup"
SOURCE="/data"bash
#!/bin/bash
SNAPSHOT="/backup/snapshot.snar"
BACKUP_DIR="/backup"
SOURCE="/data"完整备份(首次)
完整备份(首次)
tar -czvf ${BACKUP_DIR}/full.tar.gz -g ${SNAPSHOT} ${SOURCE}
tar -czvf ${BACKUP_DIR}/full.tar.gz -g ${SNAPSHOT} ${SOURCE}
增量备份
增量备份
tar -czvf ${BACKUP_DIR}/incr_$(date +%Y%m%d).tar.gz -g ${SNAPSHOT} ${SOURCE}
undefinedtar -czvf ${BACKUP_DIR}/incr_$(date +%Y%m%d).tar.gz -g ${SNAPSHOT} ${SOURCE}
undefined场景 4:远程备份
场景 4:远程备份
bash
undefinedbash
undefined本地压缩后传输
本地压缩后传输
tar -czvf - /path/to/dir | ssh user@remote "cat > /backup/archive.tar.gz"
tar -czvf - /path/to/dir | ssh user@remote "cat > /backup/archive.tar.gz"
远程压缩
远程压缩
ssh user@remote "tar -czvf - /path/to/dir" > local_backup.tar.gz
undefinedssh user@remote "tar -czvf - /path/to/dir" > local_backup.tar.gz
undefined压缩对比
压缩对比
| 格式 | 压缩率 | 速度 | 内存 | 适用场景 |
|---|---|---|---|---|
| gzip | 中 | 快 | 低 | 日常备份 |
| bzip2 | 高 | 慢 | 中 | 归档存储 |
| xz | 最高 | 最慢 | 高 | 长期存储 |
| zstd | 高 | 快 | 中 | 现代备份 |
| 格式 | 压缩率 | 速度 | 内存 | 适用场景 |
|---|---|---|---|---|
| gzip | 中 | 快 | 低 | 日常备份 |
| bzip2 | 高 | 慢 | 中 | 归档存储 |
| xz | 最高 | 最慢 | 高 | 长期存储 |
| zstd | 高 | 快 | 中 | 现代备份 |
故障排查
故障排查
| 问题 | 排查方法 |
|---|---|
| 解压失败 | 检查文件完整性、格式 |
| 空间不足 | 使用管道、分卷 |
| 权限丢失 | 使用 --preserve-permissions |
| 文件损坏 | 使用 gzip -t 测试 |
bash
undefined| 问题 | 排查方法 |
|---|---|
| 解压失败 | 检查文件完整性、格式 |
| 空间不足 | 使用管道、分卷 |
| 权限丢失 | 使用 --preserve-permissions |
| 文件损坏 | 使用 gzip -t 测试 |
bash
undefined测试压缩文件
测试压缩文件
gzip -t file.gz
bzip2 -t file.bz2
xz -t file.xz
gzip -t file.gz
bzip2 -t file.bz2
xz -t file.xz
修复损坏的 gzip
修复损坏的 gzip
gzrecover file.gz
gzrecover file.gz
查看压缩信息
查看压缩信息
gzip -l file.gz
undefinedgzip -l file.gz
undefined