Linux学习日志(5) 文件与文件系统的压缩、打包与备份

参考资料:鳥哥私房菜 - 第八章、檔案與檔案系統的壓縮,打包與備份

1. 压缩的基本概念

1.1 为什么需要压缩

  • 减少文件占用的磁盘空间
  • 降低网络传输时间
  • 便于数据归档和备份

1.2 Linux常见压缩文件扩展名

扩展名 对应压缩程序 说明
*.Z compress 已不流行,gzip可替代
*.zip zip Windows常见压缩格式
*.gz gzip GNU压缩,速度快,最常见
*.bz2 bzip2 压缩率比gzip好
*.xz xz 压缩率最高,但速度较慢
*.tar tar 仅打包未压缩
*.tar.gz tar + gzip 打包后用gzip压缩
*.tar.bz2 tar + bzip2 打包后用bzip2压缩
*.tar.xz tar + xz 打包后用xz压缩

2. 单一文件压缩命令

2.1 gzip 命令

命令格式: gzip [-cdtv#] 文件名

常用选项:

选项 作用
-c 将输出送到屏幕,可重定向到自定义文件
-d 解压缩
-t 检查压缩文件的一致性
-v 显示压缩比信息
-# 压缩等级,1-9,1最快压缩率最低,9最慢压缩率最高,默认6

使用示例:

1
2
3
gzip -v file.txt           # 压缩,生成file.txt.gz,原文件消失
gzip -d file.txt.gz # 解压缩
gzip -c file.txt > file.txt.gz # 压缩并保留原文件

查看压缩文件内容:

1
2
3
4
zcat file.txt.gz           # 直接查看压缩文件内容
zmore file.txt.gz # 分页查看
zless file.txt.gz # 更强大的分页查看
zgrep keyword file.txt.gz # 在压缩文件中搜索关键词

2.2 bzip2 命令

命令格式: bzip2 [-cdkzv#] 文件名

常用选项:

选项 作用
-c 将输出送到屏幕
-d 解压缩
-k 保留原文件(不删除)
-z 压缩(默认)
-v 显示压缩比
-# 压缩等级,1-9

使用示例:

1
2
3
bzip2 -v file.txt          # 压缩,生成file.txt.bz2
bzip2 -d file.txt.bz2 # 解压缩
bzip2 -k file.txt # 压缩并保留原文件

查看压缩文件内容:

1
2
3
4
bzcat file.txt.bz2         # 直接查看
bzmore file.txt.bz2 # 分页查看
bzless file.txt.bz2 # 更强大的分页查看
bzgrep keyword file.txt.bz2 # 搜索

2.3 xz 命令

命令格式: xz [-dtlkc#] 文件名

常用选项:

选项 作用
-d 解压缩
-t 测试压缩文件完整性
-l 列出压缩文件信息
-k 保留原文件
-c 输出到屏幕
-# 压缩等级,1-9

使用示例:

1
2
3
4
xz -v file.txt             # 压缩,生成file.txt.xz
xz -d file.txt.xz # 解压缩
xz -k file.txt # 压缩并保留原文件
xz -l file.txt.xz # 查看压缩文件信息

查看压缩文件内容:

1
2
3
4
xzcat file.txt.xz          # 直接查看
xzmore file.txt.xz # 分页查看
xzless file.txt.xz # 更强大的分页查看
xzgrep keyword file.txt.xz # 搜索

3. 打包命令:tar

3.1 tar 的核心概念

tar 是”tape archive”的缩写,它的特点是:

  • 只打包不压缩:单纯的 tar 仅将多个文件打包成一个文件
  • 配合压缩:通过选项调用 gzip/bzip2/xz 进行压缩
  • 保留属性:可以保留文件的权限、所有者、时间戳等属性

3.2 tar 命令格式

命令格式: tar [-z|-j|-J] [cxt] [v] -f 打包文件名 待打包文件...

3.3 tar 常用选项

压缩方式选项(三选一):

选项 说明 对应扩展名
-z 通过 gzip 进行压缩/解压缩 *.tar.gz
-j 通过 bzip2 进行压缩/解压缩 *.tar.bz2
-J 通过 xz 进行压缩/解压缩 *.tar.xz

操作选项(三选一):

选项 说明
-c 创建打包文件(压缩)
-t 查看打包文件内容
-x 解包或解压缩

辅助选项:

选项 说明
-v 显示正在处理的文件名
-f 指定文件名(必须接在选项最后)
-C 解压缩到指定目录
-p 保留原文件的权限和属性
-P 保留绝对路径(谨慎使用)
--exclude=FILE 排除指定的文件
--newer-mtime 只备份比指定时间新的文件

3.4 tar 压缩示例

打包与压缩:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 使用gzip压缩
tar -zcvf backup.tar.gz /etc /home

# 使用bzip2压缩
tar -jcvf backup.tar.bz2 /etc /home

# 使用xz压缩
tar -Jcvf backup.tar.xz /etc /home

# 排除特定文件
tar -zcvf backup.tar.gz /etc --exclude=/etc/passwd

# 只备份修改时间较新的文件
tar -zcvf newfile.tar.gz /etc --newer-mtime=2025-01-01

查看压缩包内容:

1
2
3
tar -ztvf backup.tar.gz      # 查看gzip压缩包内容
tar -jtvf backup.tar.bz2 # 查看bzip2压缩包内容
tar -Jtvf backup.tar.xz # 查看xz压缩包内容

3.5 tar 解压缩示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 解压到当前目录
tar -zxvf backup.tar.gz

# 解压到指定目录
tar -zxvf backup.tar.gz -C /tmp

# 只解压单个文件
tar -zxvf backup.tar.gz etc/passwd

# 解压部分文件(通配符)
tar -zxvf backup.tar.gz --wildcards '*.conf'

# 解压时保留权限
tar -zxvpf backup.tar.gz -C /target

3.6 tar 特殊用法

使用管道配合其他命令:

1
2
3
4
5
6
7
8
# 通过网络传输(发送端)
tar -zcvf - /etc | ssh user@host "cat > backup.tar.gz"

# 通过网络传输(接收端)
ssh user@host "tar -zcvf - /etc" > backup.tar.gz

# 直接备份到磁带设备
tar -cvf /dev/st0 /home

4. XFS 文件系统备份与还原

4.1 xfsdump - XFS 备份

命令格式: xfsdump [-L S_label] [-M M_label] [-l level] [-f 备份文件] 待备份路径

常用选项:

选项 说明
-L 指定文件系统的Label(Session Label)
-M 指定储存媒体的Label(Media Label)
-l 指定备份等级(0完整备份,1-9增量备份)
-f 指定备份文件
-I 查看备份信息

使用示例:

1
2
3
4
5
6
7
8
# 完整备份
xfsdump -L data_backup -M data_media -l 0 -f /backup/data.xfsdump /data

# 增量备份(仅备份修改过的文件)
xfsdump -L data_backup2 -M data_media2 -l 1 -f /backup/data2.xfsdump /data

# 查看备份信息
xfsdump -I

4.2 xfsrestore - XFS 还原

命令格式: xfsrestore [-f 备份文件] 还原路径

使用示例:

1
2
3
4
5
# 完全还原
xfsrestore -f /backup/data.xfsdump /data

# 交互式还原(选择要还原的文件)
xfsrestore -i -f /backup/data.xfsdump /data

5. 光盘写入工具

5.1 mkisofs - 创建ISO映像文件

命令格式: mkisofs [-o 映像文件] [-J] [-R] [-V 卷标] 源目录

常用选项:

选项 说明
-o 指定输出的映像文件名
-J 生成Joliet格式(Windows兼容)
-R 生成Rock Ridge格式(Linux权限保留)
-V 指定卷标
-v 显示详细信息

使用示例:

1
2
3
4
5
6
7
8
# 创建数据光盘映像
mkisofs -o backup.iso -J -R /data

# 创建带卷标的光盘映像
mkisofs -o backup.iso -V "MY_DATA" -J -R /data

# 创建可启动光盘映像
mkisofs -o boot.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot /iso

5.2 cdrecord - 刻录光盘

命令格式: cdrecord -v dev=设备名 映像文件

6. 其他备份工具

6.1 dd - 磁盘/分区备份

命令格式: dd if=源文件 of=目标文件 bs=块大小 count=块数

使用示例:

1
2
3
4
5
6
7
8
9
10
11
# 备份整个硬盘到文件
dd if=/dev/sda of=/backup/sda.img

# 备份MBR(前512字节)
dd if=/dev/sda of=/backup/mbr.bin bs=512 count=1

# 从备份文件恢复
dd if=/backup/sda.img of=/dev/sda

# 创建指定大小的空文件
dd if=/dev/zero of=/swapfile bs=1M count=1024

6.2 cpio - 备份工具

命令格式: 通常与 find 配合使用

使用示例:

1
2
3
4
5
6
7
8
# 备份
find /etc | cpio -ocvB > /backup/etc.cpio

# 还原
cpio -idvc < /backup/etc.cpio

# 备份时保留属性
find /etc | cpio -ocvB -H newc | gzip > /backup/etc.cpio.gz

7. 重点命令速查

命令 用途 常用示例
gzip gzip压缩 gzip file
gunzip gzip解压 gunzip file.gz
zcat 查看gz文件 zcat file.gz
bzip2 bzip2压缩 bzip2 -k file
bunzip2 bzip2解压 bunzip2 file.bz2
bzcat 查看bz2文件 bzcat file.bz2
xz xz压缩 xz -k file
unxz xz解压 unxz file.xz
xzcat 查看xz文件 xzcat file.xz
tar 打包/解包 tar -zcvf backup.tar.gz /etc
xfsdump XFS备份 xfsdump -l 0 -f backup /data
xfsrestore XFS还原 xfsrestore -f backup /data
dd 磁盘备份 dd if=/dev/sda of=backup.img
mkisofs 创建ISO mkisofs -o backup.iso /data
cpio 备份工具 find . | cpio -ocvB > backup.cpio

8. 核心要点

压缩三剑客对比:

  • gzip:速度最快,压缩率一般,适合日常使用
  • bzip2:速度中等,压缩率较好,适合需要节省空间
  • xz:速度最慢,压缩率最高,适合长期归档

tar 命令记忆法:

  • tar -zcvf:压缩(create + verbose + file)
  • tar -ztvf:查看(list + verbose + file)
  • tar -zxvf:解压(extract + verbose + file)

备份建议:

  • 重要数据定期完整备份 + 增量备份
  • 使用 -p 选项保留文件权限和属性
  • 备份前用 -t 选项确认压缩包内容
  • --exclude 排除临时文件和缓存目录