【轉】tar 命令詳解
阿新 • • 發佈:2018-12-09
tar 命令
[[email protected] ~]# tar [-cxtzjvfpPN] 檔案與目錄 ….Usage: tar [OPTION…] [FILE]…Examples: tar -cf archive.tar foo bar # Create archive.tar from files foo and bar. tar -tvf archive.tar # List all files in archive.tar verbosely. tar -xf archive.tar # Extract all files from archive.tar.更多幫助可以:man tar
必選其中之一引數(而且 一次只能使用其中一個,不能同時使用多個):(這五個引數是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用,但一次只能用其中一個)
- -c:建立一個壓縮檔案的引數指令(create 的意思);
- -x:解開一個壓縮檔案的引數指令!
- -t:檢視 tarfile 裡面的檔案!
- -r:向壓縮歸檔檔案末尾追加檔案
- -u:更新原壓縮包中的檔案
特別注意,在引數的下達中, c/x/t/r/u 僅能存在一個!不可同時存在!因為不可能同時壓縮與解壓縮。可選引數
下面的引數是根據需要在壓縮或解壓檔案時可選的。
- -z:有gzip屬性,即需要用 gzip 壓縮
- -j:有bz2屬性,即需要用 bzip2 壓縮
- -Z:有compress屬性的
- -v :壓縮的過程中顯示檔案(顯示所有過程)!這個常用,但不建議用在背景執行過程!
- -O:將檔案解開到標準輸出
- -f :使用檔名,請留意,在 f 之後要立即接檔名!不要再加引數!
- 例如:使用『 tar -zcvfP tfile sfile』就是錯誤的寫法,要寫成『 tar -zcvPf tfile sfile』才對喔!
- -p :使用原檔案的原來屬性(屬性不會依據使用者而變)
- -P :可以使用絕對路徑來壓縮!
- -N :比後面接的日期(yyyy/mm/dd)還要新的才會被打包進新建的檔案中!
- --exclude FILE:在壓縮的過程中,不要將 FILE 打包!
- -f: 使用檔案名字,切記,這個引數是最後一個引數,後面只能接檔案名。
# tar -cf all.tar *.jpg // 這條命令是將所有.jpg的檔案打成一個名為all.tar的包。-c是表示產生新的包,-f指定包的檔名。 # tar -rf all.tar *.gif // 這條命令是將所有.gif的檔案增加到all.tar的包裡面去。-r是表示增加檔案的意思。 # tar -uf all.tar logo.gif // 這條命令是更新原來tar包all.tar中logo.gif檔案,-u是表示更新檔案的意思。 # tar -tf all.tar // 這條命令是列出all.tar包中所有檔案,-t是列出檔案的意思 # tar -xf all.tar // 這條命令是解出all.tar包中所有檔案,-x是解開的意思 檢視
tar -tf aaa.tar.gz // 在不解壓的情況下檢視壓縮包的內容
壓縮
- tar –cvf jpg.tar *.jpg // 將目錄裡所有jpg檔案打包成tar.jpg
- tar –czf jpg.tar.gz *.jpg // 將目錄裡所有jpg檔案打包成jpg.tar後,並且將其用gzip壓縮,生成一個gzip壓縮過的包,命名為jpg.tar.gz
- tar –cjf jpg.tar.bz2 *.jpg // 將目錄裡所有jpg檔案打包成jpg.tar後,並且將其用bzip2壓縮,生成一個bzip2壓縮過的包,命名為jpg.tar.bz2
- tar –cZf jpg.tar.Z *.jpg // 將目錄裡所有jpg檔案打包成jpg.tar後,並且將其用compress壓縮,生成一個umcompress壓縮過的包,命名為jpg.tar.Z
解壓
- tar –xvf file.tar // 解壓 tar包
- tar -zxvf file.tar.gz // 解壓tar.gz
- tar -jxvf file.tar.bz2 // 解壓 tar.bz2
- tar –Zxvf file.tar.Z // 解壓tar.Z
1、*.tar 用 tar –xvf 解壓2、*.gz 用 gzip -d 或者 gunzip 解壓3、*.tar.gz 和 *.tgz 用 tar –xzf 解壓4、*.bz2 用 bzip2 -d 或者用 bunzip2 解壓5、*.tar.bz2 用 tar –xjf 解壓6、*.Z 用 uncompress 解壓7、*.tar.Z 用 tar –xZf 解壓範例:
- 範例一:將整個 /etc 目錄下的檔案全部打包成為 /tmp/etc.tar
- [[email protected] ~]# tar -cvf /tmp/etc.tar /etc <==僅打包,不壓縮!
- [[email protected] ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包後,以 gzip 壓縮
- [[email protected] ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包後,以 bzip2 壓縮
- # 特別注意,在引數 f 之後的檔案檔名是自己取的,我們習慣上都用 .tar 來作為辨識。
- # 如果加 z 引數,則以 .tar.gz 或 .tgz 來代表 gzip 壓縮過的 tar file ~
- # 如果加 j 引數,則以 .tar.bz2 來作為附檔名啊~
- # 上述指令在執行的時候,會顯示一個警告訊息:
- # 『tar: Removing leading `/' from member names』那是關於絕對路徑的特殊設定。
- 範例二:查閱上述 /tmp/etc.tar.gz 檔案內有哪些檔案?
- [[email protected] ~]# tar -ztvf /tmp/etc.tar.gz
- # 由於我們使用 gzip 壓縮,所以要查閱該 tar file 內的檔案時,
- # 就得要加上 z 這個引數了!這很重要的!
- 範例三:將 /tmp/etc.tar.gz 檔案解壓縮在 /usr/local/src 底下
- [[email protected] ~]# cd /usr/local/src
- [[email protected] src]# tar -zxvf /tmp/etc.tar.gz
- # 在預設的情況下,我們可以將壓縮檔在任何地方解開的!以這個範例來說,
- # 我先將工作目錄變換到 /usr/local/src 底下,並且解開 /tmp/etc.tar.gz ,
- # 則解開的目錄會在 /usr/local/src/etc 呢!另外,如果您進入 /usr/local/src/etc
- # 則會發現,該目錄下的檔案屬性與 /etc/ 可能會有所不同喔!
- 範例四:在 /tmp 底下,我只想要將 /tmp/etc.tar.gz 內的 etc/passwd 解開而已
- [[email protected] ~]# cd /tmp
- [[email protected] tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
- # 我可以透過 tar -ztvf 來查閱 tarfile 內的檔名稱,如果單隻要一個檔案,
- # 就可以透過這個方式來下達!注意到! etc.tar.gz 內的根目錄 / 是被拿掉了!
- 範例五:將 /etc/ 內的所有檔案備份下來,並且儲存其許可權!
- [[email protected] ~]# tar -zxvpf /tmp/etc.tar.gz /etc
- # 這個 -p 的屬性是很重要的,尤其是當您要保留原本檔案的屬性時!
- 範例六:在 /home 當中,比 2005/06/01 新的檔案才備份
- [[email protected] ~]# tar -N '2005/06/01' -zcvf home.tar.gz /home
- 範例七:我要備份 /home, /etc ,但不要 /home/dmtsai
- [[email protected] ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
- 範例八:將 /etc/ 打包後直接解開在 /tmp 底下,而不產生檔案!
- [[email protected] ~]# cd /tmp
- [[email protected] tmp]# tar -cvf - /etc | tar -xvf -
- # 這個動作有點像是 cp -r /etc /tmp 啦~依舊是有其有用途的!
- # 要注意的地方在於輸出檔變成 - 而輸入檔也變成 - ,又有一個 | 存在~
- # 這分別代表 standard output, standard input 與管線命令啦!
- # 這部分我們會在 Bash shell 時,再次提到這個指令跟大家再解釋囉!
gzip的壓縮詳解
- gunzip的用法格式
- gunzip [-acfhlLnNqrtvV][-s ][檔案...]
- 或者
- gunzip [-acfhlLnNqrtvV][-s ][目錄]
- 主要引數
- -a或--ascii:使用ASCII文字模式。
- -c或--stdout或--to-stdout:把解壓後的檔案輸出到標準輸出裝置。
- -f或-force:強行解開壓縮檔案,不理會檔名稱或硬連線是否存在,以及該檔案是否為符號連線。
- -h或--help:線上幫助。
- -l或--list:列出壓縮檔案的相關資訊。
- -L或--license:顯示版本與版權資訊。
- -n或--no-name:解壓縮時,若壓縮檔案內含有原來的檔名稱及時間戳記,則將其忽略不予處理。
- -N或--name:解壓縮時,若壓縮檔案內含有原來的檔名稱及時間戳記,則將其回存到解開的檔案上。
- -q或--quiet:不顯示警告資訊。
- -r或--recursive:遞迴處理,將指定目錄下的所有檔案及子目錄一併處理。
- -S或--suffix:更改壓縮字尾字串。
- -t或--test:測試壓縮檔案是否正確無誤。
- -v或--verbose:顯示指令執行過程。
- -V或--version:顯示版本資訊。
- gzip –c filename > filename.gz // Linux壓縮保留原始檔的方法
- gunzip –c filename.gz > filename // Linux解壓縮保留原始檔的方法