鍍金池/ 教程/ Linux/ 文件壓縮
Linux 學(xué)習(xí)記錄--開機(jī)掛載錯(cuò)誤
日志系統(tǒng)
數(shù)據(jù)流重定向
內(nèi)存交換空間的構(gòu)建
文件系統(tǒng)簡(jiǎn)介
Linux 學(xué)習(xí)記錄--軟件安裝 RPM|SRPM|YUM
文件特殊權(quán)限
目錄配置 FHS
文件內(nèi)容查閱
Boot Loader
文件壓縮
Linux 學(xué)習(xí)記錄--文件權(quán)限
Linux 命令縮寫
命令與文件的查詢
文件|目錄的默認(rèn)權(quán)限與隱藏權(quán)限
shell script
服務(wù)
Linux 學(xué)習(xí)記錄--程序編譯與函數(shù)庫
正則表達(dá)式與其應(yīng)用
關(guān)機(jī)相關(guān)指令
shell
vim 與 vi 常用命令
系統(tǒng)調(diào)用:進(jìn)程控制
文件系統(tǒng)簡(jiǎn)單操作
磁盤掛載與卸載
有名管道通訊
磁盤分區(qū),格式化與檢驗(yàn)
工作管理與進(jìn)程管理
匿名管道通訊
Linux 學(xué)習(xí)記錄--啟動(dòng)流程
文件與目錄管理
管道命令
命名別名與歷史命令
文件備份|還原
shell變量
Linux 學(xué)習(xí)記錄--ACL 權(quán)限控制
內(nèi)核|內(nèi)核模塊編譯
文件管理相關(guān)系統(tǒng)編程

文件壓縮

機(jī)器語言與程序語言

對(duì)于機(jī)器來說只能識(shí)別0,1,我們?nèi)绻寵C(jī)器運(yùn)行必須輸入機(jī)器能夠識(shí)別的語言,可是機(jī)器語言不利于人們使用可理解,因此科學(xué)家就開發(fā)出人類能看的懂的程序語言,然后再創(chuàng)造出“編譯器”將程序語言轉(zhuǎn)換為機(jī)器語言。

壓縮的簡(jiǎn)單原理

我們都知道1 byte=8 bit. 比如,對(duì)于這1這個(gè)數(shù)字來說可以表示為0000 0001,前7個(gè) bit 都是“空的”只有最后一個(gè) bit,有實(shí)際意義。壓縮的原理就是通過復(fù)雜的計(jì)算方式將這個(gè)“空的“內(nèi)容盡可能的去掉以減少文件的存儲(chǔ)空間

常見壓縮|打包命令

Linux 常見的壓縮命令式 gzip,bzip2,這些壓縮命令都是針對(duì)于一個(gè)文件進(jìn)行壓縮,因此當(dāng)要壓縮很多文件時(shí),就需要先進(jìn)行打包(tar)然后再進(jìn)行壓縮。

.Z :compress 程序壓縮的文件
.gz:gzip 程序壓縮的文件
.bz2:bzip2程序壓縮的文件
.tar:打包文件,并未進(jìn)行壓縮
.tar.gz:打包文件并以 gzip 程序壓縮打包文件
tar.bz2: 打包文件并以 bzip2程序壓縮打包文件

gzip

gzip 可以解開 compress,zip,gzip 等軟件壓縮的文件

語法:gzip[cdtv#] 文件名
選項(xiàng)與參數(shù):
-c: 將壓縮數(shù)據(jù)輸出到屏幕上
-d:解壓縮
-t:可以檢驗(yàn)一個(gè)壓縮文件的一致性,看文件有無錯(cuò)誤
-v:顯示源文件/壓縮文件的壓縮比等信息
-#:壓縮等級(jí),-1最快,-9最慢,默認(rèn)值時(shí)-6

舉例1:壓縮文件

[root@bogon ~]# cp /etc/man.config /tmp/man.config
[root@bogon ~]# gzip -v /tmp/man.config 
/tmp/man.config:         56.1% -- replaced with /tmp/man.config.gz
[root@bogon ~]# ll /etc/man.config /tmp/man.config.gz 
-rw-r--r-- 1 root root 4617 2012-05-30 /etc/man.config
-rw-r--r-- 1 root root 2057 02-27 22:26 /tmp/man.config.gz

舉例2:解壓縮

[root@bogon ~]# gzip -d /tmp/man.config.gz 
[root@bogon ~]# ll  /tmp/man.config 
-rw-r--r-- 1 root root 4617 02-27 22:26 /tmp/man.config

舉例3:數(shù)據(jù)流重定向(壓縮后保留原來文件)

[root@bogon ~]# gzip -c /tmp/man.config > /tmp/man.config.gz 
[root@bogon ~]# ll /tmp/man.config /tmp/man.config.gz
-rw-r--r-- 1 root root 4617 02-27 22:26 /tmp/man.config
-rw-r--r-- 1 root root 2057 02-27 22:31 /tmp/man.config.gz

可以 zcat 來讀取由 gzip 壓縮的文件
[root@bogon ~]# zcat /tmp/man.config.gz

bzip2

bzip2的壓縮比比 gzip 還要好

語法:bzip2[-cdkzv#] 文件名
選項(xiàng)與參數(shù):
-c:將壓縮數(shù)據(jù)輸出到屏幕上
-d:解壓縮
-k:保留原始文件
-z:壓縮
-v:顯示源文件/壓縮文件的壓縮比等信息
-#:壓縮等級(jí),-1最快,-9最慢

可以 bzcat 來讀取由 bzip2壓縮的文件

tar

語法:
打包與壓縮:tar [-j|-z] [-cv] [-f 新建的文件名] filename
查看文件名:tar [-j|-z] [-tv] [-f 新建的文件名]
解壓縮:tar [-j|-z] [-xv] [-f 新建的文件名] [-C 目錄]
選項(xiàng)與參數(shù):
-c:新建打包文件
-t:查看打包文件內(nèi)容
-x:加壓縮打包文件

-j:使用 bzip2進(jìn)行壓縮/解壓縮
-z:使用該 gzip 進(jìn)行壓縮/解壓縮

-v:在壓縮過程中,將正在處理的文件名顯示出來
-f filename:需要被壓縮成(解壓縮)的文件名
-C:解壓縮到的目錄

-p:保留備份數(shù)據(jù)的原有權(quán)限和屬性
-P:保留絕對(duì)路徑
--exclude=File:在壓縮中不將 FILE 打包
--newer-mtime=”時(shí)間”:打包比指定時(shí)間新的文件

舉例1:對(duì)文件打包壓縮

[root@localhost ~]# tar -jcv -f /root/etc.tar.bz2 /etc
……壓縮文件信息
[root@localhost ~]# tar -zcv -f /root/etc.tar.gz /etc
……壓縮文件信息
[root@localhost ~]# ll --block-size=M /root/etc.tar.bz2 /root/etc.tar.gz ;du -sm /etc
-rw-r--r-- 1 root root 10M 02-28 10:42 /root/etc.tar.bz2
-rw-r--r-- 1 root root 16M 02-28 10:43 /root/etc.tar.gz
179     /etc

可以看到壓縮后,文件小了很多

舉例2:查看打包壓縮文件內(nèi)容

[root@localhost ~]# tar -ztv -f /root/etc.tar.gz |grep 'shadow*'
-r-------- root/root      1352 2014-02-14 10:36:09 etc/shadow
-r-------- root/root       657 2014-02-14 10:36:09 etc/gshadow
-r-------- root/root       648 2014-02-14 10:36:09 etc/gshadow-
-r-------- root/root      1352 2014-02-14 10:36:09 etc/shadow-

舉例3:解壓縮

[root@localhost ~]# tar -jxv -f /root/etc.tar.bz2 -C /tmp
……解壓縮文件信息
[root@localhost ~]# ll -d /tmp/etc/
drwxr-xr-x 114 root root 12288 02-28 10:15 /tmp/etc/

當(dāng)不使用絕對(duì)路徑壓縮時(shí),解壓后則解壓到指定路徑下,如壓縮文件/etc,解壓后直接放在了/tmp/etc 使用絕對(duì)路徑壓縮,則在解壓縮后可以使用文件的絕對(duì)路徑解壓縮到文件的原來目錄

舉例4:打包目錄,但排除一些文件

[root@localhost ~]# tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* --exclude=/root/system.tae.bz2 /root /etc
……壓縮文件信息
[root@localhost ~]# ll /root/system.tar.bz2 
-rw-r--r-- 1 root root 10531659 02-28 11:19 /root/system.tar.bz2