檔案的壓縮與打包


		 壓縮或打包指令 		 副檔名

compress .Z
bzip2 .bz2
gzip .gz
tar .tar
tar+gzip .tar.gz
  1. compress:無法解開 *.gz 檔,已少人用了。
    [root@dywHome2 test]# compress [-d] filename 
    參數: 
    -d    :解壓縮 
    
    #範例:
    [dywang@dywOffice tmp]$ compress test.txt
    [dywang@dywOffice tmp]$ compress -d test.txt.Z
    
  2. bzip2,bzcat:以 bzcat 直接讀取 .bz2 壓縮檔案內容。
    [root@dywHome2 test]# bzip2 [-d] filename 
    參數: 
    -d    :解壓縮 
    [root@dywHome2 test]# bzcat filename.bz2 
    
    #範例:
    [dywang@dywOffice tmp]$ bzip2 -z test.txt
    [dywang@dywOffice tmp]$ bzcat test.txt.bz2
    echo Hello Latex!
    [dywang@dywOffice tmp]$ bzip2 -d test.txt.bz2
    

  3. gzip,zcat:以 zcat 直接讀取 .gz 壓縮檔案內容。
    [root@dywHome2 test]# gzip [-d] filename 
    參數: 
    -d    :解壓縮 
    -# --fast --best:# 為數字,--fast 是 1 壓縮速度最快;--best 是 9 最佳壓縮比,預設是 6。
    [root@dywHome2 test]# zcat filename.gz 
    
    #範例:
    [dywang@dywOffice tmp]$ gzip test.txt
    [dywang@dywOffice tmp]$ zcat test.txt.gz
    echo Hello Latex!
    [dywang@dywOffice tmp]$ gzip -d test.txt.gz
    [dywang@dywOffice tmp]$ gzip -9 test.txt
    

  4. tar:多用途打包壓縮指令。
    [root@linux ~]# tar [-cxtzjvfpPN] 檔案與目錄 ....
    參數:
    -c  :建立一個打包檔案(create);
    -x  :解開一個打包檔案; 
    -t  :查看 tarfile 內的檔案;(c/x/t 不可同時存在!)
    -z  :同時用 gzip 壓縮;
    -j  :同時用 bzip2 壓縮;
    -v  :壓縮的過程中顯示檔案;
    -f  :使用檔名,在 f 之後要立即接檔名!
    -p  :保留檔案的原來屬性(屬性不會依據使用者而變) 
    -P  :保留絕對路徑;
    -N  :比後面接的日期(yyyy/mm/dd)還要新的才會被打包; 
    --exclude FILE:排除 FILE 。 
    
    #範例:
    #範例一:將檔案 txt 打包為 txt.tar 
    [root@dywOffice tmp]# tar -cvf txt.tar txt
    
    #範例二:將整個 /etc 目錄下的檔案全部打包成為 /tmp/etc.tar 
    [root@dywOffice tmp]# tar -cvf /tmp/etc.tar /etc %*<== 僅打包,不壓縮*)
    [root@dywOffice tmp]# tar -zcvf /tmp/etc.tar.gz /etc %*<== 打包後,以 gzip 壓縮*)
    [root@dywOffice tmp]# tar -jcvf /tmp/etc.tar.bz2 /etc %*<== 打包後,以 bzip2 壓縮*)
    
    #範例三:查閱 /tmp/etc.tar.gz 檔案內有那些檔案?
    [root@dywOffice tmp]# tar -ztvf /tmp/etc.tar.gz 
    
    #範例四:將 /tmp/etc.tar.gz 檔案解壓縮
    [root@dywOffice tmp]# tar -zxvf /tmp/etc.tar.gz
    
    #範例五:只將 /tmp/etc.tar.gz 內的 etc/passwd 解開
    [root@dywOffice tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
    
    #範例六:將 /home/csie/testdir 內的所有檔案備份(打包壓縮),並保存其絕對路徑
    [root@dywOffice tmp]# tar -zcvPf testdir.tar.gz /home/csie/testdir
    
    #範例七:將 /etc/ 內的所有檔案備份,並保存其權限
    [root@dywOffice tmp]# tar -zcvpf /tmp/etc.tar.gz /etc
    
    #範例八:在 /home 當中,比 2007/11/30 新的檔案才備份
    [root@dywOffice tmp]# tar -N '2007/11/30' -zcvf home.tar.gz /home
    
    #範例九:備份 /home ,但不要 /home/csie/tmp 
    [root@dywOffice tmp]# tar -zcvf home.tar.gz /home  --exclude /home/csie/tmp
    
    # 原始檔不會被取代。
    # tarfile 指打包而沒有壓縮的檔案,而 tarball 是經由 tar 打包再壓縮的檔案。
    # dd 可以用來備份整顆 partition 或整顆硬碟, tar 則可以用來備份關鍵資料。
    

練習題

  1. 附檔名 .Z 的壓縮檔案,是以什麼指令壓縮產生?
    Sol. compress
  2. 附檔名 .bz2 的壓縮檔案,是以什麼指令壓縮產生?
    Sol. bzip2
  3. 附檔名 .gz 的壓縮檔案,是以什麼指令壓縮產生?
    Sol. gzip
  4. 附檔名 .tar 的打包檔案,是以什麼指令打包產生?
    Sol. tar
  5. 附檔名 .tar.gz 的打包壓縮檔案,是以什麼指令產生?
    Sol. tar+gzip
  6. 如何在不解壓縮下,直接讀取壓縮檔 foo.bz2 的內容?
    Sol. bzcat foo.bz2
  7. 如何在不解壓縮下,直接讀取壓縮檔 foo.gz 的內容?
    Sol. zcat foo.gz
  8. 如何以 gzip 用最快速度壓縮檔案 foo?
    Sol. gzip -1 foo 或 gzip –fast foo
  9. 如何以 gzip 用最佳壓縮比壓縮檔案 foo?
    Sol. gzip -9 foo 或 gzip –best foo
  10. 如何將整個 /etc 目錄下的檔案全部打包成為 /tmp/etc.tar?
    Sol. tar -cvf /tmp/etc.tar /etc
  11. 如何將整個 /etc 目錄下的檔案全部打包,且以 gzip 壓縮成為 /tmp/etc.tar.gz?
    Sol. tar -zcvf /tmp/etc.tar.gz /etc
  12. 如何將整個 /home 目錄下的檔案全部打包,且以 gzip 壓縮成為 /tmp/home.tar.gz?
    Sol. tar -zcvf /tmp/home.tar.gz /home
  13. 如何查閱 tar 打包壓縮檔 /tmp/etc.tar.gz 內有那些檔案?
    Sol. tar -ztvf /tmp/etc.tar.gz
  14. 如何將 /tmp/home.tar.gz 檔案解壓縮在根目錄 / ?
    Sol. tar -zxvf /home/etc.tar.gz /
  15. 如何將 /tmp/etc.tar.gz 檔案解壓縮在目前目錄?
    Sol. tar -zxvf /tmp/etc.tar.gz
  16. 如何將 /home/csie/testdir 內的所有檔案備份(打包壓縮),並保存其絕對路徑?
    Sol. tar -zcvPf testdir.tar.gz /home/csie/testdir
  17. 如何將 /etc/ 內的所有檔案備份為 /tmp/etc.tar.gz 下,並且保存其權限?
    Sol. tar -zcvpf /tmp/etc.tar.gz /etc
  18. 如何將 /home 中,比 2008/11/30 新的檔案備份到 /tmp/home.tar.gz?
    Sol. tar -N '2008/11/30' -zcvf /tmp/home.tar.gz /home
  19. 如何將備份 /home 成 myhome.tar.gz,但不要 /home/test ?
    Sol. tar -zcvf myhome.tar.gz /home/* –exclude /home/test

  DYWANG_HOME