压缩的概念
什么是压缩包?
就是一个特殊的文件,将多个文件或者目录压缩成一个特殊的文件
为什么要用压缩包?
减少占用的空间
加快传输的速度
windows:
.zip .rar
linux:
.zip .gz .tar.gz
Linux中压缩包的类型如下
.zip
.gz
.bz2
.tar.gz
.tar.bz2
zip命令
可以对文件和目录进行打包,需要指定压缩包的名称
yum install -y zip unzip
zip
选项:
-r
-q
unzip
选项:
-l
-q
-d
[ root@zzc ~]
total 656
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
[ root@zzc ~]
adding: services ( deflated 80%)
[ root@zzc ~]
total 792
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
-rw-r--r-- 1 root root 136227 Jul 29 09:06 services.zip
[ root@zzc ~]
adding: etc/ ( stored 0%)
[ root@zzc ~]
total 796
-rw-r--r-- 1 root root 158 Jul 29 09:07 etc.zip
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
-rw-r--r-- 1 root root 136227 Jul 29 09:06 services.zip
[ root@zzc ~]
Archive: etc.zip
Length Date Time Name
--------- ---------- ----- ----
0 07-29-2020 08:56 etc/
--------- -------
0 1 file
[ root@zzc ~]
Archive: etc.zip
creating: etc/
[ root@zzc ~]
total 796
drwxr-xr-x 2 root root 6 Jul 29 08:56 etc
-rw-r--r-- 1 root root 158 Jul 29 09:07 etc.zip
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
-rw-r--r-- 1 root root 136227 Jul 29 09:06 services.zip
[ root@zzc ~]
total 0
[ root@zzc ~]
[ root@zzc ~]
total 13M
-rw-r--r-- 1 root root 12M Jul 29 09:10 etc.zip
-rw-r--r-- 1 root root 655K Jul 29 08:45 services
-rw-r--r-- 1 root root 134K Jul 29 09:06 services.zip
[ root@zzc ~]
31M /etc
[ root@zzc ~]
[ root@zzc ~]
[ root@zzc ~]
total 24976
-rw-r--r-- 1 root root 12380952 Jul 29 09:13 etc1.zip
-rw-r--r-- 1 root root 12380952 Jul 29 09:10 etc.zip
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
-rw-r--r-- 1 root root 136227 Jul 29 09:06 services.zip
[ root@zzc ~]
[ root@zzc ~]
[ root@zzc ~]
total 12
drwxr-xr-x 85 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 0 Jul 28 12:09 file9
gzip命令
gzip
选项:
-d
-r
[ root@zzc ~]
total 656
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
[ root@zzc ~]
[ root@zzc ~]
total 136
-rw-r--r-- 1 root root 136088 Jul 29 08:45 services.gz
[ root@zzc ~]
[ root@zzc ~]
[ root@zzc ~]
total 656
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
[ root@zzc ~]
[ root@zzc ~]
bzip2命令
bzip2
选项:
-d
yum install -y bzip2
[ root@zzc ~]
[ root@zzc ~]
total 124
-rw-r--r-- 1 root root 123932 Jul 29 08:45 services.bz2
[ root@zzc ~]
[ root@zzc ~]
total 656
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
[ root@zzc ~]
tar命令
不负责压缩,只负责归档打包
选项:
z
j
J
c
v
f
czf
cjf
cJf
t
tf
x
xf
-C
h
P
X
--exclude=
--exclude-from=
[ root@zzc ~]
total 656
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
[ root@zzc ~]
[ root@zzc ~]
total 792
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
[ root@zzc ~]
[ root@zzc ~]
total 916
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 124166 Jul 29 09:48 services.tar.bz2
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
[ root@zzc ~]
[ root@zzc ~]
total 1016
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 124166 Jul 29 09:48 services.tar.bz2
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
-rw-r--r-- 1 root root 100640 Jul 29 09:49 services.tar.xz
[ root@zzc ~]
tar: Removing leading ` /' from member names
[ root@zzc ~] # ll
total 10952
-rw-r--r-- 1 root root 10171684 Jul 29 09:56 etc.tar.gz
[ root@zzc ~] # tar tf services.tar.gz
services
[ root@zzc ~] # tar xf services.tar.gz
[ root@zzc ~] # ll
total 10952
-rw-r--r-- 1 root root 10171684 Jul 29 09:56 etc.tar.gz
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 124166 Jul 29 09:48 services.tar.bz2
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
-rw-r--r-- 1 root root 100640 Jul 29 09:49 services.tar.xz
[ root@zzc ~] # tar xf etc.tar.gz
[ root@zzc ~] # ll
total 10964
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 09:56 etc.tar.gz
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 124166 Jul 29 09:48 services.tar.bz2
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
-rw-r--r-- 1 root root 100640 Jul 29 09:49 services.tar.xz
[ root@zzc ~] # tar cjf etc.tar.bz2 /etc
tar: Removing leading ` /' from member names
[root@zzc ~]# tar cJf etc.tar.xz /etc
tar: Removing leading ` /' from member names
[ root@zzc ~] # ll
total 26808
-rw-r--r-- 1 root root 8994047 Jul 29 10:01 etc.tar.bz2
-rw-r--r-- 1 root root 10171684 Jul 29 09:56 etc.tar.gz
-rw-r--r-- 1 root root 7238084 Jul 29 10:01 etc.tar.xz
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 124166 Jul 29 09:48 services.tar.bz2
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
-rw-r--r-- 1 root root 100640 Jul 29 09:49 services.tar.xz
#解压的时候,自动识别压缩包的格式
[ root@zzc ~] # tar xf etc.tar.bz2
[ root@zzc ~] # ll
total 26820
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 8994047 Jul 29 10:01 etc.tar.bz2
-rw-r--r-- 1 root root 10171684 Jul 29 09:56 etc.tar.gz
-rw-r--r-- 1 root root 7238084 Jul 29 10:01 etc.tar.xz
#解压文件到指定目录
[ root@zzc ~] # tar xf etc.tar.gz -C /opt/
[ root@zzc ~] # ll /opt/
total 668
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
#显示打包的过程
[ root@zzc ~] # tar czvf etc.tar.gz /etc
#显示解压过程
[ root@zzc ~] # tar xvf etc.tar.gz
[ root@zzc ~] # ll /bin -d
lrwxrwxrwx. 1 root root 7 Jul 6 02:13 /bin -> usr/bin
[ root@zzc ~] # tar czf bin.tar.gz /bin
tar: Removing leading ` /' from member names
[ root@zzc ~]
total 9952
-rw-r--r-- 1 root root 110 Jul 29 10:14 bin.tar.gz
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 10:04 etc.tar.gz
[ root@zzc ~] # tar xf bin.tar.gz
[ root@zzc ~] # ll
total 9952
lrwxrwxrwx 1 root root 7 Jul 6 02:13 bin -> usr/bin
-rw-r--r-- 1 root root 110 Jul 29 10:14 bin.tar.gz
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 10:04 etc.tar.gz
#打包软链接的真实路径
[ root@zzc ~] # tar czhf bin1.tar.gz /bin
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from hard link targets
[root@zzc ~]# ll
total 36880
lrwxrwxrwx 1 root root 7 Jul 6 02:13 bin -> usr/bin
-rw-r--r-- 1 root root 27573768 Jul 29 10:16 bin1.tar.gz
-rw-r--r-- 1 root root 110 Jul 29 10:14 bin.tar.gz
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 10:04 etc.tar.gz
#打包的时候有个删根的操作 怎么避免这个删根的操作
#第一种 使用相对路径打包
[root@zzc ~]# cd /
[root@zzc /]# tar czf /root/etc1.tar.gz etc
[root@zzc /]# ll /root
total 46852
dr-xr-xr-x 2 root root 20480 Jul 29 08:58 bin
-rw-r--r-- 1 root root 27573768 Jul 29 10:16 bin1.tar.gz
-rw-r--r-- 1 root root 110 Jul 29 10:14 bin.tar.gz
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 10:19 etc1.tar.gz
-rw-r--r-- 1 root root 10171684 Jul 29 10:04 etc.tar.gz
#真实打包场景
[root@zzc ~]# cd / && tar czf /root/etc3.tar.gz etc && cd -
/root
[root@zzc ~]# ll
total 581012
dr-xr-xr-x 2 root root 20480 Jul 29 08:58 bin
-rw-r--r-- 1 root root 27573768 Jul 29 10:16 bin1.tar.gz
-rw-r--r-- 1 root root 110 Jul 29 10:14 bin.tar.gz
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 10:19 etc1.tar.gz
-rw-r--r-- 1 root root 347209728 Jul 29 10:22 etc2.tar.gz
-rw-r--r-- 1 root root 10171684 Jul 29 10:22 etc3.tar.gz
#第二种方法 使用绝对路径打包 告诉系统不要删根
#使用绝对路径打包
[root@zzc ~]# tar czPf etc4.tar.gz /etc
#使用绝对路经解压
[root@zzc ~]# tar xPf etc4.tar.gz
[root@zzc ~]# cat /etc/services >> /opt/services
[root@zzc ~]# ll /opt/
total 1744
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 158 Jul 29 10:28 hosts
-rw-r--r-- 1 root root 1340586 Jul 29 10:29 services
[root@zzc ~]# tar xPf opt.tar.gz
[root@zzc ~]# ll /opt/
total 672
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 158 Jul 29 10:28 hosts
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
#排除不需要打包的文件
[root@zzc ~]# tar czf etc1.tar.gz /etc
tar: Removing leading ` /' from member names
[ root@zzc ~] # ll
total 9936
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
[ root@zzc ~] # ll /etc/services
-rw-r--r-- 1 root root 670293 Jun 7 2013 /etc/services
[ root@zzc ~] # tar czf etc2.tar.gz --exclude= /etc/services /etc
tar: Removing leading ` /' from member names
[ root@zzc ~]
total 19740
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
-rw-r--r-- 1 root root 10036635 Jul 29 10:52 etc2.tar.gz
[ root@zzc ~] # tar tf etc2.tar.gz | grep services
etc/firewalld/services/
#排除多个文件
[ root@zzc ~] # tar czf etc3.tar.gz --exclude= /etc/services --exclude= /etc/passwd /etc
tar: Removing leading ` /' from member names
[root@zzc ~]# ll
total 29544
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
-rw-r--r-- 1 root root 10036635 Jul 29 10:52 etc2.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:54 etc3.tar.gz
[root@zzc ~]# tar tf etc3.tar.gz | grep -E ' services| passwd'
etc/security/opasswd
etc/passwd-
etc/pam.d/passwd
etc/firewalld/services/
[ root@zzc ~] # tar czf etc4.tar.gz --exclude= /etc/{ services,passwd} /etc
tar: Removing leading ` /' from member names
[root@zzc ~]# ll
total 39348
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
-rw-r--r-- 1 root root 10036635 Jul 29 10:52 etc2.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:54 etc3.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:55 etc4.tar.gz
[root@zzc ~]# cat paichu.list
/etc/fstab
/etc/group
/etc/hosts
/etc/passwd
/etc/services
[root@zzc ~]# tar czfX etc5.tar.gz paichu.list /etc
tar: Removing leading ` /' from member names
[root@zzc ~]# ll
total 49152
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
-rw-r--r-- 1 root root 10036635 Jul 29 10:52 etc2.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:54 etc3.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:55 etc4.tar.gz
-rw-r--r-- 1 root root 10033927 Jul 29 10:58 etc5.tar.gz
-rw-r--r-- 1 root root 59 Jul 29 10:57 paichu.list
[root@zzc ~]# tar tf etc5.tar.gz | grep -Ew ' fstab| group| hosts| passwd | services'
etc/security/group.conf
etc/group-
etc/passwd-
etc/hosts.allow
etc/hosts.deny
etc/pam.d/passwd
etc/iproute2/group
etc/firewalld/services/
[ root@zzc ~] # tar czf etc6.tar.gz --exclude-from= paichu.list /etc
tar: Removing leading ` /' from member names
[ root@zzc ~]
total 58952
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
-rw-r--r-- 1 root root 10036635 Jul 29 10:52 etc2.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:54 etc3.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:55 etc4.tar.gz
-rw-r--r-- 1 root root 10033927 Jul 29 10:58 etc5.tar.gz
-rw-r--r-- 1 root root 10033927 Jul 29 11:01 etc6.tar.gz
-rw-r--r-- 1 root root 59 Jul 29 10:57 paichu.list
tar命令与find结合
[ root@zzc ~]
tar: Removing leading ` /' from member names
[ root@zzc ~] # tar czf log2.tar.gz $( find /var/log/ -type f -name "*.log" )
tar: Removing leading ` /' from member names
#当使用-exec时,把find查找的文件是进行一个个赋值给{}的
[root@zzc ~]# find /var/log/ -type f -name "*.log" -exec tar czf log3.tar.gz {} \;
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from member names
[ root@zzc ~]
var/log/vmware-network.4.log
[ root@zzc ~] # find /var/log/ -type f -name "*.log" | tail -1
/var/log/vmware-network.4.log
#xargs 把find命令查找出来的文件统一的赋值给了后面
[ root@zzc ~] # find /var/log/ -type f -name "*.log" | xargs tar czf log4.tar.gz
tar: Removing leading `/' from member names
[ root@zzc ~]
total 916
-rw-r--r-- 1 root root 309155 Jul 29 11:09 log1.tar.gz
-rw-r--r-- 1 root root 309155 Jul 29 11:09 log2.tar.gz
-rw-r--r-- 1 root root 356 Jul 29 11:10 log3.tar.gz
-rw-r--r-- 1 root root 309155 Jul 29 11:10 log4.tar.gz
[ root@zzc ~]
var/log/tuned/tuned.log
var/log/audit/audit.log
var/log/anaconda/anaconda.log
var/log/anaconda/X.log
var/log/anaconda/program.log
var/log/anaconda/packaging.log
var/log/anaconda/storage.log
var/log/anaconda/ifcfg.log
var/log/anaconda/ks-script-3PCKae.log
var/log/anaconda/journal.log
var/log/boot.log
var/log/vmware-vmsvc.log
var/log/vmware-network.8.log
var/log/vmware-network.5.log
var/log/vmware-network.2.log
var/log/vmware-network.7.log
var/log/vmware-network.4.log
var/log/vmware-network.1.log
var/log/test.log
var/log/yum.log
var/log/vmware-network.9.log
var/log/nginx/error.log
var/log/nginx/access.log
var/log/vmware-network.6.log
var/log/vmware-network.3.log
var/log/vmware-network.log
[ root@zzc ~]
var/log/vmware-network.log