第393集文件管理-Linux系统压缩打包
|字数总计:2.6k|阅读时长:10分钟|阅读量:
文件管理 - Linux系统压缩打包
1. 压缩工具概述
windows下我们接触最多的压缩文件就是.rar格式, 但Linux有自己所特有的压缩工具。
如果希望windows和Linux互相能使用的压缩工具, 建议.zip格式
压缩的好处
压缩的好处主要有:
- 节省磁盘空间占用率
- 节省网络传输带宽消耗
- 网络传输更加快捷
Linux系统常见的后缀名所对应的压缩工具
| 后缀名 |
压缩工具 |
说明 |
.gz |
gzip |
gzip压缩工具压缩的文件 |
.bz2 |
bzip2 |
bzip2压缩工具压缩的文件 |
.tar |
tar |
tar没有压缩功能,只是把一个目录合并成一个文件 |
.tar.gz |
tar + gzip |
先使用tar打包,然后使用gzip压缩归档 |
.tar.bz2 |
tar + bzip2 |
先使用tar打包,然后使用bzip2压缩归档 |
.tar.xz |
tar + xz |
先使用tar打包,然后使用xz压缩归档 |
注意:
- Linux下常用压缩文件以
.tar.gz结尾
- Linux下压缩文件必须带后缀
2. ZIP压缩工具
zip是压缩工具,unzip是解压缩工具
2.1 压缩文件
1 2 3 4 5
| [root@liyanzhao ~]
[root@liyanzhao ~]
|
2.2 解压文件
1 2 3 4 5
| [root@liyanzhao ~]
[root@liyanzhao ~]
|
2.3 ZIP常用选项
| 选项 |
功能 |
-r |
递归压缩目录 |
-q |
安静模式,不显示压缩过程 |
-v |
显示详细信息 |
-d |
解压到指定目录 |
3. TAR压缩工具
tar是linux下最常用的压缩与解压缩, 支持文件和目录的压缩归档
3.1 TAR语法
1
| tar [-zjxcvfpP] filename
|
3.2 TAR常用参数
| 参数 |
功能 |
c |
创建新的归档文件 |
x |
对归档文件解包 |
t |
列出归档文件里的文件列表 |
v |
输出命令的归档或解包的过程 |
f |
指定包文件名,多参数f写最后 |
C |
指定解压目录位置 |
z |
使用gzip压缩归档后的文件(.tar.gz) |
j |
使用bzip2压缩归档后的文件(.tar.bz2) |
J |
使用xz压缩归档后的文件(tar.xz) |
X |
排除多个文件(写入需要排除的文件名称) |
h |
打包软链接 |
--hard-dereference |
打包硬链接 |
--exclude |
在打包的时候写入需要排除文件或目录 |
3.3 常用打包与压缩组合
| 组合 |
功能 |
czf |
打包tar.gz格式 |
cjf |
打包tar.bz2格式 |
cJf |
打包tar.xz格式 |
zxf |
解压tar.gz格式 |
jxf |
解压tar.bz2格式 |
xf |
自动选择解压模式 |
tf |
查看压缩包内容 |
3.4 将文件或目录进行打包压缩
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| tar czf test.tar.gz test/ test2/
tar cjf test.tar.bz2 dir.txt dir/
[root@liyanzhao ~] [root@liyanzhao /]
[root@liyanzhao ~] [root@liyanzhao /]
[root@liyanzhao /]
|
3.5 排除文件, 并打包压缩
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [root@liyanzhao /]
[root@liyanzhao /]
[root@liyanzhao /] etc/services etc/rc.local etc/rc.d/rc.local
[root@liyanzhao /]
|
3.6 查看压缩文件
1 2 3 4 5
| [root@liyanzhao /]
[root@liyanzhao /]
|
3.7 解压缩文件
1 2 3 4 5
| [root@liyanzhao /]
[root@student ~]
|
注意: 不管是打包还是解包,原文件是不会被删除的,但会覆盖当前已经存在的文件或者目录。
4. TAR实践案例
4.1 基础环境准备
1 2 3 4 5 6 7 8
| [root@localhost ~]
[root@localhost ~]
[root@localhost ~]
|
4.2 案例1: MySQL物理备份及恢复
备份方法1: 打包整个mysql目录
1 2 3 4 5
| [root@localhost ~]
[root@localhost ~]
|
备份方法2: 进入目录打包
1 2 3 4 5 6 7 8 9 10 11
| [root@localhost ~]
[root@localhost mysql]
[root@localhost mysql]
[root@localhost mysql]
|
4.3 案例2: 本地文件快速传输
场景: host A /etc (海量小文件) –> host A /tmp
命令说明:
tar czf - /etc: 将/etc目录打包压缩,输出到标准输出(-)
|: 管道符,将输出传递给下一个命令
tar xzf - -C /tmp: 从标准输入(-)读取数据,解压到/tmp目录
4.4 案例3: 跨主机文件传输
场景: host A /etc (海量小文件) –> host B /tmp
方法1: 常规方法(使用scp)
缺点:
- 传输大量小文件时速度慢
- 需要先打包再传输,占用磁盘空间
方法2: 建议方法(使用nc+tar管道)
优势:
- 无需生成中间文件,节省磁盘空间
- 传输速度快,适合海量小文件
- 实时传输,边打包边传输
步骤:
接收方B主机:
1 2 3 4 5
| [root@hostB ~]
[root@hostB ~]
|
发送方A主机:
1 2 3
| [root@hostA ~] tar: Removing leading `/' from member names
|
命令说明:
tar -czf - /etc: 打包压缩/etc目录,输出到标准输出
|: 管道符
nc 192.168.69.113 8888: 通过netcat发送到目标主机8888端口
nc -l 8888: 在目标主机监听8888端口
tar -xzf - -C /tmp: 从标准输入解压到/tmp目录
完整传输流程:
1 2 3 4 5
| [root@hostB ~]
[root@hostA ~]
|
4.5 案例4: 带进度显示的传输
如果需要显示传输进度,可以使用pv命令:
1 2 3 4 5 6 7 8
| yum install -y pv
tar -czf - /etc | pv | nc 192.168.69.113 8888
nc -l 8888 | pv | tar -xzf - -C /tmp
|
4.6 案例5: 压缩级别选择
1 2 3 4 5 6 7 8 9 10 11
| tar czf archive.tar.gz /path/to/dir
tar cjf archive.tar.bz2 /path/to/dir
tar cJf archive.tar.xz /path/to/dir
tar czf archive.tar.gz --use-compress-program="gzip -9" /path/to/dir
|
5. 压缩工具对比
5.1 压缩比和速度对比
| 压缩格式 |
压缩比 |
压缩速度 |
解压速度 |
适用场景 |
.tar.gz |
中等 |
快 |
快 |
日常使用,平衡选择 |
.tar.bz2 |
较高 |
慢 |
中等 |
需要较高压缩比 |
.tar.xz |
最高 |
最慢 |
慢 |
需要最高压缩比,存储空间有限 |
.zip |
中等 |
中等 |
中等 |
Windows/Linux兼容 |
5.2 选择建议
- 日常使用: 推荐
.tar.gz,速度快,压缩比适中
- 长期归档: 推荐
.tar.xz,压缩比最高
- 跨平台: 推荐
.zip,兼容性好
- 大量小文件: 推荐使用管道方式,避免中间文件
6. 常用命令总结
6.1 ZIP命令总结
1 2 3 4 5 6 7 8 9 10
| zip -r archive.zip /path/to/dir zip archive.zip file1 file2
unzip archive.zip unzip archive.zip -d /target/dir
unzip -l archive.zip
|
6.2 TAR命令总结
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| tar czf archive.tar.gz /path/to/dir tar cjf archive.tar.bz2 /path/to/dir tar cJf archive.tar.xz /path/to/dir
tar xzf archive.tar.gz tar xjf archive.tar.bz2 tar xf archive.tar.*
tar tf archive.tar.gz tar tvf archive.tar.gz
tar czf archive.tar.gz --exclude=pattern /path tar czfX archive.tar.gz exclude.list /path
tar xf archive.tar.gz -C /target/dir
|
6.3 管道传输命令
1 2 3 4 5 6 7 8 9
| tar czf - /source | tar xzf - -C /target
nc -l 8888 | tar xzf - -C /target
tar czf - /source | nc target_host 8888
|
7. 实战练习
练习1: 基础压缩打包
1 2 3 4 5 6 7 8 9 10 11 12
| mkdir -p /tmp/test/{dir1,dir2} touch /tmp/test/{file1,file2,dir1/file3,dir2/file4}
tar czf /tmp/test.tar.gz /tmp/test
tar tf /tmp/test.tar.gz
tar xzf /tmp/test.tar.gz -C /tmp/restore
|
练习2: 排除文件打包
1 2 3 4 5 6 7 8 9 10 11 12
| cat > /tmp/exclude.list <<EOF *.log *.tmp test/ EOF
tar czfX /tmp/backup.tar.gz /tmp/exclude.list /etc
tar tf /tmp/backup.tar.gz | grep -E '\.(log|tmp)'
|
练习3: MySQL备份恢复
1 2 3 4 5 6 7 8 9 10 11
| systemctl stop mariadb tar cJf /backup/mysql-$(date +%Y%m%d).tar.xz /var/lib/mysql systemctl start mariadb
systemctl stop mariadb rm -rf /var/lib/mysql/* tar xf /backup/mysql-20240130.tar.xz -C / chown -R mysql:mysql /var/lib/mysql systemctl start mariadb
|
练习4: 跨主机传输
1 2 3 4 5
| tar czf - /etc | nc 192.168.1.100 8888
nc -l 8888 | tar xzf - -C /tmp/etc-backup
|
8. 注意事项
8.1 路径问题
1 2 3 4 5 6 7 8 9
| tar czf backup.tar.gz /etc
cd / tar czf backup.tar.gz etc/
tar czf backup.tar.gz -C / etc
|
8.2 权限问题
1 2 3 4 5 6 7 8
| tar czf backup.tar.gz /etc
tar xzf backup.tar.gz
tar xzf backup.tar.gz --no-same-permissions
|
8.3 大文件处理
1 2 3 4 5
| tar czf - /large/dir | split -b 1G - backup.tar.gz.
cat backup.tar.gz.* | tar xzf -
|