简要知识点:
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 的壓縮
gzip和bzip2命令僅能針對一個檔案來壓縮與解壓縮。如果要对目录进行压缩,就要使用『打包軟體, 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/