现在的位置: 首页 > 综合 > 正文

档案与档案系统的压缩与打包

2013年10月03日 ⁄ 综合 ⁄ 共 3627字 ⁄ 字号 评论关闭

 

简要知识点:

1. Linux的環境中,壓縮檔案的副檔名大多是:『*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2

*.Z         compress 程式壓縮的檔案;(compress压缩已经过时了)
*.gz        gzip 程式壓縮的檔案;
*.bz2       bzip2 程式壓縮的檔案;
*.tar       tar 程式打包的資料,並沒有壓縮過;
*.tar.gz    tar 程式打包的檔案,其中並且經過 gzip 的壓縮
*.tar.bz2   tar 程式打包的檔案,其中並且經過 bzip2 的壓縮

 

gzipbzip2命令僅能針對一個檔案來壓縮與解壓縮。如果要对目录进行压缩,就要使用『打包軟體, tar』先把目录打包成tar文件,再进行压缩

 

2. 單純的 tar 功能僅是『打包』而已,亦即是將很多檔案集結成為一個檔案,他並沒有提供壓縮的功能。不过tar 可以与壓縮功能結合在一起,为使用者提供更方便並且更強大的壓縮與打包功能,即使用tar命令可以同时打包兼压缩,也可以同时解压缩兼散包。

 

 

3. 主要压缩/解压缩命令例子

使用gzip来压缩文件

gzip -v man.config  <==生成.gz文件

 

使用gzip来解压缩.gz文件

gzip -d man.config.gz
# 也可以使用 gunzip来替代gzip -d 來進行解壓縮!
注意:gzip -d 解压缩后會將原本的 .gz file刪除,如果想保留.gz file,则要加上-c参数
gzip -c man.config > man.config.gz

 

使用bzip2来压缩文件

bzip2 -z man.config  <==生成.bz2文件

 

使用bzip2来解压缩.bz2文件

bzip2 -d man.config.bz2

 

注意:-c, -t, -x参数不可同時出現在tar命令的

使用tar来把整个/etc目录打包成.tar file,然后再压缩成.tar.gz file

tar -zcv -f /root/etc.tar.gz /etc
 

使用tar来把整个/etc目录打包成.tar file,然后再压缩成.tar.bz2 file

tar -jcv -f /root/etc.tar.bz2 /etc
 
同时把多个文件or目录(/etc and /home目录)打包到一个压缩文件内
tar -jcv -f /root/etc_root.tar.bz2 /etc /home
 
ect.tar.gz file解压成etc.tar file,然后再在当前目录将其散包(散包后为etc目录)
tar -zxv -f /root/etc.tar.gz

 

 

ect.tar.bz2 file解压成etc.tar file,然后再在当前目录将其散包(散包后为etc目录)
tar -jxv -f /root/etc.tar.bz2

 

将压缩打包文件解压缩到指定目录,而不是当前目录

tar -jxv -f /root/etc.tar.bz2 -C /tmp <--通过-C参数
tar -zxv -f /root/etc.tar.gz -C /tmp  <--通过-C参数

 

查閱 tar 檔案的資料內容

tar -jtv -f /root/etc.tar.bz2

 

For more details, read following sections.

 

gzip语法

[root@www ~]# gzip [-cdtv#] 檔名
[root@www ~]# zcat 檔名.gz
選項與參數:
-c  :將壓縮的資料輸出到螢幕上,可透過資料流重導向來處理;
-d  :解壓縮的參數;
-t  :可以用來檢驗一個壓縮檔的一致性~看看檔案有無錯誤;
-v  :可以顯示出原檔案/壓縮檔案的壓縮比等資訊;
-#  :壓縮等級,-1 最快,但是壓縮比最差、-9 最慢,但是壓縮比最好!預設是 -6
 
範例一:將 /etc/man.config 複製到 /tmp ,並且以 gzip 壓縮
 [root@www tmp]# gzip -v man.config

 

範例二:將範例一的檔案解壓縮
[root@www tmp]# gzip -d man.config.gz
# 也可以使用 gunzip来替代gzip -d 來進行解壓縮!
#  gzip 相反,gzip -d 將原本的.gz刪除,產生原本的 man.config 檔案。
 
範例三:將範例三解開的 man.config 用最佳的壓縮比壓縮,並保留原本的檔案
[root@www tmp]# gzip -9 -c man.config > man.config.gz

 

zcat命令查看.gz file里的档案内容

zcat man.config.gz

 

 

bzip2语法

[root@www ~]# bzip2 [-cdkzv#] 檔名
選項與參數:
-c  :將壓縮的過程產生的資料輸出到螢幕上!
-d  :解壓縮的參數
-k  :保留原始檔案,而不會刪除原始的檔案喔!
-z  :壓縮的參數
-v  :可以顯示出原檔案/壓縮檔案的壓縮比等資訊;
-#  :與 gzip 同樣的,都是在計算壓縮比的參數, -9 最佳, -1 最快!
 
範例一:將剛剛的 /tmp/man.config  bzip2 壓縮,生成.bz2 file
[root@www tmp]# bzip2 -z man.config 
 
範例二:將範例一的檔案解壓縮
[root@www tmp]# bzip2 -d man.config.bz2
 
範例三:將範例三解開的 man.config 用最佳的壓縮比壓縮,並保留原本的檔案
[root@www tmp]# bzip2 -9 -c man.config > man.config.bz2

 

 

bzcat命令查看.bz2 file里的档案内容

[root@www tmp]# bzcat man.config.bz2
# 此時螢幕上會顯示 man.config.bz2 解壓縮之後的檔案內容!!

 

 

tar命令

语法:

[root@www ~]# tar [-j|-z] [cv] [-f 建立的檔名] filename <==打包與壓縮
[root@www ~]# tar [-j|-z] [tv] [-f 建立的檔名]             <==察看檔名
[root@www ~]# tar [-j|-z] [xv] [-f 建立的檔名] [-C 目錄]   <==解壓縮
選項與參數:
-c  :建立打包檔案,可搭配 -v 來察看過程中被打包的檔名(filename)
-t  :察看打包檔案的內容含有哪些檔名,重點在察看『檔名』就是了;
-x  :解打包或解壓縮的功能,可以搭配 -C (大寫) 在特定目錄解開
      特別留意的是, -c, -t, -x 不可同時出現在一串指令列中。
-j  :透過 bzip2 的支援進行壓縮/解壓縮:此時檔名最好為 *.tar.bz2
-z  :透過 gzip  的支援進行壓縮/解壓縮:此時檔名最好為 *.tar.gz
-v  :在壓縮/解壓縮的過程中,將正在處理的檔名顯示出來!
-f filename-f 後面要立刻接要被處理的檔名!建議 -f 單獨寫一個選項囉!
-C 目錄    :這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項。
 
其他参数:
-p  保留備份資料的原本權限與屬性,常用於備份(-c)重要的設定檔
-P  保留絕對路徑,亦即允許備份資料中含有根目錄存在之意
--exclude=FILE在壓縮的過程中,不要將 FILE 打包 

 

其實最簡單的使用 tar 就只要記憶底下的方式即可:

  • 壓 縮tar -jcv -f filename.tar.bz2 要被壓縮的檔案或目錄名稱
  • 查 詢tar -jtv -f filename.tar.bz2
  • 解壓縮tar -jxv -f filename.tar.bz2 -C 欲解壓縮的目錄

由於『 -f filename 』是緊接在一起的,過去很多文章常會寫成『-jcvf filename』,這樣是對的, 但由於選項的順序理論上是可以變換的,所以很多讀者會誤認為『-jvfc filename』也可以~事實上這樣會導致產生的檔名變成 c 因為 -fc 嘛!所以囉,建議您在學習 tar 時,將『 -f filename 』與其他選項獨立出來,會比較不容易發生問題。

 

 

对于查看命令
tar -jtv -f /root/etc.tar.bz2

如果加上 -v 這個選項時,詳細的檔案權限/屬性都會被列出來!如果只是想要知道檔名而已, 那麼就將 -v 拿掉即可

 

另外上述命令的输出中我們可以發現一件很有趣的事情,那就是每個檔名都沒了根目錄了!這也是上一個練習中出現的那個警告訊息『tar: Removing leading `/' from member names(移除了檔名開頭的 `/' )』所告知的情況。

 

為什麼要拿掉根目錄呢?主要是為了安全!我們使用 tar 備份的資料可能會需要解壓縮回來使用, tar 所記錄的檔名 (就是我們剛剛使用 tar -jtvf 所察看到的檔名) 那就是解壓縮後的實際檔名。 如果拿掉了根目錄,假設你將備份資料在 /tmp 解開,那麼解壓縮的檔名就會變成『/tmp/etc/xxx』。 但『如果沒有拿掉根目錄,解壓縮後的檔名就會是絕對路徑, 亦即解壓縮後的資料一定會被放置到 /etc/xxx 去!』如此一來,你的原本的 /etc/

抱歉!评论已关闭.