linux系统中的tar命令怎么用

发布时间:2022-02-18 13:59:38 作者:小新
来源:亿速云 阅读:154
# 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

2.2 版本与兼容性

检查当前版本:

tar --version

典型输出:

tar (GNU tar) 1.34
...

不同版本的特性差异: - 1.30+ 支持稀疏文件(sparse files)的自动检测 - 1.32+ 改进的xz压缩性能 - 1.33+ 新增–zstd压缩选项

三、基础用法详解

3.1 创建归档文件

基本语法:

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/

3.2 查看归档内容

不解压查看内容:

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/

3.3 提取归档文件

基础提取:

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

四、压缩功能深度解析

4.1 主流压缩算法对比

算法 扩展名 压缩率 速度 CPU占用 适用场景
gzip .gz 中等 通用场景
bzip2 .bz2 中高 需要高压缩率
xz .xz 最高 最慢 长期存储/网络传输
zstd .zst 可调 最快 实时压缩/大型文件

4.2 压缩命令示例

# 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

4.3 压缩性能调优

# 设置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

五、高级应用技巧

5.1 增量备份方案

创建完整备份:

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

5.2 加密归档

使用GPG加密:

# 创建加密归档
tar -czvf - sensitive_data | gpg -c > archive.tar.gz.gpg

# 解密提取
gpg -d archive.tar.gz.gpg | tar -xzvf -

5.3 分割大文件

# 创建每卷1GB的分卷压缩包
tar -czvf - big_data | split -d -b 1G - big_data.tar.gz.part

# 合并并解压
cat big_data.tar.gz.part* | tar -xzvf -

六、典型应用场景

6.1 系统备份

完整系统备份(排除特殊目录):

sudo tar --exclude=/proc --exclude=/sys --exclude=/dev \
  --exclude=/mnt --exclude=/tmp --exclude=/run \
  -cvpzf system_backup_$(date +%F).tar.gz /

6.2 日志归档

# 压缩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 {} +

6.3 源码发布

# 创建规范的源码包
VERSION="1.2.3"
tar -czvf project-${VERSION}.tar.gz \
  --transform "s,^,project-${VERSION}/," \
  --exclude=.git \
  --exclude=*.tmp \
  src/ docs/ LICENSE README.md

七、故障排查指南

7.1 常见错误处理

  1. 空间不足

    tar: /archive.tar: Wrote only 4096 of 10240 bytes
    

    解决方案:使用-C参数指定有足够空间的目录

  2. 路径过长

    tar: 文件名太长
    

    解决方案:使用--transform缩短路径或--force-local参数

  3. 权限拒绝

    tar: file: Cannot open: Permission denied
    

    解决方案:使用sudo或检查SELinux上下文

7.2 完整性验证

# 创建带校验的归档
tar -cvWf archive.tar /data

# 验证已有归档
tar -tvWf archive.tar

# 使用sha256sum双重验证
tar -cf - /data | tee >(sha256sum > archive.sha256) | gzip > archive.tar.gz

八、性能优化建议

8.1 硬件加速方案

# 使用支持硬件加速的压缩(如zstd)
tar -I zstd -cvf archive.tar.zst /large_dataset

# 利用NVMe临时文件
TMPDIR=/nvme_ramdisk tar -czvf archive.tar.gz /data

8.2 参数调优

# 最佳性能参数组合
tar \
  --ignore-failed-read \  # 跳过不可读文件
  --no-seek \            # 禁用seek优化(提高流处理速度)
  --blocking-factor=64 \ # 增大块大小
  -cf archive.tar /data

九、替代工具比较

9.1 与zip对比

特性 tar zip
权限保留 完整保留 部分保留
符号链接 支持 需参数支持
压缩效率 依赖压缩算法 中等
Windows兼容性 需额外软件 原生支持

9.2 新型归档工具

  1. pax:POSIX标准归档工具,支持更完整的文件属性
  2. dar:支持分卷、差异备份的先进工具
  3. borg:去重加密备份工具,适合长期归档

十、安全最佳实践

10.1 安全注意事项

10.2 审计与监控

# 记录tar操作到syslog
function tar() {
  logger -t "TAR_CMD" "User $USER ran: tar $@"
  /bin/tar "$@"
}

附录A:常用命令速查表

操作 命令示例
创建压缩包 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...

附录B:相关资源推荐

  1. 官方文档:GNU Tar Manual(info tar)
  2. 书籍:《Linux命令行与shell脚本编程大全》
  3. 在线练习:overthewire.org的bandit游戏
  4. 可视化工具:KDE的Ark、GNOME的File Roller

”`

推荐阅读:
  1. tar/gzip/unzip命令怎么用
  2. linux中的tar命令有什么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux tar

上一篇:linux的mount命令怎么用

下一篇:linux系统中如何使用echo命令

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》