压缩打包
压缩的好处
- 节省磁盘空间占用率
- 节省网络传输带宽消耗
- 网络传输更加快捷
Linux系统常见的压缩包类型
格式 | 压缩工具 |
---|---|
.zip | zip压缩工具(windows与Linux互通) |
.gz | gzip压缩工具,只能压缩文件,但会删除源文件(配合tar使用) |
.bz2 | bzip2压缩工具,只能压缩文件,但会删除源文件(配合tar使用) |
.tar.gz | 先使用tar命令归档打包,然后使用gzip压缩 |
.tar.bz2 | 先使用tar命令归档打包,然后使用bzip压缩 |
注意:
- Linux下常用压缩文件以.tar.gz结尾
- Linux下压缩文件必须带后缀
什么是打包
所谓打包就是将一大堆文件或目录变成一个总的文件后压缩
什么是归档
所谓归档就是将一大堆文件或目录变成一个总的文件
gzip压缩工具
# 语法
gzip [选项] 文件名...
gzip [option] [file...]
# 选项
-r 指定目录,将目录下所有文件都压缩成gz格式的压缩包# (目录不会变压缩包,目录下的所有文件会单独变成压缩包)
-d 解压
# 特性
- gzip压缩文件,源文件消失
- gzip压缩文件,每个文件都是单独的压缩包
- gzip默认只能压缩文件,不能压缩目录
- zcat能查看压缩包的文件内容
- 当解压的时候,源文件出现,压缩包消失
# 安装gzip压缩工具
yum install -y gzip
# 创建文件
echo 456 >> file1
# 压缩file1
gzip file1
# 查看文件
ll
# 查看文件类型
file file1.gz
# 查看gzip压缩后的文件内容
zcat file1.gz
# 解压文件
gzip -d file1.gz
# 查看文件
ll
zip压缩工具
# 语法
zip [选项] 压缩包名 文件名
unzip 压缩包名 [选项] 文件名
# 选项
-r 递归处理,把目录下所有文件都压缩进去(zip)
-d 可以解压到其他指定的路径下(unzip)
# 特性
zip打包,保留源文件
unzip解压,保留压缩包
zip可以打包目录,但是不加-r时,是纯粹打包空目录
zip不能解压 unzip默认解压到当前目录
unzip -d 可以解压到其他指定的路径下
# 安装zip压缩工具和解压工具
yum install -y zip unzip
# 压缩文件为zip包
zip filename.zip filename
# 压缩目录为zip包
zip dir.zip dir/
# 解压zip文件包,默认解压至当前目录
unzip filename.zip
tar压缩工具
tar
是linux
最常用的压缩与解压命令,支持文件和目录的压缩归档
# 语法:tar [选项] 文件名
tar [-zjJxXcCvfP] filename
# 选项
c # 创建新的归档文件
x # 对归档文件解包
t # 列出归档文件里的文件列表
v # 输出命令的归档或解包的过程
f # 指定包文件名,如多参数f写最后(f后必须接包名)
C # 指定解压目录位置
z # 使用gzip压缩归档后的文件(.tar.gz)
j # 使用bzip2压缩归档后的文件(.tar.bz2)
J # 使用xz压缩归档后的文件(.tar.xz)
X # 排除多个文件(写入需要排除的文件名称)
h # 打包软链接
P # 连带绝对路径打包
u # 在压缩打包的情况下往里加文件
# 了解
--hard-dereference 打包硬链接
--exclude 在打包的时候写入需要排除的文件或目录
# 常用的打包与压缩组合
czf # 打包tar.gz格式
cjf # 打包tar.bz2格式
cJf # 打包tar.xz格式
zxf # 解压tar.gz格式
jxf # 解压tar.bz2格式
xf # 自动选择解压模式(万能)
tf # 查看压缩包内容
# 选项无论怎么组合 f必须放最后面,且必须接包名
# tar有个安全机制,如果是以绝对路径打包,则会删除前面的/
- 为了避免这种情况出现 避免解压开的时候覆盖源目录内容
- 要压缩哪个目录,就去这个目录的上一级,使用相对路径
# tar解压后,直接覆盖相同文件,不会提示是否覆盖
# 打包时排除单个或多个文件
tar zcf log.tar.gz --exclude=10.log --exclude=9.log opt/
注意事项:
使用tar 的--exclude 命令排除打包的时候,不能加“/”,否则还是会把logs目录以及其下的文件打包进去。
#错误写法
tar -zcvf BenchmarkSQL.tar.gz --exclude=benchmarksql-5.0/logs/ benchmarksql-5.0
#正确写法
tar -zcvf BenchmarkSQL.tar.gz --exclude=benchmarksql-5.0/logs benchmarksql-5.0
练习题
1.如何使用gzip命令对文件进行压缩、解压
压缩:gzip 文件名
解压:gzip -d 文件名
2.如何用zip命令对文件以及目录进行压缩、解压
压缩:zip 压缩包名 文件名 目录压缩:zip -r 压缩包名 目录名
解压:unzip 压缩包名
3.创建一个自己名字的文件至/opt目录
touch /opt/ljy
4.打包opt整个目录,并命名test_opt.tar.gz
cd /
tar zcf test_opt.tar.gz opt
5.查看打包好的test_opt.tar.gz里的文件
tar tf test_opt.tar.gz
6.将打包好的test_opt.tar.gz内容指定解压至/tmp目录
tar xf test_opt.tar.gz -C /tmp
7.打包etc目录下的所有文件,不要目录只要文件
cd /
find /etc ! -type d |xargs -exec tar zcf etc.tar.gz {} \;
检查:tar tf etc.tar.gz |xargs -i find {} -type d
8.打包etc目录下的所有文件,排除passwd,shadow
cd /
tar zcf etc_no.tar.gz --exclude=etc/passwd --exclude=etc/shadow etc
检查:[root@localhost /]# tar tf etc_no.tar.gz |grep -E 'passwd|shadow'
9.打包etc目录下的所有以p开头的文件
find /etc -type f -name 'p*'|xargs -exec tar zcf etc_p*.tar.gz {} \;
10.打包etc目录下所有大于1M的文件
find /etc -type f -size +1M |xargs -exec tar zcf etc_1M.tar.gz {} \;