Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux tar 指令完整教學:壓縮、解壓、排除、權限保留與管線串流技巧

編輯:Linux 教學

tar 是 Linux 最核心的歸檔工具,能將整個目錄樹打包成單一檔案,並配合 gzip、bzip2、xz 等演算法壓縮。本文系統整理常用參數、八大實戰範例,並深入解析絕對路徑與權限保留的陷阱,助您從入門到精通。

一、核心參數速查表

參數功能備註
-c建立新歸檔create
-x解開歸檔extract
-t列出歸檔內容list
-zgzip 壓縮/解壓.tar.gz / .tgz
-jbzip2 壓縮/解壓.tar.bz2
-Jxz 壓縮/解壓.tar.xz (現代推薦)
-v顯示處理檔案避免背景執行使用
-f指定歸檔檔名須緊接檔名,勿夾帶其他參數
-p保留原始權限/屬性權限不隨使用者變動
-P保留絕對路徑預設會移除開頭 /
-N DATE僅打包比日期新的檔格式 yyyy/mm/dd
--exclude PATTERN排除符合模式的檔案可重複使用

鐵律:c、x、t 三者必須且只能擇一出現。

二、八大經典範例

範例 1:打包 /etc 目錄(三種壓縮格式)

# 僅打包
tar -cvf /tmp/etc.tar /etc
# gzip 壓縮(最常用)
tar -zcvf /tmp/etc.tar.gz /etc
# bzip2 壓縮(壓縮率較高)
tar -jcvf /tmp/etc.tar.bz2 /etc

執行時會出現 tar: Removing leading '/' from member names 警告,見後文「絕對路徑陷阱」。

範例 2:查看歸檔內容

tar -ztvf /tmp/etc.tar.gz

因使用 gzip,故須加 -z;若為 bzip2 則改 -j。

範例 3:解壓至指定目錄

cd /usr/local/src
tar -zxvf /tmp/etc.tar.gz
# 解壓後檔案位於 /usr/local/src/etc

範例 4:僅解壓單一檔案

cd /tmp
tar -zxvf /tmp/etc.tar.gz etc/passwd
# 注意:歸檔內路徑不含開頭 /

範例 5:保留權限備份 /etc

tar -zcvpf /tmp/etc.tar.gz /etc

-p 確保還原時 uid/gid/mode 不變,備份系統配置必加。

範例 6:增量備份 — 僅打包 2005/06/01 後修改的檔案

tar -N '2005/06/01' -zcvf home.tar.gz /home

範例 7:排除特定目錄

tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

範例 8:管線串流複製目錄樹(不產生中間檔)

cd /tmp
tar -cvf - /etc | tar -xvf -
# 相當於 cp -r /etc /tmp,但保留更完整屬性

- 代表標準輸出/輸入,配合管線 | 實現「邊讀邊寫」。

三、絕對路徑與權限的兩大陷阱

1. 絕對路徑預設被截斷

使用 tar -cvf /tmp/etc.tar /etc 時,歸檔內會將 /etc 記錄為 etc(移除開頭 /)。這是安全機制:防止惡意歸檔在解壓時覆蓋系統關鍵目錄(如 /etc/passwd)。

  • 若需保留絕對路徑,加上 -P(大寫):tar -cvPf /tmp/etc.tar /etc
  • 解壓時同樣需 -P 才會還原至原絕對路徑

2. 權限保留靠 -p(小寫)

預設解壓時,檔案擁有者會變為執行解壓的使用者。加上 -p 可保留原始 uid/gid/mode/ACL/擴充屬性,系統備份、遷移時不可或缺。

四、現代最佳實踐建議

  • 優先使用 -J (xz) 壓縮:壓縮率最佳、解壓速度尚可,tar -Jcvf data.tar.xz /data
  • 搭配 pv 顯示進度:tar -cvf - /data | pv | gzip > data.tar.gz
  • 大型備份啟用多執行緒壓縮:tar -I 'pigz -p4' -cvf data.tar.gz /data
  • 定期驗證歸檔完整性:tar -tvf backup.tar.gz >/dev/null && echo OK
Copyright © Windows教程網 All Rights Reserved