1. 程式人生 > 實用技巧 >第十八章 Linux中打包壓縮zip,tar命令

第十八章 Linux中打包壓縮zip,tar命令

打包壓縮

什麼是壓縮包 
#單個檔案或者多個組成一個特殊的檔案,就是壓縮包

為什麼要使用壓縮包
#減少了磁碟空間
#加快了網路傳輸

壓縮包的型別


windows 壓縮包 zip rar (linux不支援)

linux zip gz tar.gz tar.bz2 tar.xz

壓縮包格式 壓縮包工具

.zip 使用zip工具打包 unzip解壓,需要指定壓縮包名

.gz 使用gzip格式進行壓縮,會刪除原始檔, gzip,預設不支援壓縮目錄

.bz2 使用bzip2格式進行壓縮,會刪除原始檔,bzip2解壓 unbzip2,預設不支援壓縮目錄

.tar.gz 先使用tar命令進行打包,使用gzip格式進行壓縮

.tar.bz2 先使用tar命令進行打包, 使用bzip2格式進行壓縮

.tar.xz 先使用tar命令進行打包,使用xz壓縮方式

如果希望windows的軟體能被linux解壓,或者linux的軟體包被windows能識別,選擇zip

Zip壓縮

總結:
	zip		打包壓縮 
		-r		#遞迴打包,打包目錄
		-q		#打包的時候不顯示打包過程 
		
	unzip	 解壓.zip格式壓縮包
		-q		#解壓的時候,不顯示解壓的過程
		-l		#顯示壓縮包的列表資訊
		-d		#解壓到指定的目錄中  

#下載安裝工具包
[root@lxy ~]# yum install  -y  zip  unzip
[root@lxy ~]# #zip   壓縮包名     原始檔 
[root@lxy ~]# zip    services.zip   services 
  adding: services (deflated 80%)
[root@lxy ~]# ll
total 796
-rw-------. 1 root root   1429 Nov 26 20:28 anaconda-ks.cfg
-rw-r--r--. 1 root root 670293 Dec 24 18:42 services
-rw-r--r--. 1 root root 136227 Dec 24 18:44 services.zip

 		
zip使用
[root@lxy ~]# zcat  services.zip		#檢視zip格式的壓縮檔案
[root@lxy ~]# unzip  services.zip		#解壓,預設解壓到當前目錄
[root@lxy ~]# zip  -r   etc.zip  /etc		#打包目錄  
[root@lxy ~]# zip  -rq   etc.zip  /etc		#打包的時候不顯示打包過程 
[root@lxy ~]# unzip -q  etc.zip			#解壓的時候不顯示解壓過程 
[root@lxy ~]# unzip -l  etc.zip 		#檢視壓縮包中的列表資訊  
[root@lxy ~]# unzip  -q  etc.zip  -d  /opt/		#解壓到指定的目錄 

Gzip壓縮

總結:  
gzip #壓縮檔案,不能壓縮目錄

-d #解壓
-r #壓縮目錄下的所有檔案
-rd #解壓目錄下的所有壓縮檔案

zcat #檢視gzip格式的壓縮檔案

gzip使用
[root@lxy ~]# #gzip   原始檔
 
[root@lxy ~]# gzip  services
[root@lxy ~]# ll
total 13064
-rw-------.  1 root root     1429 Nov 26 20:28 anaconda-ks.cfg
drwxr-xr-x. 88 root root     8192 Dec 23 16:59 etc
-rw-r--r--.  1 root root 12410225 Dec 24 18:50 etc.zip
-rw-r--r--.  1 root root   670293 Dec 24 18:42 server
-rw-r--r--.  1 root root   136088 Dec 24 18:42 services.gz

[root@lxy ~]# zcat  services.gz


[root@lxy ~]# gzip   -d  services.gz 		#解壓  
[root@lxy ~]# ll
total 13584
-rw-------.  1 root root     1429 Nov 26 20:28 anaconda-ks.cfg
drwxr-xr-x. 88 root root     8192 Dec 23 16:59 etc
-rw-r--r--.  1 root root 12410225 Dec 24 18:50 etc.zip
-rw-r--r--.  1 root root   670293 Dec 24 18:42 server
-rw-r--r--.  1 root root   670293 Dec 24 18:42 services

[root@lxy ~]# gzip  -r  etc			#壓縮目錄中的所有檔案  
[root@lxy ~]# gzip  -rd  etc		#解壓整個目錄的壓縮檔案 


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

[root@lxy ~]# bzip2   services
[root@lxy ~]# ll
total 13052
-rw-------.  1 root root     1429 Nov 26 20:28 anaconda-ks.cfg
drwxr-xr-x. 88 root root     8192 Dec 24 19:06 etc
-rw-r--r--.  1 root root 12410225 Dec 24 18:50 etc.zip
-rw-r--r--.  1 root root   670293 Dec 24 18:42 server
-rw-r--r--.  1 root root   123932 Dec 24 18:42 services.bz2

[root@lxy ~]# bzcat   services.bz2

[root@lxy ~]# bzip2 -d  services.bz2 
[root@lxy ~]# ll
total 13584
-rw-------.  1 root root     1429 Nov 26 20:28 anaconda-ks.cfg
drwxr-xr-x. 88 root root     8192 Dec 24 19:06 etc
-rw-r--r--.  1 root root 12410225 Dec 24 18:50 etc.zip
-rw-r--r--.  1 root root   670293 Dec 24 18:42 server
-rw-r--r--.  1 root root   670293 Dec 24 18:42 services

Tar命令

tar		打包的命令  
	c	建立包  
	z	使用gzip格式壓縮
	j	使用bzip2格式壓縮
	J	使用xz格式壓縮
	f	指定壓縮包的名稱
	v	顯示打包的過程
	
	czf			#打包使用gzip壓縮
	cjf			#打包使用bzip2格式壓縮
	cJf			#打包使用xz格式壓縮
	t			#顯示壓縮包列表,自動識別壓縮包格式
	tf			#
	x			#解壓 ,自動識別壓縮包格式 覆蓋原壓縮包
	xf

	P			#使用絕對路徑打包 
    h			#打包軟連線的真實檔案資料
	-C			#解壓到指定的目錄  
	X			#指定排除列表檔案
	--exclude=		#排除指定的檔案
	--exclude-from=		#指定排除的列表檔案


[root@lxy ~]# tar  czf  service.tar.gz   services 
[root@lxy ~]# ll
total 792
-rw-r--r--. 1 root root 670293 Dec 24 19:35 services
-rw-r--r--. 1 root root 136197 Dec 24 19:35 service.tar.gz

[root@lxy ~]# tar  cjf  service.tar.bz2  services
[root@lxy ~]# ll
total 916
-rw-r--r--. 1 root root 670293 Dec 24 19:35 services
-rw-r--r--. 1 root root 123925 Dec 24 19:36 service.tar.bz2
-rw-r--r--. 1 root root 136197 Dec 24 19:35 service.tar.gz
[root@lxy ~]# tar  cJf  service.tar.xz  services
[root@lxy ~]# ll
total 1016
-rw-r--r--. 1 root root 670293 Dec 24 19:35 services
-rw-r--r--. 1 root root 123925 Dec 24 19:36 service.tar.bz2
-rw-r--r--. 1 root root 136197 Dec 24 19:35 service.tar.gz
-rw-r--r--. 1 root root 100680 Dec 24 19:37 service.tar.xz

[root@lxy ~]# tar  tf  service.tar.gz 
services

[root@lxy ~]# tar  tf  service.tar.bz2 
services
[root@lxy ~]# tar  tf  service.tar.xz
services

[root@lxy ~]# tar xf   service.tar.gz 
[root@lxy ~]# ll
total 1016
-rw-r--r--. 1 root root 670293 Dec 24 19:35 services
-rw-r--r--. 1 root root 123925 Dec 24 19:36 service.tar.bz2
-rw-r--r--. 1 root root 136197 Dec 24 19:35 service.tar.gz
-rw-r--r--. 1 root root 100680 Dec 24 19:37 service.tar.xz

[root@lxy ~]# tar  xf  service.tar.bz2 
[root@lxy ~]# ll
total 1016
-rw-r--r--. 1 root root 670293 Dec 24 19:35 services
-rw-r--r--. 1 root root 123925 Dec 24 19:36 service.tar.bz2
-rw-r--r--. 1 root root 136197 Dec 24 19:35 service.tar.gz
-rw-r--r--. 1 root root 100680 Dec 24 19:37 service.tar.xz
[root@lxy ~]# rm -f  services
[root@lxy ~]# tar  xf  service.tar.xz 
[root@lxy ~]# ll
total 1016
-rw-r--r--. 1 root root 670293 Dec 24 19:35 services
-rw-r--r--. 1 root root 123925 Dec 24 19:36 service.tar.bz2
-rw-r--r--. 1 root root 136197 Dec 24 19:35 service.tar.gz
-rw-r--r--. 1 root root 100680 Dec 24 19:37 service.tar.xz


[root@lxy ~]# tar  czf  etc.tar.gz  /etc/
tar: Removing leading `/' from member names		#刪跟的操作,不是報錯,防止解壓的時候覆蓋原始檔檔案
[root@lxy ~]# ll
total 9960
-rw-r--r--. 1 root root 10196757 Dec 24 19:43 etc.tar.gz

[root@lxy ~]# tar  xf  etc.tar.gz 		#解壓到當前目錄  
[root@lxy ~]# ll
total 9972
drwxr-xr-x. 80 root root     8192 Dec 23 16:59 etc
-rw-r--r--.  1 root root 10196757 Dec 24 19:43 etc.tar.gz


解決刪跟問題
#解決刪根

第一種方法:

進入根目錄進行打包 ,使用相對路徑打包 

[root@lxy ~]# cd  /  
[root@lxy /]# tar  czf  /root/etc-1.tar.gz    etc
[root@lxy /]# ll /root/
total 19932
drwxr-xr-x. 80 root root     8192 Dec 23 16:59 etc
-rw-r--r--.  1 root root 10196757 Dec 24 19:47 etc-1.tar.gz
-rw-r--r--.  1 root root 10196757 Dec 24 19:43 etc.tar.gz

#第二種方法:

使用P選項 


[root@lxy ~]# tar  czPf  etc-2.tar.gz  /etc

[root@lxy ~]# tar xf  etc-2.tar.gz 			#解壓的時候進行刪根操作,主要是做一個保護機制
tar: Removing leading `/' from member names


解壓到指定目錄
#解壓到指定的目錄中
[root@lxy ~]# tar  xf  etc.tar.gz   -C  /opt/
[root@lxy ~]# ll /opt/
total 12
drwxr-xr-x. 80 root root 8192 Dec 23 16:59 etc



[root@lxy ~]#   ll  /etc/grub2.cfg 
lrwxrwxrwx. 1 root root 22 Nov 26 20:23 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
[root@lxy ~]# tar  czf  grub.tar.gz  /etc/grub2.cfg
tar: Removing leading `/' from member names
[root@lxy ~]# tar xf  grub.tar.gz 
[root@lxy ~]# ll
total 29884
drwxr-xr-x. 2 root root       23 Dec 24 19:55 etc
-rw-r--r--. 1 root root 10196757 Dec 24 19:48 etc-1.tar.gz
-rw-r--r--. 1 root root 10196675 Dec 24 19:49 etc-2.tar.gz
-rw-r--r--. 1 root root 10196757 Dec 24 19:43 etc.tar.gz
-rw-r--r--. 1 root root      124 Dec 24 19:54 grub.tar.gz
[root@lxy ~]# ll etc
total 0
lrwxrwxrwx. 1 root root 22 Nov 26 20:23 grub2.cfg -> ../boot/grub2/grub.cfg


打包軟連線檔案
#打包軟連線檔案  
[root@lxy ~]# tar  czhf  grub-1.tar.gz   /etc/grub2.cfg 
tar: Removing leading `/' from member names
[root@lxy ~]# ll
total 29888
-rw-r--r--. 1 root root 10196757 Dec 24 19:48 etc-1.tar.gz
-rw-r--r--. 1 root root 10196675 Dec 24 19:49 etc-2.tar.gz
-rw-r--r--. 1 root root 10196757 Dec 24 19:43 etc.tar.gz
-rw-r--r--. 1 root root     1466 Dec 24 19:56 grub-1.tar.gz
-rw-r--r--. 1 root root      124 Dec 24 19:54 grub.tar.gz
[root@lxy ~]# tar xf  grub-1.tar.gz 
[root@lxy ~]# ll  etc
total 8
-rw-r--r--. 1 root root 4229 Nov 26 20:28 grub2.cfg


排除檔案
#排除檔案  

第一種方法:


[root@lxy ~]# ll
total 9960
-rw-r--r--. 1 root root 10196844 Dec 24 19:59 etc-1.tar.gz
[root@lxy ~]# tar  czf  etc-2.tar.gz  --exclude=/etc/services   /etc
tar: Removing leading `/' from member names
[root@lxy ~]# ll
total 19788
-rw-r--r--. 1 root root 10196844 Dec 24 19:59 etc-1.tar.gz
-rw-r--r--. 1 root root 10061840 Dec 24 20:00 etc-2.tar.gz
[root@lxy ~]# tar  tf  etc-2.tar.gz  |grep  services
etc/firewalld/services/

#排除多個檔案 
[root@lxy ~]# tar  czf  etc-3.tar.gz  --exclude=/etc/{passwd,services,shadow}   /etc
tar: Removing leading `/' from member names
[root@lxy ~]# ll
total 29616
-rw-r--r--. 1 root root 10196844 Dec 24 19:59 etc-1.tar.gz
-rw-r--r--. 1 root root 10061840 Dec 24 20:00 etc-2.tar.gz
-rw-r--r--. 1 root root 10061136 Dec 24 20:02 etc-3.tar.gz
[root@lxy ~]# tar  tf  etc-3.tar.gz  |grep  -E 'services|passwd|shadow'
etc/security/opasswd
etc/gshadow-
etc/passwd-
etc/gshadow
etc/shadow-
etc/pam.d/passwd
etc/firewalld/services/

#排除兩個不同路徑的檔案
[root@lxy ~]# tar  czf  etc-4.tar.gz  --exclude=/etc/services --exclude=/etc/firewalld/services   /etc
tar: Removing leading `/' from member names
[root@lxy ~]# ll
total 39444
-rw-r--r--. 1 root root 10196844 Dec 24 19:59 etc-1.tar.gz
-rw-r--r--. 1 root root 10061840 Dec 24 20:00 etc-2.tar.gz
-rw-r--r--. 1 root root 10061136 Dec 24 20:02 etc-3.tar.gz
-rw-r--r--. 1 root root 10061821 Dec 24 20:04 etc-4.tar.gz
[root@lxy ~]# tar  tf  etc-4.tar.gz  |grep   'services'


#根據排除列表進行排除檔案

[root@lxy ~]# cat paichu.list
/etc/services
/etc/passwd
/etc/sysconfig/network-scripts
/etc/hosts
 
[root@lxy ~]# tar  czf   etc-5.tar.gz   --exclude-from=paichu.list   /etc
tar: Removing leading `/' from member names

[root@lxy ~]# tar  tf  etc-5.tar.gz  |grep  -E 'services|passwd|network-scripts|hosts'
etc/security/opasswd
etc/passwd-
etc/hosts.allow
etc/hosts.deny
etc/pam.d/passwd
etc/selinux/targeted/active/modules/100/denyhosts/
etc/selinux/targeted/active/modules/100/denyhosts/cil
etc/selinux/targeted/active/modules/100/denyhosts/hll
etc/selinux/targeted/active/modules/100/denyhosts/lang_ext
etc/firewalld/services/

第二種方法:

壓縮包名要跟f選項對應    X要跟排除列表檔案對應
[root@lxy ~]# tar  czfX   etc-6.tar.gz  paichu.list   /etc
tar: Removing leading `/' from member names

[root@lxy ~]# tar  tf  etc-6.tar.gz  |grep  -E 'services|passwd|network-scripts|hosts'
etc/security/opasswd
etc/passwd-
etc/hosts.allow
etc/hosts.deny
etc/pam.d/passwd
etc/selinux/targeted/active/modules/100/denyhosts/
etc/selinux/targeted/active/modules/100/denyhosts/cil
etc/selinux/targeted/active/modules/100/denyhosts/hll
etc/selinux/targeted/active/modules/100/denyhosts/lang_ext
etc/firewalld/services/

時間的命令

#顯示當前時間命令

[root@lxy ~]# date
Tue Dec 24 20:16:20 CST 2019

[root@lxy ~]# date  +%F		#顯示當前日期
2019-12-24
[root@lxy ~]# date  +%T		#顯示當前時間
20:17:52
[root@lxy ~]# date +%Y-%m-%d	#顯示當前日期
2019-12-24
[root@lxy ~]# date +%y-%m-%d	#顯示當前日期,沒有顯示世紀
19-12-24

[root@lxy ~]# date +%H:%M:%S		#顯示時分秒 
20:20:18

[root@lxy ~]# date +%s		#時間戳,距離1970年1月1日0點0分0秒,過了多少秒
1577190037


[root@lxy ~]# date +%w		#周幾
2
[root@lxy ~]# date +%W		#今年的第幾周
51
[root@lxy ~]# date +%j		#幾年的第幾天
358


-d		#根據自己的要求顯示時間,而不是修改時間  


[root@lxy ~]# date +%F
2019-12-24
[root@lxy ~]# date -d  "+1 day"  +%F
2019-12-25
[root@lxy ~]# date +%F
2019-12-24
[root@lxy ~]# date -d  "-1 day"  +%F
2019-12-23
[root@lxy ~]# date -d  "-1 year"  +%F
2018-12-24
[root@lxy ~]# date -d  "-1 month"  +%F
2019-11-24


-s			#修改時間   


[root@lxy ~]# date -s  20191001
Tue Oct  1 00:00:00 CST 2019
[root@lxy ~]# date  +%F
2019-10-01
[root@lxy ~]# date -s  2019/12/1
Sun Dec  1 00:00:00 CST 2019
[root@lxy ~]# date  +%F
2019-12-01
[root@lxy ~]# date -s  12:26:00
Sun Dec  1 12:26:00 CST 2019
[root@lxy ~]# date -s  "20191224 12:27:00"
Tue Dec 24 12:27:00 CST 2019
[root@lxy ~]# date +%F
2019-12-24
[root@lxy ~]# date 
Tue Dec 24 12:27:10 CST 2019

#怎麼同步系統的時間


[root@lxy ~]# yum install -y  ntpdate

[root@lxy ~]# ntpdate   ntp1.aliyun.com
24 Dec 12:29:02 ntpdate[8593]: step time server 120.25.115.20 offset 9203309.341117 sec
[root@lxy ~]# date
Tue Dec 24 12:29:34 CST 2019