压缩与打包

本文详细介绍Linux系统中常用的压缩与解压缩命令,包括zip、gzip、bzip2及tar等,涵盖各种压缩格式的使用方法,如.tar.gz、.tar.bz2和.xz,并深入解析如何利用这些命令进行高效的数据管理和传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

压缩的概念


什么是压缩包?

就是一个特殊的文件,将多个文件或者目录压缩成一个特殊的文件  


为什么要用压缩包?

	减少占用的空间  
	
	加快传输的速度


windows:

	.zip      .rar
	
linux:

	.zip	.gz    .tar.gz  	

#如果要想Windows和linux中的压缩包互相使用,建议使用.zip种类的压缩包 


Linux中压缩包的类型如下

.zip		#根据zip命令进行打包压缩的

.gz			#通过gzip命令进行压缩  只压缩文件,也会删除源文件 

.bz2		#通过bzip进行压缩, 只压缩文件,也会删除源文件

.tar.gz		#使用tar命令归档打包,然后使用gzip命令进行压缩 

.tar.bz2	#使用tar命令归档打包,然后使用bzip命令进行压缩  



zip命令



可以对文件和目录进行打包,需要指定压缩包的名称 

#zip压缩 unzip解压命令安装
yum install  -y  zip  unzip

zip		#压缩的命令

选项:

		-r		#压缩目录 
		
		-q		#静默输出,不显示压缩的过程 
		
		
unzip	#解压zip格式的压缩包

选项:

		-l		#查看压缩包中的列表信息 
		
		-q		#静默输出,不显示解压的过程
		
		-d		#指定解压的目录



[root@zzc ~]# ll
total 656
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services

#针对文件进行压缩打包 
[root@zzc ~]# zip  services.zip   services 
  adding: services (deflated 80%)
[root@zzc ~]# ll
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 ~]# zip  etc.zip  /etc
  adding: etc/ (stored 0%)
[root@zzc ~]# ll
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 ~]# unzip  -l  etc.zip 
Archive:  etc.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  07-29-2020 08:56   etc/
---------                     -------
        0                     1 file
[root@zzc ~]# unzip  etc.zip 
Archive:  etc.zip
   creating: etc/
[root@zzc ~]# ll
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 ~]# ll etc
total 0

[root@zzc ~]# zip  -r  etc.zip  /etc
[root@zzc ~]# ll -h
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 ~]# du -sh  /etc
31M	/etc


#查看压缩包里面的文件
[root@zzc ~]# unzip -l  etc.zip


#静默输出 
[root@zzc ~]# zip  -rq    etc1.zip  /etc
[root@zzc ~]# ll
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 ~]# unzip   etc.zip


#静默解压文件,将文件解压到指定的目录下面
[root@zzc ~]# unzip  -q  etc.zip   -d  /opt/
[root@zzc ~]# ll /opt/
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	#只能压缩文件,压缩文件的同时,会删除源文件,解压的时候,会删除压缩文件

#zcat命令查看gzip压缩的文件

选项:

	-d		#解压
	
	-r		#递归操作 
	

	
[root@zzc ~]# ll
total 656
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services

[root@zzc ~]# gzip   services 
[root@zzc ~]# ll
total 136
-rw-r--r-- 1 root root 136088 Jul 29 08:45 services.gz


#使用zcat命令查看gzip压缩的文件
[root@zzc ~]# zcat  services.gz


#解压 
[root@zzc ~]# gzip  -d  services.gz 
[root@zzc ~]# ll
total 656
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services


#将目录下的所有都进行压缩处理
[root@zzc ~]# gzip  -r   /etc


#解压目录下的所有压缩包 
[root@zzc ~]# gzip  -rd  /etc


bzip2命令


bzip2   #只能压缩文件,压缩文件的同时,会删除源文件,解压的时候,会删除压缩文件

#bzcat命令查看bz2压缩文件

选项:
  
  -d    #解压
  
  
#bzip2命令安装  
yum  install  -y  bzip2

#压缩
[root@zzc ~]# bzip2  services 
[root@zzc ~]# ll
total 124
-rw-r--r-- 1 root root 123932 Jul 29 08:45 services.bz2

#解压 
[root@zzc ~]# bzip2  -d  services.bz2 
[root@zzc ~]# ll
total 656
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services


#查看bzip2压缩的文件
[root@zzc ~]# bzcat   services.bz2 


tar命令


不负责压缩,只负责归档打包


选项:

	z		#使用gzip格式进行压缩
	
	j		# 使用bzip2格式进行压缩    了解
	
	J		#使用xz格式进行压缩       了解 
	
	c		#创建压缩包 
	
	v		#显示过程 
	
	f		#指定压缩包的名称 
	
	
	czf		#打包压缩  tar.gz格式的压缩包 
	
	cjf		#打包压缩 tar.bz2格式的压缩包 		了解
	
	cJf		#打包压缩 tar.xz格式的压缩包 		了解 
	
	t		#查看压缩中的内容 
	
	tf		#指定要查看压缩包的内容
	
	x		#解压
	
	xf		#解压指定的压缩包 
	
	-C		#解压到指定的目录 
	
	h		#打包软连接的真实路径
	
	P		#使用绝对路径打包 
	
	X		#指定排除文件的列表文件
	
	--exclude=		#指定排除的文件
	
	--exclude-from=		#指定排除文件的列表
	
	
	
[root@zzc ~]# ll
total 656
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
[root@zzc ~]# tar  czf  services.tar.gz   services 
[root@zzc ~]# ll
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 ~]# tar  cjf  services.tar.bz2  services
[root@zzc ~]# ll
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 ~]# tar  cJf  services.tar.xz  services
[root@zzc ~]# ll
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  czf  etc.tar.gz   /etc
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 ~]# ll
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 ~]# ll
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 ~]# ll
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  czf  log1.tar.gz   `find  /var/log/  -type f  -name "*.log"`
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 ~]# tar tf log3.tar.gz 
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 ~]# ll
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 ~]# tar tf  log1.tar.gz   
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 ~]# tar tf  log3.tar.gz   
var/log/vmware-network.log



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值