Linux 檔案歸檔工具 tar 詳解與應用
tar (Tape Archive) 是 Linux 和類 Unix 系統中最經典的工具之一。雖然名字源自於磁帶歸檔,但現在它主要用於將多個檔案或目錄打包成一個單一的檔案,以便進行備份或傳輸。
值得注意的是,tar 本身並不具備壓縮功能,它只是單純的「打包」。透過組合不同的參數,它可以與 gzip、bzip2 或 xz 等壓縮工具聯動,成為 Linux 環境下最靈活的檔案處理利器。
以下整理 tar 指令的核心用法與實用場景。
核心操作參數
tar 的參數非常多,但只要記住這幾個最常用的組合,就能處理 90% 以上的需求。
c(create):建立一個新的歸檔檔案。x(extract):解開歸檔檔案。t(list):列出歸檔檔案內容,而不解開它。v(verbose):顯示詳細執行過程(可以看到正在處理哪些檔案)。f(file):指定歸檔檔案名稱。必須放在參數列表的最後面,緊接著檔名。z:使用gzip進行壓縮/解壓縮(副檔名通常為.tar.gz)。j:使用bzip2進行壓縮/解壓縮(副檔名通常為.tar.bz2)。J:使用xz進行壓縮/解壓縮(副檔名通常為.tar.xz)。
常用指令組合
打包(不壓縮)
將多個檔案或整個目錄打包成一個檔案。1
tar cvf backup.tar /path/to/folder
解包
將 .tar 檔案解開到目前目錄。1
tar xvf backup.tar
打包並使用 gzip 壓縮
這是最常用的格式,兼顧壓縮比與處理速度。1
tar zcvf backup.tar.gz /path/to/folder
解壓縮 .tar.gz 檔案
1 | tar zxvf backup.tar.gz |
進階應用場景
檢視歸檔內容(不解壓)
當你不確定壓縮檔內容,或者想確認檔案結構時非常有用。1
tar tvf backup.tar.gz
解壓到指定目錄
預設解包會釋放到目前目錄,使用 -C 可以指定目標路徑。1
tar xvf backup.tar.gz -C /home/user/destination/
排除特定目錄或檔案
在打包備份時,排除掉不需要的臨時檔案(如 .log 或 .tmp)。1
tar cvf backup.tar --exclude="*.log" --exclude="temp_folder" folder
注意 --exclude 要放在來源目錄之前,否則在部分版本可能不會正確生效。
從歸檔中提取特定檔案
不需要解開整個檔案,只提取需要的單一項目。1
tar zxvf backup.tar.gz path/to/specific/file.txt
更新歸檔中的檔案
如果你修改了某個檔案,想更新到已存在的 .tar 歸檔中(注意:這只適用於未壓縮的 .tar 檔案)。1
2tar uvf backup.tar new_file.txt
# u: update 更新
注意事項與權限維護
tar 最強大的地方在於它會完整保留檔案的權限 (Permissions)、所有者 (Owner) 與時間戳 (Timestamp)。
- 保留權限備份:通常建議使用 root 權限進行
tar打包,以確保所有系統檔案的權限正確備份。 - 防止絕對路徑問題:在打包時,若使用絕對路徑(如
/etc/),解包時會直接覆蓋原檔案系統。通常建議先切換到目標目錄再進行相對路徑打包:1
cd /etc/ && tar cvf etc_backup.tar .
快速速查表
| 操作 | 指令 |
|---|---|
| 建立 tar 歸檔 | tar cvf file.tar folder |
| 解開 tar 歸檔 | tar xvf file.tar |
| 建立 tar.gz 壓縮檔 | tar zcvf file.tar.gz folder |
| 解開 tar.gz 壓縮檔 | tar zxvf file.tar.gz |
| 檢視內容 | tar tvf file.tar |
| 解壓至目錄 | tar xvf file.tar -C /path/ |
參考資料
- GNU tar 官方手冊: https://www.gnu.org/software/tar/manual/
- Linux man page:
man tar