如何在Linux使用文件壓縮
今天扣丁學(xué)堂給大家介紹一下關(guān)于如何在Linux使用文件壓縮,首先Linux系統(tǒng)為文件壓縮提供了許多選擇,關(guān)鍵是選擇一個(gè)最適合你的。
如果你對(duì)可用于Linux系統(tǒng)的文件壓縮命令或選項(xiàng)有任何疑問(wèn),你也許應(yīng)該看一下aproposcompress這個(gè)命令的輸出。如果你有機(jī)會(huì)這么做,你會(huì)驚異于有如此多的的命令來(lái)進(jìn)行壓縮文件和解壓縮文件;此外還有許多命令來(lái)進(jìn)行壓縮文件的比較、檢驗(yàn),并且能夠在壓縮文件中的內(nèi)容中進(jìn)行搜索,甚至能夠把壓縮文件從一個(gè)格式變成另外一種格式(如,將.z格式變?yōu)?gz格式)。
你可以看到只是適用于bzip2壓縮的全部條目就有這么多。加上zip、gzip和xz在內(nèi),你會(huì)有非常多的選擇。
$aproposcompress|grep^bz
bzcat(1)-decompressesfilestostdout
bzcmp(1)-comparebzip2compressedfiles
bzdiff(1)-comparebzip2compressedfiles
bzegrep(1)-searchpossiblybzip2compressedfilesforaregularexpression
bzexe(1)-compressexecutablefilesinplace
bzfgrep(1)-searchpossiblybzip2compressedfilesforaregularexpression
bzgrep(1)-searchpossiblybzip2compressedfilesforaregularexpression
bzip2(1)-ablock-sortingfilecompressor,v1.0.6
bzless(1)-fileperusalfilterforcrtviewingofbzip2compressedtext
bzmore(1)-fileperusalfilterforcrtviewingofbzip2compressedtext
在我的Ubuntu系統(tǒng)上,aproposcompress命令的返回中列出了60條以上的命令。
壓縮算法
壓縮并沒(méi)有普適的方案,某些壓縮工具是有損壓縮,例如一些壓縮用于減少mp3文件大小,而能夠使聆聽(tīng)者有接近原聲的音樂(lè)感受。但是在Linux命令行上壓縮或歸檔用戶文件所使用的算法必須能夠精確地重新恢復(fù)為原始數(shù)據(jù)。換句話說(shuō),它們必須是無(wú)損的。
這是如何做到的?讓我們假設(shè)在一行上有300個(gè)相同的字符可以被壓縮成像“300x”這樣的字符串,但是這種算法對(duì)大多數(shù)文件沒(méi)有很大的用處,因?yàn)槲募胁豢赡馨L(zhǎng)的相同字符序列比完全隨機(jī)的序列更多。壓縮算法要復(fù)雜得多,從Unix早期壓縮首次被引入以來(lái),它就越來(lái)越復(fù)雜了。
在Linux系統(tǒng)上的壓縮命令
在Linux系統(tǒng)上最常用的文件壓縮命令包括zip、gzip、bzip2、xz。所有這些壓縮命令都以類(lèi)似的方式工作,但是你需要權(quán)衡有多少文件要壓縮(節(jié)省多少空間)、壓縮花費(fèi)的時(shí)間、壓縮文件在其他你需要使用的系統(tǒng)上的兼容性。
有時(shí)壓縮一個(gè)文件并不會(huì)花費(fèi)很多時(shí)間和精力。在下面的例子中,被壓縮的文件實(shí)際上比原始文件要大。這并不是一個(gè)常見(jiàn)情況,但是有可能發(fā)生——尤其是在文件內(nèi)容達(dá)到一定程度的隨機(jī)性。
$timezipbigfile.zipbigfile
adding:bigfile(default0%)
real0m0.055s
user0m0.000s
sys0m0.016s
$ls-lbigfile*
-rw-r--r--1rootroot012月2022:36bigfile
-rw-------1rootroot16412月2022:41bigfile.zip
注意該文件壓縮后的版本(bigfile.zip)比原始文件(bigfile)要大。如果壓縮增加了文件的大小或者減少很少的比例,也許唯一的好處就是便于在線備份。如果你在壓縮文件后看到了下面的信息,你不會(huì)從壓縮中得到什么受益。
(defalted1%)
文件內(nèi)容在文件壓縮的過(guò)程中有很重要的作用。在上面文件大小增加的例子中是因?yàn)槲募?nèi)容過(guò)于隨機(jī)。壓縮一個(gè)文件內(nèi)容只包含0的文件,你會(huì)有一個(gè)相當(dāng)震驚的壓縮比。在如此極端的情況下,三個(gè)常用的壓縮工具都有非常棒的效果。
-rw-rw-r--1shsshs10485760Dec812:31zeroes.txt
-rw-rw-r--1shsshs49Dec817:28zeroes.txt.bz2
-rw-rw-r--1shsshs10219Dec817:28zeroes.txt.gz
-rw-rw-r--1shsshs1660Dec812:31zeroes.txt.xz
-rw-rw-r--1shsshs10360Dec812:24zeroes.zip
令人印象深刻的是,你不太可能看到超過(guò)1000萬(wàn)字節(jié)而壓縮到少于50字節(jié)的文件,因?yàn)榛旧喜豢赡苡羞@樣的文件。
在更真實(shí)的情況下,大小差異總體上是不同的,但是差別并不顯著,比如對(duì)于確實(shí)不太大的jpg圖片文件來(lái)說(shuō)。
-rw-r--r--1shsshs13522Dec1118:58image.jpg
-rw-r--r--1shsshs13875Dec1118:58image.jpg.bz2
-rw-r--r--1shsshs13441Dec1118:58image.jpg.gz
-rw-r--r--1shsshs13508Dec1118:58image.jpg.xz
-rw-r--r--1shsshs13581Dec1118:58image.jpg.zip
在對(duì)大的文本文件同樣進(jìn)行壓縮時(shí),你會(huì)看到顯著的不同。
$ls-ltextfile*
-rw-rw-r--1shsshs8740836Dec1118:41textfile
-rw-rw-r--1shsshs1519807Dec1118:41textfile.bz2
-rw-rw-r--1shsshs1977669Dec1118:41textfile.gz
-rw-rw-r--1shsshs1024700Dec1118:41textfile.xz
-rw-rw-r--1shsshs1977808Dec1118:41textfile.zip
在這種情況下,xz相較于其他壓縮命令有效的減小了文件大小,對(duì)于第二的bzip2命令也是如此。
查看壓縮文件
這些以more結(jié)尾的命令(bzmore等等)能夠讓你查看壓縮文件的內(nèi)容而不需要解壓文件。
bzmore(1)-fileperusalfilterforcrtviewingofbzip2compressedtext
lzmore(1)-viewxzorlzmacompressed(text)files
xzmore(1)-viewxzorlzmacompressed(text)files
zmore(1)-fileperusalfilterforcrtviewingofcompressedtext
為了解壓縮文件內(nèi)容顯示給你,這些命令做了大量的計(jì)算。但在另一方面,它們不會(huì)把解壓縮后的文件留在你系統(tǒng)上,它們只是即時(shí)解壓需要的部分。
$xzmoretextfile.xz|head-1
Hereistheagendafortomorrow'sstaffmeeting:
比較壓縮文件
有幾個(gè)壓縮工具箱包含一個(gè)差異命令(例如:xzdiff),那些工具會(huì)把這些工作交給cmp和diff來(lái)進(jìn)行比較,而不是做特定算法的比較。例如,xzdiff命令比較bz2類(lèi)型的文件和比較xz類(lèi)型的文件一樣簡(jiǎn)單。
如何選擇最好的Linux壓縮工具
如何選擇壓縮工具取決于你工作。在一些情況下,選擇取決于你所壓縮的數(shù)據(jù)內(nèi)容。在更多的情況下,取決你組織內(nèi)的慣例,除非你對(duì)磁盤(pán)空間有著很高的敏感度。下面是一般性建議:
zip對(duì)于需要分享給或者在Windows系統(tǒng)下使用的文件最適合。
gzip或許對(duì)你要在Unix/Linux系統(tǒng)下使用的文件是最好的。雖然bzip2已經(jīng)接近普及,但gzip看起來(lái)仍將長(zhǎng)期存在。
bzip2使用了和gzip不同的算法,并且會(huì)產(chǎn)生比gzip更小的文件,但是它們需要花費(fèi)更長(zhǎng)的時(shí)間進(jìn)行壓縮。
xz通??梢蕴峁┳詈玫膲嚎s率,但是也會(huì)花費(fèi)相當(dāng)長(zhǎng)的時(shí)間。它比其他工具更新一些,可能在你工作的系統(tǒng)上還不存在。
以上就是關(guān)于如何在Linux使用文件壓縮的詳細(xì)介紹,最后體系在壓縮文件時(shí),你有很多選擇,而在極少的情況下,并不能有效節(jié)省磁盤(pán)存儲(chǔ)空間??鄱W(xué)堂的Linux培訓(xùn)課程從基礎(chǔ)入門(mén)開(kāi)始教,不論學(xué)員是否擁有基礎(chǔ)在扣丁學(xué)堂都能順利的學(xué)習(xí),扣丁學(xué)堂不僅有專(zhuān)業(yè)的老師和與時(shí)俱進(jìn)的課程體系,還有大量的Linux視頻教程供學(xué)員觀看學(xué)習(xí),想要學(xué)好Linux開(kāi)發(fā)的小伙伴快快行動(dòng)吧??鄱W(xué)堂Linux技術(shù)交流群:659974587。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。