| 參數 | 演算法 | 副檔名慣例 | 特性 |
-z | gzip | .tar.gz / .tgz | 速度快、相容性最好、壓縮率中等 |
-j | bzip2 | .tar.bz2 / .tbz2 | 壓縮率較高、速度較慢 |
-J | xz (LZMA2) | .tar.xz / .txz | 壓縮率最高、速度最慢、現代標準 |
--zstd | Zstandard | .tar.zst | 極速、高壓縮率、需新版 tar/zstd |
-Z | compress | .tar.Z | 舊 Unix 標準、已淘汰 |
--use-compress-program | 自訂 | .tar.custom | 指定任何支援 -d 的程式 (如 lz4, lzip) |
解壓時通常不需指定壓縮參數,tar 會自動偵測 (除非使用非標準管道)。
常用輔助參數
| 參數 | 功能 |
-f 檔案 | 指定歸檔檔案 (預設為磁帶裝置 /dev/rmt0,實務必加) |
-v | 詳細顯示處理檔案 |
-C 目錄 | 切換到指定目錄再操作 (解壓目標/打包來源) |
-p | 保留權限/擁有者/時間戳記 (root 解壓預設開啟) |
-P | 保留絕對路徑 (預設移除前導 /,慎用) |
-k | 保留現有檔案,不覆蓋 |
-h | 解析符號連結 (打包連結指向的實體檔案) |
-l | 僅限單一檔案系統 (不跨掛載點) |
-X 排除檔 | 從檔案讀取排除模式清單 |
--exclude=模式 | 直接指定排除模式 |
--numeric-owner | 以 UID/GID 儲存而非使用者/群組名 (跨系統備份必備) |
--acls / --xattrs / --selinux | 保留 ACL/擴充屬性/SELinux 上下文 |
-W | 寫入後驗證 |
--checkpoint[=N] | 每 N 筆顯示進度 (配合 --checkpoint-action=exec=命令) |
--totals | 顯示總位元組數 |
實戰範例
1. 基本打包/解包 (無壓縮)
tar -cf backup.tar /home/user/data # 打包
tar -xf backup.tar # 解包到目前目錄
tar -tf backup.tar # 僅列表
2. 壓縮備份 (最常用)
# gzip (平衡)
tar -czf backup.tar.gz /home/user/data
tar -xzf backup.tar.gz
# xz (最高壓縮,備份存檔首選)
tar -cJf backup.tar.xz /home/user/data
tar -xJf backup.tar.xz
# zstd (極速,大數據/頻繁備份)
tar --zstd -cf backup.tar.zst /home/user/data
tar --zstd -xf backup.tar.zst
3. 指定解壓目標目錄
tar -xzf backup.tar.gz -C /restore/path
4. 排除特定目錄/檔案
tar -czf backup.tar.gz /home/user/data --exclude='*.log' --exclude='cache' --exclude='.git'
5. 增量備份 (快照檔)
# 完全備份 (建立快照)
tar -czf full.tar.gz /data --listed-incremental=snapshot.snar
# 增量備份 (依快照比較)
tar -czf inc1.tar.gz /data --listed-incremental=snapshot.snar
tar -czf inc2.tar.gz /data --listed-incremental=snapshot.snar
6. 遠端備份 (SSH 管道)
# 本地打包 -> 遠端存檔
tar -czf - /data | ssh user@backupsrv "cat > /backup/data_$(date +%F).tar.gz"
# 遠端打包 -> 本地存檔
ssh user@srcsrv "tar -czf - /data" > /backup/data_$(date +%F).tar.gz
7. 保留完整權限/屬性 (系統級備份/遷移)
tar -czpf system_backup.tar.gz / --numeric-owner --acls --xattrs --selinux --one-file-system --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/tmp --exclude=/var/tmp --exclude=/lost+found
8. 多卷存檔 (大於單一媒體容量)
tar -cMf /dev/tape /data # 磁帶
# 或分割檔案
tar -czf - /data | split -b 4G - backup.tar.gz.part.
tar vs cpio vs pax vs zip
| 工具 | 優勢 | 典型用途 |
| tar | 標準、功能全、支援所有壓縮、增量、ACL、SELinux | 系統備份、原始碼發布、容器映像層 |
| cpio | 從 stdin 讀取檔案清單、適合 find 管道、可跨檔案系統 | initramfs 建構、rpm/deb 內部格式 |
| pax | POSIX 標準、同時支援 tar/cpio 格式 | 跨平台可移植腳本 |
| zip | Windows 相容、隨機存取、單檔壓縮 | 跨平台檔案交換、Java JAR/WAR |
最佳實務檢查清單
- 必加
-f 指定檔案,避免寫入磁帶裝置。
- 備份用
-p --numeric-owner --acls --xattrs --selinux 保留完整中繼資料。
- 排除虛擬檔案系統 (/proc, /sys, /dev, /run, /tmp)。
- 驗證備份:
tar -tf backup.tar.gz > /dev/null (測試讀取)、tar -W -czf ... (寫入驗證)。
- 異地備份:SSH 管道或 rsync 同步至異地。
- 定期演練還原:備份未測試等於不存在。
tar 參數雖多,但核心模式 (-c/-x/-t) + 壓縮 (-z/-j/-J/--zstd) + 目標 (-f) + 目的地 (-C) + 排除 (--exclude) 涵蓋 95% 場景。建立標準化備份腳本庫,納入 CI/CD 與災難恢復演練,才是資料保護的終局之戰。