壓縮文件的用途與技術(shù)
壓縮文件使文件大小減低菠赚,降低磁盤使用量脑豹。還可以分成數(shù)個(gè)小型文件,方便攜帶衡查。常用于網(wǎng)絡(luò)數(shù)據(jù)傳輸瘩欺,copy分享文件。
Linux系統(tǒng)常用的壓縮指令
在Linux的環(huán)境中,壓縮文件的擴(kuò)展名大多是:“.tar , .tar .gz, .tgz, .gz, .Z, .bz2, *.xz”俱饿。
壓縮指令很多歌粥,根據(jù)不同的壓縮技術(shù)分不同的指令和擴(kuò)展名,解壓縮文件要使用相應(yīng)壓縮的技術(shù)指令拍埠。
Linux文件的屬性基本上與文件名沒有絕對(duì)的關(guān)系阁吝,這里是為了人類使用的區(qū)分。常見的有
- *.Z compress 程序壓縮的文件械拍;
- *.zip zip 程序壓縮的文件;
- *.gz gzip程序壓縮的文件装盯;
- *.bz2 bzip2程序壓縮的文件坷虑;
- *.xz xz程序壓縮的文件;
- *.tar tar程序打包的數(shù)據(jù)埂奈,并沒有壓縮過迄损;
- *.tar.gz tar程序打包的文件,其中并且經(jīng)過gzip的壓縮
- *.tar.bz2 tar程序打包的文件账磺,其中并且經(jīng)過bzip2的壓縮
- *.tar.xz tar程序打包的文件芹敌,其中并且經(jīng)過xz的壓縮
Linux上常見的壓縮指令就是gzip, bzip2以及最新的xz,compress 已經(jīng)退流行了垮抗。
tar是將很多文件“打包”成一個(gè)文件氏捞,而壓縮是只對(duì)一個(gè)文件的壓縮,一般兩種技術(shù)同時(shí)使用冒版。
gzip, zcat/zmore/zless/zgrep
gzip指令
目前 gzip 可以解開 compress, zip與gzip等軟件所壓縮的文件液茎,后綴名是*.gz 。
語法:
gzip [-cdtv#] 文件名
zcat 文件名.gz
選項(xiàng)與參數(shù):
-c :將壓縮的數(shù)據(jù)輸出到屏幕上辞嗡,可通過數(shù)據(jù)流重導(dǎo)向來處理捆等;
-d :解壓縮的參數(shù);
-t :可以用來檢驗(yàn)一個(gè)壓縮文件的一致性~看看文件有無錯(cuò)誤续室;
-v :可以顯示出原文件/壓縮文件的壓縮比等信息栋烤;
-# :# 為數(shù)字的意思,代表壓縮等級(jí)挺狰,-1 最快明郭,但是壓縮比最差、-9 最慢她渴,但是壓縮比最好达址!默認(rèn)是 -6
使用gzip壓縮的文件默認(rèn)成為.gz的文件名,原始文件就不再存在了趁耗。
范例:
$ gzip -v services ---壓縮文件
$ zcat services.gz ---將文件讀出來
$ gzip -d services.gz ---解壓縮
$ gzip -9 -c services>services.gz ---用最佳的壓縮比壓縮沉唠,并保留原本的文件
$ zgrep -n 'http' services.gz --- 在services.gz 中,找出 http 這個(gè)關(guān)鍵字在哪幾行
上面中:-c 將壓縮后文件內(nèi)容輸入屏幕苛败,> 將字符輸入成文件
zcat, zmore, zless,指令相當(dāng)于先解壓后再執(zhí)行cat,more,less. 使用不同的方式讀取純文件文件满葛,
使用zgrep從壓縮文件當(dāng)中來使用grep径簿。
bzip2,bzcat/bzmore/bzless/bzgrep
bzip 比gzip壓縮比更佳,用法幾乎相同嘀韧。
語法:
$ bzip2 [-cdkzv#] 文件名
$ bzcat 文件名.bz2
選項(xiàng)與參數(shù):
-c :將壓縮的過程產(chǎn)生的數(shù)據(jù)輸出到屏幕上篇亭!
-d :解壓縮的參數(shù)
-k :保留原始文件,而不會(huì)刪除原始的文件喔锄贷!
-z :壓縮的參數(shù) (默認(rèn)值译蒂,可以不加)
-v :可以顯示出原文件/壓縮文件的壓縮比等信息;
-# :與 gzip 同樣的谊却,都是在計(jì)算壓縮比的參數(shù)柔昼, -9 最佳, -1 最快炎辨!
范例:
$ bzip2 -v services ---使用bzip2壓縮
$ bzcat services.bz2 ---讀出原內(nèi)容
$ bzip2 -d services.bz2 ---解壓縮
$ bzip2 -c services>services.bz2 --壓縮并保留原本的文件
可以看到捕透,連選擇與參數(shù)是跟gzip一模一樣bzcat/bzmore/bzless/bzgrep和zcat/zmore/zless/zgrep使用是一樣的。
xz, xzcat/xzmore/xzless/xzgrep
語法:
$ xz [-dtlkc#] 文件名
$ xcat 文件名.xz
選項(xiàng)與參數(shù):
-d :就是解壓縮安晗簟乙嘀!
-t :測(cè)試壓縮文件的完整性,看有沒有錯(cuò)誤
-l :列出壓縮文件的相關(guān)信息
-k :保留原本的文件不刪除~
-c :同樣的破喻,就是將數(shù)據(jù)由屏幕上輸出的意思虎谢!
-# :同樣的,也有較佳的壓縮比的意思曹质!
范例
$ xz -v services
$ ls -l services*
$ xz -l services.xz
$ xzcat services.xz
$ xz -d services.xz
$ xz -k services
xz這個(gè)壓縮比比gzip bzip2 更高嘉冒,時(shí)間也花的更久。
打包指令:tar
將多個(gè)文件或目錄包成一個(gè)大文件
tar
語法:
$ tar [-z|-j|-J] [cv] [-f 待創(chuàng)建的新文件名] filename... <==打包與壓縮
$ tar [-z|-j|-J] [tv] [-f 既有的 tar文件名] <==察看文件名
$ tar [-z|-j|-J] [xv] [-f 既有的 tar文件名] [-C 目錄] <==解壓縮
選項(xiàng)與參數(shù):
-c :創(chuàng)建打包文件咆繁,可搭配 -v 來察看過程中被打包的文件名(filename)
-t :察看打包文件的內(nèi)容含有哪些文件名讳推,重點(diǎn)在察看“文件名”就是了;
-x :解打包或解壓縮的功能玩般,可以搭配 -C (大寫) 在特定目錄解開
特別留意的是银觅, -c, -t, -x 不可同時(shí)出現(xiàn)在一串命令行中。
-z :通過 gzip 的支持進(jìn)行壓縮/解壓縮:此時(shí)文件名最好為 *.tar.gz
-j :通過 bzip2 的支持進(jìn)行壓縮/解壓縮:此時(shí)文件名最好為 *.tar.bz2
-J :通過 xz 的支持進(jìn)行壓縮/解壓縮:此時(shí)文件名最好為 *.tar.xz
特別留意坏为, -z, -j, -J 不可以同時(shí)出現(xiàn)在一串命令行中
-v :在壓縮/解壓縮的過程中究驴,將正在處理的文件名顯示出來!
-f filename:-f 后面要立刻接要被處理的文件名匀伏!建議 -f 單獨(dú)寫一個(gè)選項(xiàng)啰H饔恰(比較不會(huì)忘記)
-C 目錄 :這個(gè)選項(xiàng)用在解壓縮,若要在特定目錄解壓縮够颠,可以使用這個(gè)選項(xiàng)熙侍。
其實(shí)最簡(jiǎn)單的使用tar就只要記憶下面的方式即可:
- 壓 縮:tar -jcv -f filename.tar .bz2 要被壓縮的文件或目錄名稱
- 查 詢:tar -jtv -f filename.tar .bz2
- 解壓縮:tar -jxv -f filename.tar .bz2 -C 欲解壓縮的目錄
指令不會(huì)自己產(chǎn)生壓縮的文件名,在自己取文件名時(shí),要寫對(duì)擴(kuò)展名蛉抓。
范例:
# tar -jcv -f etc.tar.bz2 /etc --- 打包
# tar -jtv -f etc.tar.bz2 ---查看
# tar -jxv -f etc.tar.bz2 -C /tmp ---解壓縮
# time tar -jpcv -f /root/etc.tar.bz2 /etc ---j使用bzip2壓縮打包庆尘,time 顯示打包時(shí)間,p
# time tar -Jpcv -f /root/etc.tar.bz2 /etc --- J使用xz壓縮打包
僅解開單一文件的方法
# tar -jtv -f /root/etc.tar.bz2 | grep 'shadow'
打包某目錄巷送,但不含該目錄下的某些文件之作法:
# tar -jcv -f /root/system.tar.bz2 /root --exclude=/root/etc*
XFS 文件系統(tǒng)的備份與還原
XFS 文件系統(tǒng)備份 xfsdump
使用 xfsdump 時(shí)驶忌,請(qǐng)注意下面的限制喔:
- xfsdump 不支持沒有掛載的文件系統(tǒng)備份!所以只能備份已掛載的笑跛!
- xfsdump 必須使用 root 的權(quán)限才能操作 (涉及文件系統(tǒng)的關(guān)系)
- xfsdump 只能備份 XFS 文件系統(tǒng)案赌А!
- xfsdump 備份下來的數(shù)據(jù) (文件或儲(chǔ)存媒體) 只能讓 xfsrestore 解析
- xfsdump 是通過文件系統(tǒng)的 UUID 來分辨各個(gè)備份文件的飞蹂,因此不能備份兩個(gè)具有相同UUID 的文件系統(tǒng)喔抒抬!
簡(jiǎn)單操作
語法:
$ xfsdump [-L S_label] [-M M_label] [-l #] [-f 備份文件] 待備份數(shù)據(jù)
$ xfsdump -I
選項(xiàng)與參數(shù):
-L :xfsdump 會(huì)紀(jì)錄每次備份的 session 標(biāo)頭,這里可以填寫針對(duì)此文件系統(tǒng)的簡(jiǎn)易說明
-M :xfsdump 可以紀(jì)錄儲(chǔ)存媒體的標(biāo)頭晤柄,這里可以填寫此媒體的簡(jiǎn)易說明
-l :是 L 的小寫,就是指定等級(jí)~有 0~9 共 10 個(gè)等級(jí)喔妖胀! (默認(rèn)為 0芥颈,即完整備份)
-f :有點(diǎn)類似 tar 啦!后面接產(chǎn)生的文件赚抡,亦可接例如 /dev/st0 設(shè)備文件名或其他一般文件文件名等
-I :從 /var/lib/xfsdump/inventory 列出目前備份的信息狀態(tài)
xfsdump 默認(rèn)僅支持文件系統(tǒng)的備份爬坑,并不支持特定目錄的備份~所以你不能用
xfsdump 去備份 /etc ! 因?yàn)? /etc 從來就不是一個(gè)獨(dú)立的文件系統(tǒng)涂臣!注意盾计!注意!
范例:
[root@localhost ~]# xfsdump -l 0 -L boot_all -M boot_all -f /srv/boot.dump /boot
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.4 (dump format 3.0) - type ^C for status and control
xfsdump: level 0 dump of localhost.localdomain:/boot
xfsdump: dump date: Mon Feb 20 12:13:32 2017
xfsdump: session id: 86c1217d-e6ff-4ee3-b35b-ec7153fc67f4
xfsdump: session label: "boot_all"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 148324608 bytes
xfsdump: /var/lib/xfsdump/inventory created
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 147932264 bytes
xfsdump: dump size (non-dir files) : 147668600 bytes
xfsdump: dump complete: 8 seconds elapsed
xfsdump: Dump Summary:
xfsdump: stream 0 /srv/boot.dump OK (success)
xfsdump: Dump Status: SUCCESS
[root@localhost ~]# ll /srv
總用量 144468
-rw-r--r--. 1 root root 147932264 2月 20 12:13 boot.dump
[root@localhost ~]# ll /var/lib/xfsdump/inventory
總用量 16
-rw-r--r--. 1 root root 5080 2月 20 12:13 0684a77e-9b76-48b1-9217-553a92f1c6bd.StObj
-rw-r--r--. 1 root root 312 2月 20 12:13 362a2f76-b699-4dba-a6c6-6cc28d04347e.InvIndex
-rw-r--r--. 1 root root 576 2月 20 12:13 fstab
#使用了 xfsdump 之后才會(huì)有上述 /var/lib/xfsdump/inventory 內(nèi)的文件產(chǎn)生喔赁遗!
用 xfsdump 進(jìn)行累積備份 (Incremental backups)
# 看一下有沒有任何文件系統(tǒng)被 xfsdump 過的數(shù)據(jù)署辉?
[root@localhost ~]# xfsdump -I
#創(chuàng)建一個(gè)大約 10 MB 的文件在 /boot 內(nèi):
[root@localhost ~]# dd if=/dev/zero of=/boot/testing.img bs=1M count=10
#開始創(chuàng)建差異備份文件,此時(shí)我們使用 level 1 吧:
[root@localhost ~]# xfsdump -l 1 -L boot_2 -M boot_2 -f /srv/boot.dump1 /boot
#最后再看一下是否有記錄 level 1 備份的時(shí)間點(diǎn)呢岩四?
[root@localhost ~]# xfsdump -I
XFS 文件系統(tǒng)還原 xfsrestore
xfsdump 的復(fù)原使用的是 xfsrestore 這個(gè)指令
語法
[root@study ~]# xfsrestore -I ==用來察看備份文件數(shù)據(jù)
[root@study ~]# xfsrestore [-f 備份文件] [-L S_label] [-s] 待復(fù)原目錄 <==單一文件全系統(tǒng)復(fù)原
[root@study ~]# xfsrestore [-f 備份文件] -r 待復(fù)原目錄 <==通過累積備份文件來復(fù)原系統(tǒng)
[root@study ~]# xfsrestore [-f 備份文件] -i 待復(fù)原目錄 <==進(jìn)入互動(dòng)模式
選項(xiàng)與參數(shù):
-I :跟 xfsdump 相同的輸出哭尝!可查詢備份數(shù)據(jù),包括 Label 名稱與備份時(shí)間等
-f :后面接的就是備份文件剖煌!企業(yè)界很有可能會(huì)接 /dev/st0 等磁帶機(jī)材鹦!我們這里接文件名!
-L :就是 Session 的 Label name 喔耕姊!可用 -I 查詢到的數(shù)據(jù)桶唐,在這個(gè)選項(xiàng)后輸入!
-s :需要接某特定目錄茉兰,亦即僅復(fù)原某一個(gè)文件或目錄之意尤泽!
-r :如果是用文件來儲(chǔ)存?zhèn)浞輸?shù)據(jù),那這個(gè)就不需要使用。如果是一個(gè)磁帶內(nèi)有多個(gè)文件安吁,
需要這東西來達(dá)成累積復(fù)原
-i :進(jìn)入互動(dòng)模式醉蚁,進(jìn)階管理員使用的!一般我們不太需要操作它鬼店!
用 xfsrestore 觀察 xfsdump 后的備份數(shù)據(jù)內(nèi)容
$ xfsrestore -I
簡(jiǎn)單復(fù)原 level 0 的文件系統(tǒng)
[root@localhost ~]# xfsrestore -f /srv/boot.dump -L boot_all /boot
復(fù)原累積備份數(shù)據(jù)
xfsrestore -f /srv/boot.dump1 /tmp/boot
僅還原部分文件的 xfsrestore 互動(dòng)模式
xfsrestore -f /srv/boot.dump -i /tmp/boot3
其他网棍,后續(xù)
dd 可備份完整的 partition 或 disk ,因?yàn)?dd 可讀取磁盤的 sector 表面數(shù)據(jù)
cpio 為相當(dāng)優(yōu)秀的備份指令妇智,不過必須要搭配類似 find 指令來讀入欲備份的文件名數(shù)
據(jù)滥玷,方可進(jìn)行備份動(dòng)作。