前言:你是否曾經因為某個文件占用空間較大,而空間緊缺的U盤無法存放此文件。你是否曾經因為軟件里有太多文件而不方便復制和攜帶。你是否曾因需要備份太過零散而頭疼。那么基于“文件壓縮和打包”的技術因此出現。下面介紹下Linux下關于壓縮、解壓縮和打包的工具及使用。
一、相關術語的原理和意義
1、壓縮原理:
計算機處理信息的是以二進制的形式表示的,而壓縮工具就是將二進制數據中的將重復的字符串用特殊字符標記,從而達到了壓縮空間的目的目的。
例如:如果你的數據有 111….. 共計 10個1時,那么壓縮技術就是只記錄了“10個1”,而不是真正的將10個1都記錄,這樣就能減少空間的占用
2、解壓縮
是壓縮的反過程,因為壓縮過的文件并無法直接被操作系統所使用,因此,如果我們要使用被壓縮過的文件數據,那么就需要將壓縮文件“還原”成未壓縮前的狀態,這個就是“解壓縮”
3、壓縮比
壓縮前和壓縮后的文件所占用磁盤空間的大小比例
二、壓縮技術的好處
1、減少文件占用的空間
2、在文件傳輸過程中不易導致文件損壞
3、可以對壓縮文件進行加密,保護文件
4、在應用系統文件備份方便
三、在Linux環境中,壓縮文件的擴展名大多是 *.tar , *.tar.gz , *.tgz , *.gz , *.Z , *.bz2 , *.xz ,*.zip
下面是常見的壓縮文件擴展名對應的壓縮命令
*.Z compress程序壓縮文件
*.gz gzip程序壓縮的文件
*.bz2 bzip2程序壓縮的文件
*.xz xz程序壓縮的文件
*.tar tar程序打包的文件,但未進行壓縮
*.tar.gz tar程序打包的文件,并經gzip程序壓縮
*.tar.bz2 tar程序打包的文件,并經bzip2程序壓縮
*.zip zip程序壓縮的文件
小貼士:在Linux的中,沒有一個固定的程序后綴,后綴只是為了管理員標識使用,方便日后的維護。
四、下面介紹常用的擴展名對應的壓縮命令及使用
Linux系統常用的壓縮命令
compress :屬于比較老舊的一款壓縮軟件,使用于比較舊UNIX系統上,并現的Linux已不常用
gzip :現應用最廣的壓縮命令,可解壓由compress、zip和gzip等軟件所壓縮的文件
bzip2 :基于Burrows-Wheeler算法變換的無損壓縮軟件
xz :是一款新的壓縮文件,采用LZMA SDK壓縮
zip :是一款比較通用的壓縮工具,在Linux,windows都通用
壓縮比、壓縮速度和解壓速率比較
compress < gzip < bzip2 < xz
1、compress、uncompress
備注:由于compress比較舊,所以CentOS5.5以上默認沒有安裝,然后compress的程序包是ncompress,如果系統沒有此命令,請執行yum install ncompress安裝此程序
compress [-cv] 文件或目錄 <—— 壓縮
-c:將壓縮后的結果輸出至標準輸出
-v: 顯示出壓縮后的文件信息以及壓縮過程中的文件名變化
uncompress 文件.Z <—— 解壓
例子: [root@www tmp]# cp -a /etc/man.config /tmp/ #拷貝/etc/man.config文件到/tmp路徑下,為了做練習 [root@www tmp]# compress -v man.config #對man.config文件進行compress壓縮 man.config: -- replaced with man.config.Z Compression: 41.84% #壓縮比 [root@www tmp]# ls man.config.Z #發現壓縮后的文件后綴默認是.Z,這里也可以看出執行了壓縮命令后,源文件會被清除 [root@www tmp]# uncompress man.config.Z #解壓縮 [root@www tmp]# ls man.config #解壓縮后原壓縮的文件會被清除 [root@www tmp]# compress -c man.config > man.config.Z #這相當于保留壓縮前的文件 [root@www tmp]# ll -h -rw-r--r--. 1 root root 4.9K Feb 22 2013 man.config -rw-r--r--. 1 root root 2.9K Jul 12 13:05 man.config.Z #可以對比壓縮后的文件已經被壓縮變小
小貼士:compress現在已經很少使用了,因為它無法解壓*.gz,*.bz2等壓縮文件,而后續的壓縮程序能解壓*.Z的程序包
2、gzip、gunzip、zcat
gzip [-cdtv#] 文件名 <—— 壓縮
-c:將壓縮后的結果輸出至標準輸出,這樣就能保留源文件了
-d:相當于gunzip
-t:可以校驗壓縮文件的一致性、看看文件有無錯誤
-v:顯示壓縮比的信息
-#:指定壓縮比,范圍0-9,數字越大,壓縮比例越大,但所消耗的CPU資源更多。默認為6
gunzip 文件名.gz <—— 解壓縮
zcat 文件名.gz <—— 不解壓查看gzip壓縮后的文件內容
例子: [root@www tmp]# gzip -v man.config #壓縮文件 man.config: 56.5% -- replaced with man.config.gz #顯示壓縮比 [root@www tmp]# ls man.config.gz #壓縮后原文件會被刪除 [root@www tmp]# gzip -c man.config > man.config.gz #這相當于保留壓縮前的文件 [root@www tmp]# ll -rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config -rw-r--r--. 1 root root 2184 Jul 12 13:27 man.config.gz [root@www tmp]# zcat man.config.gz #不解壓查看gzip壓縮的文件的內容 [root@www tmp]# gzip -1 -c man.config > man.config1.gz [root@www tmp]# gzip -9 -c man.config > man.config9.gz #壓縮比例越高,所占空間越小 [root@www tmp]# ll -rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config -rw-r--r--. 1 root root 2332 Jul 12 13:31 man.config1.gz -rw-r--r--. 1 root root 2184 Jul 12 13:31 man.config9.gz [root@www tmp]# gzip -d man.config1.gz #解壓縮文件,相當于gunzip [root@www tmp]# ls man.config man.config1 man.config9.gz
小貼士:gzip不能壓縮目錄
3、bzip2、bunzip2、bzcat
bzip2 [-cdkv#] 文件名 <——壓縮
-c:將壓縮后的結果輸出至標準輸出,這樣就能保留源文件了
-d:相當于gunzip
-t:可以校驗壓縮文件的一致性、看看文件有無錯誤
-v:顯示壓縮比等的信息
-k:保留原文件,而不會刪除原始文件
-#:指定壓縮比,范圍0-9,數字越大,壓縮比例越大,但所消耗的CPU資源更多。默認為6
bunzip2 文件名.bz2 <——解壓縮
bzcat 文件名.bze <——不解壓查看bzip2壓縮后的文件內容
例子: [root@www tmp]# bzip2 -v man.config man.config: 2.251:1, 3.555 bits/byte, 55.57% saved, 4940 in, 2195 out. #壓縮比,速度等信息 [root@www tmp]# ls man.config.bz2 [root@www tmp]# bzip2 -d man.config.bz2 #解壓縮,相當于bunzip [root@www tmp]# ls man.config [root@www tmp]# bzip2 -9 -k man.config #-k參數壓縮后保留了原始文件 [root@www tmp]# ll -rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config -rw-r--r--. 1 root root 2195 Jul 12 13:23 man.config.bz2 [root@www tmp]# bzcat man.config.bz2 #不解壓查看bzip2壓縮后的文件內容 [root@www tmp]# bzip2 -c man.config > man.config2.bz2 [root@www tmp]# ls man.config man.config2.bz2 man.config.bz2
小貼士:bzip2不能壓縮目錄
4、xz、unxz、xzcat
xz [-cdkv# ] 文件名 <——壓縮
各參數用法和bzip2一樣,這里不再詳述
unxz 文件名.xz <——解壓縮
xzcat 文件名 <——不解壓查看xz壓縮后的文件內容
練習: [root@www tmp]# xz -v man.config man.config (1/1) 100.0 % 2,204 B / 4,940 B = 0.446 #壓縮比信息 [root@www tmp]# xz -c man.config > man.config.xz #這相當于保留壓縮前的文件 [root@www tmp]# ll -rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config -rw-r--r--. 1 root root 2204 Jul 12 14:18 man.config.xz [root@www tmp]# unxz man.config.xz #解壓縮,相當于xz -d [root@www tmp]# ll -rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config
5、zip、unzip
zip ZIPFILE.zip src_file…. <——壓縮
備注:zip可以對目錄進行歸檔壓縮
unzip ZIPFILE.zip <——解壓縮
練習: [root@www tmp]# cp -R /home/* /tmp/home/ #將home下文件拷貝到/tmp目錄下 [root@www tmp]# ls /home/ user1 user2 [root@www tmp]# zip home.zip home/* #對目錄進行壓縮 adding: home/user1/ (stored 0%) adding: home/user2/ (stored 0%) [root@www tmp]# ls home home.zip
對于目錄的歸檔壓縮通常使用tar工具,所以zip這里不再多介紹
五、打包歸檔工具
tar:打包歸檔工具
能實現將多個文件打包成單個文件,即為歸檔文件,但是tar只是歸檔,不壓縮
1、創建歸檔
tar [-cvf] Tarfile.tar filename
-c:create,新建打包文件
-v:在壓縮/解壓縮過程中,將正在處理的文件名顯示出來
-f filename:-f后面一定要接被處理的文件名,建議-f 單獨使用一個參數
[root@www tmp]# tar -cv -f /tmp/home.tar /home [root@www tmp]# ls /tmp/ home.tar
2、展開歸檔
tar [-xvf] Tarfile.tar
-x:解壓縮的功能
-v:在壓縮/解壓縮過程中,將正在處理的文件名顯示出來
-f filename:-f后面一定要接被處理的文件名,建議-f 單獨使用一個參數
[root@www tmp]# tar -xvf home.tar [root@www tmp]# ls home home.tar
3、 查看歸檔后的文件中包含了哪些原文件
tar [-tf] Tarfile.tar
-t:查看打包文件里包含哪些文件名
-f filename:-f后面一定要接被處理的文件名,建議-f 單獨使用一個參數
[root@www tmp]# tar -tf home.tar
4、tar與壓縮工具(gzip、bzip2、xz)來執行壓縮
tar [-zjJ] Tarfile.tar
-z:使用gzip進行壓縮/解壓縮,此文件名最好為*.tar.gz
-j:使用bzip2進行壓縮/解壓縮,此文件名最好為*.tar.bz2
-J:使用xz進行壓縮/解壓縮,此文件名最好為*.tar.xz
[root@www tmp]# tar -zcvf home.tar.gz home [root@www tmp]# ls home home.tar home.tar.gz
六、命令總結
1、Linux系統常用的壓縮命令 : compress,gzip,bzip2,xz,zip
其中compress,gzip,bzip2,xz不能對目錄進行壓縮歸檔,一般和tar歸檔打包工具一起使用,從而達到對目錄進行歸檔
zip可以直接對目錄進行壓縮歸檔
2、打包歸檔工具:tar
創建歸檔參數: [-cvf]
展開歸檔參數: [-xvf]
查看歸檔后的文件參數:[-tf]]
tar和壓縮工具一起使用參數:[-zjJ]
原創文章,作者:螃蟹,如若轉載,請注明出處:http://www.www58058.com/6275