Linux文件打包与压缩

1. 什么是打包压缩?

打包压缩指的是将多个文件和目录合并为⼀个特殊文件然后将该特殊文件进⾏压缩最终得到⼀个压缩包

2. 为什么使⽤压缩包 ?

减少占用的体积
加快网络的传输

3.为什么要打包?

单个文件可以压缩,但是一个文件夹不能直接压缩,需要先打包成一个特殊文件在压缩

4. 不同系统的压缩格式互通

  • 在 windows 系统下,我们接触最多的压缩格式是 rar 或 zip
  • 在 Linux 系统上使用最多的压缩格式是 zip 和 tar.gz
  • 在 Linux 上的压缩格式放在 windows 系统下都是可以正常打开的所以一般 Windows 和 Linux 互通通常选择 zip 格式。
  • 值得注意的是 Linux 不支持 Windows下的 RAR 格式的压缩文件
  • windows linux macos 同时支持 zip
  • tar.gz 属于linux系统特有一种格式;windows扔然可以识别并解压

5. Linux下常见的压缩包类型

格式压缩工具
.zipzip压缩工具
.gzgzip压缩工具,只能压缩文件,会删除原文件(通常配合tar使用)
.bz2bzip2压缩工具,只能压缩文件,会删除原文件(通常配合tar使用)
.tar.gz先使用tar命令归档打包,然后使用gzip压缩
.tar.bz2先使用tar命令归档打包,然后使用bzip2压缩

6. gzip

gzip 仅能压缩文件,并且打包后会删除源文件

[root@localhost ~]# yum install gzip -y
[root@localhost ~]# dd if=/dev/zero of=./file bs=100M count=1 # 创建一个file文件

压缩

[root@localhost ~]# gzip file  
[root@localhost ~]# ll   # 查看,发现已经删除了源文件生成了*.gz文件
total 100
-rw-r--r--. 1 root root 101796 Jul 28 17:36 file.gz
[root@localhost ~]# du -sh file.gz 
100K	file.gz
[root@localhost ~]# 

解压 gzip -d 压缩包

[root@localhost ~]# gzip -d file.gz 
[root@localhost ~]# ll
total 102400
-rw-r--r--. 1 root root 104857600 Jul 28 17:36 file
[root@localhost ~]# du -sh file 
100M	file
[root@localhost ~]# 

gzip 应用场景:
当需要让某个配置文件不生效时,且又不想删除

使默认的所有yum源不生效,可以删除、移走,也可以把它们都压缩

[root@localhost ~]# gzip /etc/yum.repos.d/*.repo

在不解压的情况下查看压缩包内容
zcat 压缩包名

[root@localhost ~]# zcat xxx.gz

7. bzip2

[root@localhost ~]# yum install bzip2 -y

用法与gzip一模一样
压缩 bzip2 文件名
解压 bzip2 -d 压缩包
不解压的情况下看 压缩包内容 bzcat 压缩包

8.zip

使用 zip 命令可以对文件或文件夹进行压缩打包,解压则需要使用 unzip 命令
默认最小化安装的操作系统,没有 zip 和 unzip 工具,所以需要安装

[root@localhost ~]# yum install zip unzip -y
  1. 压缩文件
    语法格式: zip xxx.zip 文件路径 文件路径2
    解释 xxx.zip 是压缩后的包名 ,一般都以.zip结尾。 可以同时打包多个文件
[root@localhost ~]# zip file.zip file 
  adding: file (deflated 100%)
[root@localhost ~]# ll
total 102500
-rw-r--r--. 1 root root 104857600 Jul 28 17:36 file
-rw-r--r--. 1 root root    101931 Jul 28 18:01 file.zip
[root@localhost ~]# 

  1. 打包压缩目录
    语法 :zip -r xxx.zip 目录1 目录2
    -r 表示递归打包,打包目录必须要跟上-r

    [root@localhost ~]# zip -r tmp.zip /tmp 
    
  2. 解压:unzip

    [root@localhost ~]# unzip tmp.zip  # 默认解压到当前目录
    

    解压到指定目录 -d

    [root@localhost ~]# unzip tmp.zip -d /opt
    
    

    不解压查看内容 -l

    [root@localhost ~]# unzip -l tmp.zip
    

    检查压缩包是否被破坏

    unzip -t
    

9. 文件或目录打包压缩 tar

语法: tar [-zjxcvfpP] filename
在这里插入图片描述

-c --create创建新的文档
-v --verbose 显示详细的tar处理的文件信息
-f --file 要操作的文件名
-x  --extract, --get 解压文件
-z --gzip, --gunzip, --ungzip      通过 gzip 来进行归档压缩
-j  --bzip2       通过 bzip2 来归档压缩文件
-t  --list 表示查看文件,查看文件中的文件内容
-C --directory=DIR       解压文件至指定的目录
-r --append 表示增加文件,把要增加的文件追加在压缩文件的末尾
-u --update   仅将较新的文件附加到存档中
-d --diff, --compare比较存档与当前文件的不同之处;--delete从存档中删除
-P  在打包过程中,取消移除根目录说明(默认打包如果不加-P会频繁提示)
-X   排除不需要的文件
--remove-files 压缩后删除原文件
--exclude 排除不需要压缩的目录或者文件

常见打包压缩组合命令
在这里插入图片描述
注意,一般推荐使用相对路径打包压缩,打包/ 下的目录,先切换到/ 下,然后使用相对路径,避免提示移除/ 的提醒。否则可以用-P 忽略提醒

1:将/etc/passwd压缩到/tmp/passwd.tar.gz
[root@localhost /]# tar czf  /tmp/passwd.tar.gz etc/passwd

例2:将/etc下,所有的普通文件打包成etc.tar.gz
[root@localhost tmp]# find /etc/ -type f -exec tar -czPvf etc.tar.gz {} \;
或:
[root@localhost /]# tar czf /tmp/etc.tar.gz $(find etc -type f)3:将/etc/passwd压缩到/tmp/passwd.tar.bz2
[root@localhost /]# tar cjf /tmp/passwd.tar.bz2 etc/passwd


例4:将/etc下,所有的普通文件打包成etc.tar.bz2
[root@localhost /]# find /etc/ -type f -exec tar -cjPf etc.tar.bz2 {} \;5:将第三题中的压缩包解压到当前目录下
[root@localhost tmp]# tar -xf etc.tar.gz 

例6:将etc.tar.gz解压到/tmp/test/目录下
[root@localhost etc]# tar -xf etc.tar.gz -C /tmp/test/

排除文件,并打包压缩
排除单个文件

[root@localhost /]# tar czf etc.tar.gz --exclude=etc/services etc/

排除多个文件

[root@localhost /]# tar czf etc.tar.gz --exclude=etc/services --exclude=etc/rc.local etc/

将需要排除的文件写入文件中

# 指定需要排除的文件列表, 最后进行打包压缩
[root@localhost /]# tar czfX etc.tar.gz paichu.list etc/
[root@localhost /]# cat paichu.list
etc/services
etc/rc.local
etc/rc.d/rc.local

查看文件不解压

[root@localhost /]# tar tf test.tar.gz

10.拓展 date

打包压缩通常用于备份文件,文件的名字必须见名知意且应该带上时间、主机名之类
时间命令date

#选项
​
-d         #根据你的描述显示日期
​[root@localhost /]# date -d "2021-10-12"

-s            #修改日期
​
%H         #小时,24小时制(00~23)
​
%M         #分钟(00~59)
​
%s         #从1970年1月1日00:00:00到目前经历的秒数
​
%S         #显示秒(00~59)
​
%T         #显示时间,24小时制(hh:mm:ss)
​
%d         #一个月的第几天(01~31)
​
%j         #一年的第几天(001~366)
​
%m         #月份(01~12)
​
%w         #一个星期的第几天(0代表星期天)
​
%W         #一年的第几个星期(00~53,星期一为第一天)
​
%y         #年的最后两个数字(1999则是99)
​
%Y         #年,实际
​
%F         #显示日期(%Y-%m-%d)
[root@localhost ~]# date
Wed Jul 28 19:55:48 CST 2021
[root@localhost ~]# date +%F
2021-07-28
[root@localhost ~]# date +%Y-%m-%d
2021-07-28
[root@localhost ~]# date +%y-%m-%d
21-07-28
[root@localhost ~]# date +%T
19:56:47
[root@localhost ~]# date +%H:%M:%S
19:57:00
[root@localhost ~]# date +%w
3
[root@localhost ~]# date +%s
1627473448
[root@localhost ~]# date +%d
28
[root@localhost ~]# date +%W
30
[root@localhost ~]# date +%j
209
[root@localhost ~]# date -d "-1 day" +%F
2021-07-27
[root@localhost ~]# date -d "1 day" +%F
2021-07-29
[root@localhost ~]# date -d "+1 day" +%F
2021-07-29
[root@localhost ~]# date -d "-3 month" +%F
2021-04-28
[root@localhost ~]# date -d "+3 years" +%F
2024-07-28
[root@localhost ~]# date -d "+3 hours" +%F
2021-07-28
[root@localhost ~]# date -d "+3 hours" +%T
22:59:49
[root@localhost ~]# date -d "+3 hours" +%F_%T
2021-07-28_23:00:13
[root@localhost ~]# date -s 20201111
Wed Nov 11 00:00:00 CST 2020
[root@localhost ~]# date
Wed Nov 11 00:00:04 CST 2020
[root@localhost ~]# date -s 11:11:11
Wed Nov 11 11:11:11 CST 2020
[root@localhost ~]# date -s "20201111 11:11:11"
Wed Nov 11 11:11:11 CST 2020
[root@localhost ~]#

备份:

[root@localhost ~]# tar czvf `date +%F`_bak.tar.gz /etc
[root@localhost ~]# tar czvf `date +%F_%H_%M_%S`_bak.tar.gz /etc  # 如果带有时分秒,不要用冒号分隔,因为文件名的命名里不能带有冒号
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值