400 likes | 545 Views
Linux 基礎學習. Chapter 9 檔案與檔案系統的壓縮與打包. 內容. 壓縮檔案的用途與技術 Linux 系統常見的壓縮指令 打包指令: tar 完整備份工具: dump 光碟寫入工具 其他常見的壓縮與備份工具. 9.1 壓縮檔案的用途與技術. 你是否有過文件檔案太大,導致無法以一片軟碟將它複製完成的困擾?又,你是否有過,發現一個軟體裡面有好多檔案,這些檔案要將它複製與攜帶都很不方便的問題?還有,你是否有過要備份某些重要資料,偏偏這些資料量太大了,耗掉了你很多的磁碟空間呢?這個時候,那個好用的『檔案壓縮』技術可就派的上用場了!
E N D
Linux 基礎學習 Chapter 9 檔案與檔案系統的壓縮與打包 Linux基礎--檔案與檔案系統的壓縮與打包
內容 • 壓縮檔案的用途與技術 • Linux 系統常見的壓縮指令 • 打包指令: tar • 完整備份工具:dump • 光碟寫入工具 • 其他常見的壓縮與備份工具 Linux基礎--檔案與檔案系統的壓縮與打包
9.1 壓縮檔案的用途與技術 你是否有過文件檔案太大,導致無法以一片軟碟將它複製完成的困擾?又,你是否有過,發現一個軟體裡面有好多檔案,這些檔案要將它複製與攜帶都很不方便的問題?還有,你是否有過要備份某些重要資料,偏偏這些資料量太大了,耗掉了你很多的磁碟空間呢?這個時候,那個好用的『檔案壓縮』技術可就派的上用場了! 因為這些比較大型的檔案透過所謂的檔案壓縮技術之後,可以將它的磁碟使用量降低,可以達到減低檔案容量的效果,此外,有的壓縮程式還可以進行容量限制,使一個大型檔案可以分割成為數個小型檔案,以方便軟碟片攜帶呢! 那麼什麼是『檔案壓縮』呢?我們來稍微談一談它的原理好了。目前我們使用的電腦系統中都是使用所謂的 bytes 單位來計量的!不過,事實上,電腦最小的計量單位應該是 bits 才對啊,此外,我們也知道 1 byte = 8 bits 。但是如果今天我們只是記憶一個數字,亦即是 1 這個數字呢?它會如何記錄?假設一個 byte 可以看成底下的模樣: □□□□□□□□
9.2Linux 系統常見的壓縮指令 • 9.2.1compress
9.2Linux 系統常見的壓縮指令 • 9.2.2gzip (無參數-壓縮, -d-解壓縮) zcat
9.2Linux 系統常見的壓縮指令 • 9.2.3bzip2, bzcat
gzip -c -v a > a.gz a: 98.5% (saved) bzip2 -c -v a > a.bz2 a: 61.731:1, 0.130 bits/byte, 98.38% saved, 4136 in, 67 out. /// mkdir dir 在dir中新增5 files gzip dir >> 不行 bzip2 dir >> 不行 gzip or bzip2 dir/* >> 對個別files 壓縮 結論: gzip or bzip2 不能對dir壓縮 所以才會有tar
tar • 請記得加 -f 參數 指定要 • 壓縮(-c) to dir.tar • 解壓縮(-x) from dir.tar • 其實,記-c -x -f 就好了 • 啊不然 -z & -j 也記一下好了 • -大C 可指定 解壓path (-C只用在解壓) • mkdir dir; cd dir; touch a b c d e • 壓縮: tar -c dir -f dir.tar; ll • rm -rf abc; ll • 解壓縮: tar -xf dir.tar ( or tar -x -fdir.tar)解壓時-f可與其它option寫在一起,壓時不可
tar • cd dir; dd if=/dev/zero of=a bs=1M count=10再做同樣動作產生b & c file (共30MBMB) • 只打包為tar • tar -cv dir -f dir.tar(-f可以放前面,我習慣放後面,比較直覺) • 打包,並以gzip壓 • tar -cvz dir -f dir.tar.gz • 打包,並以bzip2壓 • tar -cvj dir -f dir.tar.gz • lldrwxr-xr-x 2 root root 4096 2013-08-21 02:45 dir-rw-r--r-- 1 root root 31467520 2013-08-21 02:50 dir.tar-rw-r--r-- 1 root root 187 2013-08-21 03:31 dir.tar.bz2-rw-r--r-- 1 root root 30801 2013-08-21 02:50 dir.tar.gz看看 bzip2 & gzip的壓縮比率差多少!!
tar • 解.tar • tar -xv -f dir.tar • 解.tar.gz • tar -xvz -f dir.tar.gz • 解.tar.bz2 • tar -xvj -f dir.tar.bz2 • 檢視(查詢-tv)壓縮檔內容 • tar -tv -f dir.tar (其實檢視全部都用 -tv即可,不需下一行) • tar -tv(加z or j較清楚,但其實不用加) -f dir.tar.gz (or dir.tar.bz2) • 我習慣以-cv or -xv開頭,把 z or j放後面,bird 跟我相反,請習慣把 -f 獨立出來
tar • -v詳細的檔案權限/屬性都會被列出來如果只是想要知道檔名,將 -v 拿掉 • 備份/以下dir時預設會把"/"拿掉,以免不小心回寫時覆蓋掉 • tar -cvjp /etc -f /root/etc.tar.bz2(過程即會提示已把"/"拿掉) • tar -tvj -f /root/etc.tar.bz2 沒有"/" • 若確定要備份有"/"的壓縮檔:tar -cvjpP /etc -f /root/etc.tar.bz2 • tar -tvj -f /root/etc.tar.bz2 有"/“
tar 僅解開單一檔案的方法 • # 1. 先找到我們要的檔名,假設解開 shadow 檔案好了: tar -jtv -f /root/etc.tar.bz2 | grep 'shadow' … -r-------- root/root 1257 2008-09-29 02:21:25 etc/shadow <==這是我們要的! • # 2. 將該檔案解開!語法與實際作法如下: tar -jxv -f 打包檔.tar.bz2 待解開檔名 tar -jxv -f /root/etc.tar.bz2 etc/shadow 不可以寫成 /etc/shadow (輸出)etc/shadow ll etc -r-------- 1 root root 1257 Sep 29 02:21 shadow <==呦喝!只有一個檔案啦! • # 很有趣!此時只會解開一個檔案而已!不過,重點是那個檔名!你要找到正確的檔名。 • # 在本例中,你不能寫成 /etc/shadow !因為記錄在 etc.tar.bz2 內的檔名之故
tar打包某(個或些)目錄,但不含該目錄下的某些檔案之作法tar打包某(個或些)目錄,但不含該目錄下的某些檔案之作法 • 假設我們想要打包 /etc /root 這兩個目錄,新的打包檔案要放置成為 /root/system.tar.bz2, 但卻不想要打包 • 1.) /root/etc* 開頭的檔案,因為該檔案都是剛剛我們才建立的備份檔嘛! • 2.) 當然這個檔案不要打包自己 (因為這個檔案放置在 /root 底下啊!) • --exclude 就是不包含的意思: • tar -cvj /etc /root -f /root/system.tar.bz2 --exclude=/root/etc* --exclude=/root/system.tar.bz2 • (bird把-cvj 要打包的資料夾/etc /root放最後面,跟本人習慣不符,我覺得把要打包的資料夾,緊接著放在-cvj後面較直覺) • 舊版tar 的--exclude與要排除的file or dir可空一格,現在一律要用=
tar • 特殊應用:利用管線命令與資料流 • # 1. 將 /etc 整個目錄一邊打包一邊在 /tmp 解開 • [root@www ~]# cd /tmp • [root@www tmp]# tar -cvf - /etc | tar -xvf - • # 這個動作有點像是 cp -r /etc /tmp 啦 • 這例子還有更棒的應用,請開兩台電腦,把Server_A的/root/tmp 打包為.tar後傳到Server_B並解壓縮在/root/tmp下: • Server_A: tar -cv /root/tmp -f - | ssh root@Server_B_IP tar -xv -f - -C /root/tmp Linux基礎--磁碟檔案系統
tar • cd /root/tmp • tar -cv . -f abc.tar • >> ./abc.tar:檔案是保存檔;未傾印 (因為沒有設 --exclude=abc.tar,意思就是abc.tar本身不打包) • 正確應為 tar -cv . -f abc.tar --exclude=abc.tar Linux基礎--磁碟檔案系統
tar • tar -jtv -f /root/etc.newer.then.passwd.tar.bz2 | grep -v '/$‘ grep -v 指的是後面字串以外的, '/$'指的是: "最後是/的",所以:grep -v '/$‘指的是 "最後不是/的" Linux基礎--磁碟檔案系統
tar • cd /root/tmp • tar -cv . -f abc.tar • >> ./abc.tar:檔案是保存檔;未傾印 (因為沒有設 --exclude=abc.tar,意思就是abc.tar本身不打包) • 正確應為 tar -cv . -f abc.tar --exclude=abc.tar Linux基礎--磁碟檔案系統
9.3 打包指令: tar • 9.3.1tar • 其實最簡單的使用tar 就只要記憶底下的方式即可: • 壓 縮:tar -jcv -f filename.tar.bz2 要被壓縮的檔案或目錄名稱 • 查 詢:tar -jtv -f filename.tar.bz2 • 解壓縮:tar -jxv -f filename.tar.bz2 -C 欲解壓縮的目錄
9.3 打包指令: tar • 使用 tar 加入 -j 或 -z 的參數備份 /etc/ 目錄
9.3 打包指令: tar • 查閱 tar 檔案的資料內容(可察看檔名),與備份檔名有否根目錄的意義
9.3 打包指令: tar • 如果你確定你就是需要備份根目錄到 tar 的檔案中,那可以使用 -P (大寫) 這個選項,請看底下的例子分析
9.3 打包指令: tar • 將備份的資料解壓縮,並考慮特定目錄的解壓縮動作 (-C 選項的應用)
9.3 打包指令: tar • 僅解開單一檔案的方法
9.3 打包指令: tar • 打包某目錄,但不含該目錄下的某些檔案之作法 Linux基礎--檔案與檔案系統的壓縮與打包
9.3 打包指令: tar • 僅備份比某個時刻還要新的檔案
9.3 打包指令: tar • 特殊應用:利用管線命令與資料流
9.4 完整備份工具:dump • 9.4.1dump dump 運作的等級 (level)
9.4 完整備份工具:dump • 用 dump 備份完整的檔案系統
9.4 完整備份工具:dump DUMP: Volume 1 transfer rate: 5550 kB/s DUMP: 5550 blocks (5.42MB) on 1 volume(s) DUMP: finished in 1 seconds, throughput 5550 kBytes/sec DUMP: Date of this level 0 dump: Tue Dec 2 02:53:45 2008 DUMP: Date this dump completed: Tue Dec 2 02:53:47 2008 DUMP: Average transfer rate: 5550 kB/s DUMP: DUMP IS DONE # 在指令的下達方面,dump 後面接 /boot 或 /dev/hdc1 都可以的! # 而執行 dump 的過程中會出現如上的一些訊息,你可以自行仔細的觀察! [root@www ~]# ll /root/boot.dump /etc/dumpdates -rw-rw-r-- 1 root disk 43 Dec 2 02:53 /etc/dumpdates -rw-r--r-- 1 root root 5683200 Dec 2 02:53 /root/boot.dump # 由於加上 -u 的選項,因此 /etc/dumpdates 該檔案的內容會被更新!注意, # 這個檔案僅有在 dump 完整的檔案系統時才有支援主動更新的功能。 # 4. 觀察一下系統主動建立的記錄檔: [root@www ~]# cat /etc/dumpdates /dev/hdc1 0 Tue Dec 2 02:53:47 2008 +0800 [檔案系統] [等級] [ ctime 的時間 ]
9.4 完整備份工具:dump • 用 dump 備份非檔案系統,亦即單一目錄的方法
9.4 完整備份工具:dump • 9.4.2restore
9.5 光碟寫入工具 • 9.5.1mkisofs:建立映像檔
9.5 光碟寫入工具 • 9.5.2cdrecord:光碟燒錄工具
9.5 光碟寫入工具 • 偵測你的燒錄機所在位置
9.5 光碟寫入工具 • 進行 CD 的燒錄動作
9.5 光碟寫入工具 • 進行 DVD-RW 的燒錄動作
9.6 其他常見的壓縮與備份工具 • 9.6.1dd
9.6 其他常見的壓縮與備份工具 • 9.6.2cpio