檔案壓縮和解壓縮

Linux小菜鸟發表於2024-06-30

Linux檔案壓縮和解壓縮

  • 打包:就是把一堆檔案放在一起,並不會節省磁碟空間,僅僅是進行一個 歸類整理的過程
  • 壓縮:把一堆檔案放在一起,再進行壓縮,會節省磁碟空間

在Linux中存在如下幾種壓縮格式

  • .gzip(壓縮速度最快)
  • .bzip2
  • .xz(壓縮效果最好)

【1】tar命令

製作壓縮包(打包壓縮)

選項

  • -c:製作tar包
  • -f:指定tar包的名字,必須放在所有引數的最後面
  • -z:gzip壓縮格式
  • -j:bzip2壓縮格式
  • -J:xz壓縮格式
  • -C:在製作壓縮包的時候,-C引數,可以只壓縮指定的檔案,而不加上路徑
{24-05-28 23:37}bogon:/opt root# touch {1..3}.txt
{24-05-28 23:38}bogon:/opt root# ls
1.txt  2.txt  3.txt
{24-05-28 23:38}bogon:/opt root# tar -czf a.tar.gz *.txt
{24-05-28 23:38}bogon:/opt root# ls
1.txt  2.txt  3.txt  a.tar.gz
{24-05-28 23:39}bogon:/opt root# tar -cjf a.bz2 *.txt
{24-05-28 23:39}bogon:/opt root# tar -cJf a.xz  *.txt  
{24-05-28 23:40}bogon:/opt root# ls           
1.txt  2.txt  3.txt  a.bz2  a.tar.gz  a.xz

# 如果我們在壓縮的時候不加-C引數,那麼壓縮後的壓縮包裡存在這完整的路徑
{24-05-29 9:29}locahost:/opt root# tar -zcvf a.tar.gz /etc/sysconfig/network-scripts/ifcfg-ens33
{24-05-29 9:29}locahost:/opt root# ls
1.txt  2.txt  3.txt  a.tar.gz  qq
{24-05-29 9:29}locahost:/opt root# tar -tf a.tar.gz 
etc/sysconfig/network-scripts/ifcfg-ens33

# 如果我們在壓縮時加上了-C引數,那麼在就可以指定某一個路徑下的檔案,在壓縮後,壓縮檔案中就只會存在一個檔名字,而不是一個完整的路徑
{24-05-29 9:32}locahost:/opt root# tar -zcvf a.tar.gz -C  /etc/sysconfig/network-scripts/     ifcfg-ens33
ifcfg-ens33
{24-05-29 9:32}locahost:/opt root# tar -tf a.tar.gz                                                      
ifcfg-ens33
# 我們也可以一次性指定多個檔名

{24-05-29 9:33}locahost:/opt root# tar -zcvf a.tar.gz -C  /etc/  hosts passwd -C /etc/sysconfig/network-scripts/ ifcfg-ens33
hosts
passwd
ifcfg-ens33
  • -x:釋放包
  • -C:指定解壓的路徑
{24-05-28 23:47}bogon:/opt root# tar -xf a.tar.gz -C ./qq

【2】、gzip和bzip2

只可以壓縮和解壓縮檔案

[root@localhost ~]# dd if=/dev/zero of=testfile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.0684654 s, 1.5 GB/s
#使用dd命令生成一個大檔案作為測試目標,/dev/hero檔案是一個“空氣檔案”,看不見但是卻又是真實存在的,類似於/dev/null“黑洞檔案”

(1)、gzip

[root@localhost ~]# gzip testfile 
[root@localhost ~]# ll -lh
total 416K
-rw-------. 1 root root 1.1K Mar 18 13:30 anaconda-ks.cfg
-rw-r--r--. 1 root root  25K Apr 17  2023 epel-release-latest-8.noarch.rpm
-rw-r--r--. 1 root root 100K Mar 20 03:48 testfile.gz
-rw-r--r--. 1 root root 206K Sep 20  2021 yum-4.7.0-4.el8.noarch.rpm
-rw-r--r--. 1 root root  73K Sep 20  2021 yum-utils-4.0.21-3.el8.noarch.rpm
#gzip命令預設是在生成壓縮檔案後,刪除原檔案,-k引數可以使其在生成壓縮檔案時,保留原檔案
[root@localhost ~]# gzip -k testfile 
[root@localhost ~]# ll -h
total 101M
-rw-------. 1 root root 1.1K Mar 18 13:30 anaconda-ks.cfg
-rw-r--r--. 1 root root  25K Apr 17  2023 epel-release-latest-8.noarch.rpm
-rw-r--r--. 1 root root 100M Mar 20 03:48 testfile
-rw-r--r--. 1 root root 100K Mar 20 03:48 testfile.gz
-rw-r--r--. 1 root root 206K Sep 20  2021 yum-4.7.0-4.el8.noarch.rpm
-rw-r--r--. 1 root root  73K Sep 20  2021 yum-utils-4.0.21-3.el8.noarch.rpm
#gzip在壓縮時存在等級劃分,-1 ~ -9
-1, --fast        compress faster
-9, --best        compress better
[root@localhost opt]# gunzip test.gz 
[root@localhost opt]# ll -h
total 12K
drwxr-xr-x. 2 root root    6 Mar 18 20:20 fruit
drwxr-xr-x. 3 root root   71 Mar 19 03:00 ln
-rw-r--r--. 1 root root 4.5K Mar 20 04:04 test
-rw-r--r--. 1 root root 1022 Mar 18 21:57 x.py

(2)、bzip2

[root@localhost opt]# bzip2 -k test 
[root@localhost opt]# ll
total 16
drwxr-xr-x. 2 root root    6 Mar 18 20:20 fruit
drwxr-xr-x. 3 root root   71 Mar 19 03:00 ln
-rw-r--r--. 1 root root 4585 Mar 20 04:04 test
-rw-r--r--. 1 root root 1723 Mar 20 04:04 test.bz2
-rw-r--r--. 1 root root 1022 Mar 18 21:57 x.py
[root@localhost opt]# 
#和gzip一樣 bzip2在壓縮時預設不保留原檔案,-k引數可以讓其儲存原檔案
[root@localhost opt]# bunzip2 test.bz2 
[root@localhost opt]# ll
total 12
drwxr-xr-x. 2 root root    6 Mar 18 20:20 fruit
drwxr-xr-x. 3 root root   71 Mar 19 03:00 ln
-rw-r--r--. 1 root root 4585 Mar 20 04:04 test
-rw-r--r--. 1 root root 1022 Mar 18 21:57 x.py

【3】、zip歸檔

用於Linux和Windows跨平臺使用

-r:遞迴壓縮

 zip -r a.zip /etc/ /home

unzip,解壓操作

-l:檢視壓縮包的內容

-d:指定解壓到哪

unzip  a.zip -d ./bak

相關文章