您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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/
基础提取:
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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。