# Linux系統中的tar命令怎么用
## 一、tar命令概述
### 1.1 tar命令簡介
tar(Tape Archive)是Linux/Unix系統中經典的歸檔工具,起源于1979年AT&T貝爾實驗室。其名稱源于"Tape Archive",最初設計用于將文件打包到磁帶備份設備。經過40余年的發展,tar已成為Linux系統文件歸檔的事實標準。
作為GNU核心工具集的一部分,現代tar命令不僅支持基礎的打包功能,還集成了壓縮(通過調用gzip、bzip2等)、加密、增量備份等高級特性。據統計,在主流Linux發行版的軟件倉庫中,約83%的源碼包采用tar格式分發,足見其重要性。
### 1.2 基本功能特性
- **歸檔能力**:將多個文件/目錄合并為單個.tar文件
- **保留屬性**:完整保存文件權限、所有者、時間戳等元數據
- **壓縮支持**:通過參數調用gzip(.gz)、bzip2(.bz2)、xz(.xz)等壓縮算法
- **流處理**:支持通過管道與其他命令協同工作
- **大文件支持**:可處理超過8GB的單個文件(取決于具體實現)
## 二、安裝與版本檢查
### 2.1 安裝方法
大多數Linux發行版已預裝GNU tar,如需手動安裝:
```bash
# Debian/Ubuntu
sudo apt install tar
# RHEL/CentOS
sudo yum install tar
# Arch Linux
sudo pacman -S tar
# 從源碼編譯安裝
wget https://ftp.gnu.org/gnu/tar/tar-latest.tar.gz
tar xzf tar-latest.tar.gz
cd tar-*
./configure && make && sudo make install
檢查當前版本:
tar --version
典型輸出:
tar (GNU tar) 1.34
...
不同版本的特性差異: - 1.30+ 支持稀疏文件(sparse files)的自動檢測 - 1.32+ 改進的xz壓縮性能 - 1.33+ 新增–zstd壓縮選項
基本語法:
tar -cvf 歸檔名.tar 文件1 文件2 目錄1...
參數說明:
- -c
:創建新歸檔
- -v
:顯示詳細過程
- -f
:指定歸檔文件名
示例:
# 打包當前目錄所有.txt文件
tar -cvf text_files.tar *.txt
# 打包整個目錄(排除臨時文件)
tar -cvf project_backup.tar --exclude='*.tmp' my_project/
不解壓查看內容:
tar -tvf archive.tar
輸出示例:
-rw-r--r-- user/user 1024 2023-05-01 10:00 file1.txt
drwxr-xr-x user/user 0 2023-05-01 10:01 dir1/
基礎提?。?/p>
tar -xvf archive.tar
高級用法:
# 提取到指定目錄
tar -xvf archive.tar -C /target/path
# 僅提取特定文件
tar -xvf archive.tar file1.txt dir1/file2.log
# 保持原始權限(需root)
sudo tar -xvpzf backup.tar.gz
算法 | 擴展名 | 壓縮率 | 速度 | CPU占用 | 適用場景 |
---|---|---|---|---|---|
gzip | .gz | 中等 | 快 | 低 | 通用場景 |
bzip2 | .bz2 | 高 | 慢 | 中高 | 需要高壓縮率 |
xz | .xz | 最高 | 最慢 | 高 | 長期存儲/網絡傳輸 |
zstd | .zst | 可調 | 最快 | 低 | 實時壓縮/大型文件 |
# gzip壓縮(-z)
tar -czvf archive.tar.gz /path/to/files
# bzip2壓縮(-j)
tar -cjvf archive.tar.bz2 /path/to/files
# xz壓縮(-J)
tar -cJvf archive.tar.xz /path/to/files
# zstd壓縮(需要tar 1.31+)
tar --zstd -cvf archive.tar.zst /path/to/files
# 多線程壓縮(pigz替代gzip)
tar -cvf - /path/to/files | pigz > archive.tar.gz
# 設置gzip壓縮級別(1-9)
tar -czvf archive.tar.gz --use-compress-program="gzip -9" /path
# xz多線程壓縮(需xz 5.2+)
tar -cvf - /path | xz -T0 > archive.tar.xz
# zstd超快壓縮模式
tar --zstd -cvf archive.tar.zst --fast=3 /path
創建完整備份:
tar -g snapshot.snar -czvf full_backup.tar.gz /data
進行增量備份:
tar -g snapshot.snar -czvf incr_backup_$(date +%F).tar.gz /data
恢復流程:
# 先恢復完整備份
tar -xzvf full_backup.tar.gz
# 按順序應用增量備份
tar -g /dev/null -xzvf incr_backup_2023-05-01.tar.gz
使用GPG加密:
# 創建加密歸檔
tar -czvf - sensitive_data | gpg -c > archive.tar.gz.gpg
# 解密提取
gpg -d archive.tar.gz.gpg | tar -xzvf -
# 創建每卷1GB的分卷壓縮包
tar -czvf - big_data | split -d -b 1G - big_data.tar.gz.part
# 合并并解壓
cat big_data.tar.gz.part* | tar -xzvf -
完整系統備份(排除特殊目錄):
sudo tar --exclude=/proc --exclude=/sys --exclude=/dev \
--exclude=/mnt --exclude=/tmp --exclude=/run \
-cvpzf system_backup_$(date +%F).tar.gz /
# 壓縮30天前的日志
find /var/log -name "*.log" -mtime +30 -exec tar -rvf old_logs.tar {} \;
gzip old_logs.tar
# 自動清理方案(配合cron)
0 2 * * * /usr/bin/find /var/log -name "*.log" -mtime +30 -exec tar -czf /backup/logs/$(date +\%Y\%m\%d).tar.gz {} +
# 創建規范的源碼包
VERSION="1.2.3"
tar -czvf project-${VERSION}.tar.gz \
--transform "s,^,project-${VERSION}/," \
--exclude=.git \
--exclude=*.tmp \
src/ docs/ LICENSE README.md
空間不足:
tar: /archive.tar: Wrote only 4096 of 10240 bytes
解決方案:使用-C
參數指定有足夠空間的目錄
路徑過長:
tar: 文件名太長
解決方案:使用--transform
縮短路徑或--force-local
參數
權限拒絕:
tar: file: Cannot open: Permission denied
解決方案:使用sudo或檢查SELinux上下文
# 創建帶校驗的歸檔
tar -cvWf archive.tar /data
# 驗證已有歸檔
tar -tvWf archive.tar
# 使用sha256sum雙重驗證
tar -cf - /data | tee >(sha256sum > archive.sha256) | gzip > archive.tar.gz
# 使用支持硬件加速的壓縮(如zstd)
tar -I zstd -cvf archive.tar.zst /large_dataset
# 利用NVMe臨時文件
TMPDIR=/nvme_ramdisk tar -czvf archive.tar.gz /data
# 最佳性能參數組合
tar \
--ignore-failed-read \ # 跳過不可讀文件
--no-seek \ # 禁用seek優化(提高流處理速度)
--blocking-factor=64 \ # 增大塊大小
-cf archive.tar /data
特性 | tar | zip |
---|---|---|
權限保留 | 完整保留 | 部分保留 |
符號鏈接 | 支持 | 需參數支持 |
壓縮效率 | 依賴壓縮算法 | 中等 |
Windows兼容性 | 需額外軟件 | 原生支持 |
--absolute-names
參數(可能覆蓋系統文件)--restrict
參數限制危險操作# 記錄tar操作到syslog
function tar() {
logger -t "TAR_CMD" "User $USER ran: tar $@"
/bin/tar "$@"
}
操作 | 命令示例 |
---|---|
創建壓縮包 | tar -czvf file.tar.gz files |
解壓到指定目錄 | tar -xzvf file.tar.gz -C /path |
列出內容 | tar -tvf file.tar |
追加文件 | tar -rvf file.tar newfile |
驗證完整性 | tar -Wvf file.tar |
排除特定文件 | tar --exclude='*.tmp' -czvf... |
”`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。