摘要:[System],[系統]FreeBSD Tar的使用用法
FreeBSD Tar的使用用法
之前利用Linux 下將一個Office2007的資料夾作成了一個tar檔案,然後用ftp直接丟到另外一台freebsd的file server下,想說直接用tar的指令來解包。但是不管怎麼用都不行…因此擱置了快兩個禮拜…今天又被客人催了一下…馬上去Google一下
果然freebsd與linux的指令有一些些不同…轉貼一位freebsd達人的文章
-------------------------------------
tar (tape archive) 原本是設計用來將文件打包到磁帶中的,我們也可以將檔案或是目錄打包成一個單一的檔案,必要時再用同一個程式來將資料全部還原或是只解開部份的資料,正因為它可以備份檔案或目錄,深受大家的愛用。
常用參數:
* 指定動作 :
o -c create,新增一個備份檔
o -t list,顯示備份檔中的檔案清單
o -x extract,解開備份檔中的檔案
* 指定檔案:
o -f file,讀/寫指定的檔案
* 壓縮方式:
o -z gzip,備份的東西要用 gzip 壓縮/解壓縮
o -y bzip,備份的東西要用 bzip 壓縮/解壓縮,也可以用 -j
* 其它:
o -p permissions,保留原來的權限
o -v verbose,備份的內容要顯示在畫面
o -C (大寫 C),cd 先切換目錄
由於 tar 的功能非常的多,指令可用的選項令人眼花瞭亂,下面只示範最常用的,有興趣再自己用 man tar 好好的研究囉!
1-1 以 tar 打包要備份的資料
如果沒有什麼特殊需求,利用 tar 備份檔案只要用到 -c (新增) ,-p (保留權限設定),-f (指定檔名),頂多再加個 -v 看一下打包的過程。
例如:
tar -cpvf /home/backup/etc.tar /etc
上例將 /etc 目錄中所有的檔案打包到 /home/backup/etc.tar 中。
也可以同時備份多個目錄,將要打包的清單(以空白分隔)接在最後面即可。下面的例子將 /etc , /usr/local/etc 打包在 etc.tar 中:
tar -cpvf /home/backup/etc.tar /etc /usr/local/etc
我們也可以使用:
tar -czpvf /home/backup/etc.tgz /etc
和前面的例子比較,多了個參數 z ,也就是將 tar 打包完的檔案再利用 gzip 壓縮,所以新產生有經過壓縮處理的備份檔我們也將檔名命名為 etc.tgz (.tgz 結尾),也有人用 .tar.gz ,端看個人習慣。
咦~好奇的人可能會想到 FreeBSD 的 packages 檔名好像叫 *.tgz 或 *.tbz,和 tar , gzip , bzip 有沒有關啊?有興趣可以找個 FreeBSD 的 package ,用 tar 來打開包裝看看哦!!
另外,比較一下這兩個同樣是備份 /usr/local/etc 的指令有何不同?
tar -czvf /home/backup/local.etc.1.tgz /usr/local/etc
tar -czvf /home/backup/local.etc.2.tgz -C /usr/local etc
由於 tar 預設在備份時會儲存檔案的路徑 (但是自動去掉開頭的第一個斜線) ,也就是 /usr/local/etc/rc.d 在 local.etc.1.tgz 中會變成 usr/local/etc/rc.d,如果我們連 usr/local 都不想要,打包時可以利用 -C (大寫字母) 這個參數來控制路徑的保留層次,像前面第二個例子加了 -C /usr/local ,tar 會先切換至 /usr/local 目錄才備份 etc,所以在 local.etc.2.tgz 中 /usr/local/etc/rc.d 變成 etc/rc.d 儲存起來。
1-2 查看 tar 打包的檔案
要查看以 tar 打包的檔案只要利用 -t 這個動作參數即可。
例如:
tar -tvf /home/backup/etc.tar
上例會將 /home/backup/etc.tar 中的檔案清單顯示出來。
如果備份時有用 gzip 壓縮過則可以加上 -z :
tar -tzvf /home/backup/etc.tgz
如果備份時用 bzip 壓縮過則加上 -y 或是 -j:
tar -tyvf /home/backup/etc.tbz
1-3 解開 tar 打包的檔案
要解開 tar 封裝的檔案是利用 -x 這個動作參數,再搭配 -z , -y (-j) 解壓縮。如果想保留原來的權限設定則要記得使用 -p,至於要不要使用 -C (大寫字母) 則要看當初在打包時有沒有使用及自己想要放置的路徑而定,最容易犯的毛病大多是解錯路徑,所以在使用 -x 解開時一定要記得先用 -t 查看一下當初是怎麼打包的,最保險的方法是先解到一個暫存的地方,再將需要的檔案複製/搬移到目的地。
將 /home/backup/etc.tgz 中的東西在目前所在的目錄解開:
tar -xzvf /home/backup/etc.tgz
將 /home/backup/etc.tgz 中的東西在 /home 中解開:
tar -xzvf /home/backup/etc.tgz -C /home
將 /home/backup/etc.tgz 中的東西在 /home 中解開,並保留原始的權限:
tar -xzpvf /home/backup/etc.tgz -C /home
1-4 只解開 tar 打包的部份檔案
只解出 /home/backup/etc.tgz 中的 etc/group , etc/master.passwd 兩個檔案:
tar -xzvf /home/backup/etc.tgz etc/group etc/master.passwd
將 /home/backup/etc.tgz 中凡是叫 etc/rc* 通通解開,其它的不要:
tar -xzvf /home/backup/etc.tgz 'etc/rc*'
將 /home/backup/etc.tgz 中的檔案解開,但是 rc.d 目錄中的東西不要:
tar -xzvf /home/backup/etc.tgz --exclude='rc.d/*'
以上提到的方法也可以應用在打包時 (-c) 及查看清單時 (-t) 。
1-5 利用 tar 直接複製整個目錄到另一個目錄中
利用 tar 和 pipe 的技巧,可以做整個目錄直接複製,不過這個方法並不保證完整哦,畢竟它的方式不若 dump + restore 完備。
假設我想把 /usr 中所有的東西複製到 /mnt/usr 中,就執行底下的指令:
tar cf - /usr | (cd /mnt ; tar xvfBp -)
------------------------------------------
我只是個小小的入門者