文件与目录 / 命令文档

Linux tar 命令

$ tar 11 个章节 Linux 命令详解

概述

掌握Linux系统中最重要的打包压缩工具

什么是 tar 命令?

tar(Tape Archive)是Linux和Unix系统中最重要的文件打包工具之一。它的主要作用是将多个文件和目录打包成一个归档文件,通常与压缩工具结合使用来节省存储空间。

核心概念:
                • 打包:将多个文件合并成一个文件
                • 压缩:减少文件大小
                • 归档:长期存储和备份

tar 的历史

tar 最初是为磁带备份设计的(Tape Archive),现在已经成为Linux系统中标准的打包工具。它不仅能处理文件,还能保持文件的权限、时间戳、目录结构等元数据。

使用场景

tar -czf system-backup-$(date +%Y%m%d).tar.gz /etc /home /data/wwwroot/
定期备份重要的系统配置文件、用户数据和应用程序,确保系统故障时能快速恢复。
tar -czf myapp-v1.2.tar.gz /opt/myapp
将应用程序及其依赖文件打包,便于在不同服务器间分发和部署。
tar -czf logs-archive-2024.tar.gz /var/log/*.log
将旧的日志文件、文档等进行归档压缩,释放磁盘空间的同时保留数据。
tar -czf website.tar.gz /var/www/html && scp website.tar.gz user@server:/tmp/
在网络传输前打包压缩文件,减少传输时间和带宽消耗。

常用参数详解

创建新的归档文件
解压归档文件
查看归档文件内容
显示详细过程
指定归档文件名
使用gzip压缩
使用bzip2压缩
使用xz压缩
记忆技巧 常用组合记忆:czf(创建压缩文件)、xzf(解压文件)、tzf(查看文件)

基础操作

创建归档文件

tar -cf archive.tar file1 file2 dir1/

将file1、file2和dir1目录打包成archive.tar

tar -czf archive.tar.gz /home/user/documents/

使用gzip压缩打包documents目录

tar -cjf archive.tar.bz2 /var/log/

使用bzip2压缩打包log目录(压缩率更高)

解压归档文件

tar -xf archive.tar

解压tar文件到当前目录

tar -xzf archive.tar.gz -C /tmp/

解压gzip文件到/tmp目录

tar -xjf archive.tar.bz2 --strip-components=1

解压时去掉一层目录结构

查看归档内容

tar -tf archive.tar

列出归档文件中的所有文件

tar -tzf archive.tar.gz | head -20

查看压缩包前20个文件

高级运维场景

系统备份脚本

#!/bin/bash
# 系统备份脚本
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup"
tar -czf $BACKUP_DIR/system_backup_$DATE.tar.gz \
    --exclude=/proc \
    --exclude=/sys \
    --exclude=/dev \
    --exclude=/tmp \
    --exclude=/backup \
    /

增量备份

tar -czf backup_$(date +%Y%m%d).tar.gz --newer-mtime="2024-01-01" /home/

只备份2024年1月1日之后修改的文件

远程备份

tar -czf - /important/data | ssh user@backup-server "cat > /backups/data_$(date +%Y%m%d).tar.gz"

直接通过SSH传输并保存到远程服务器

多卷分割

tar -czf - /large/dataset | split -b 1G - dataset.tar.gz.

将大文件分割成1GB的多个文件

加密归档

tar -czf - /sensitive/data | gpg -c > encrypted_backup.tar.gz.gpg

创建加密的备份文件

并行压缩

tar -cf - /large/directory | pigz > archive.tar.gz

使用pigz进行多线程压缩(需要安装pigz)

故障恢复场景

部分文件恢复

tar -xzf backup.tar.gz ./path/to/specific/file

只恢复备份中的特定文件

权限保持恢复

tar -xzpf backup.tar.gz

恢复时保持原有的文件权限

验证备份完整性

tar -tzf backup.tar.gz > /dev/null && echo "备份文件完整" || echo "备份文件损坏"

检查备份文件是否损坏

性能优化技巧

压缩算法选择 gzip (-z): 速度快,压缩率中等,最常用 bzip2 (-j): 速度慢,压缩率高,适合长期存储 xz (-J): 速度最慢,压缩率最高,适合网络传输

排除不必要文件

tar -czf backup.tar.gz --exclude='*.tmp' --exclude='*.log' --exclude='.git' /project/

排除临时文件、日志文件和Git仓库

使用文件列表

# 创建文件列表
find /home -name "*.conf" > files.list
# 基于列表创建归档
tar -czf configs.tar.gz -T files.list

限制带宽使用

tar -czf - /data | pv -L 10m | ssh user@server "cat > backup.tar.gz"

限制传输速度为10MB/s(需要安装pv)

常见错误

错误: tar: Removing leading '/' from member names
                解决: 这是正常提示,tar自动移除绝对路径的前导斜杠以提高安全性
错误: tar: Cowardly refusing to create an empty archive
                解决: 检查要打包的文件或目录是否存在
错误: gzip: stdin: unexpected end of file
                解决: 归档文件可能损坏,尝试使用 tar -tf 验证文件完整性

最佳实践

• 始终使用 -v 参数查看详细输出 • 大文件操作前先用 -t 参数验证 • 备份前检查磁盘空间是否足够 • 定期测试备份文件的可恢复性 • 使用有意义的文件名包含日期和版本信息

同分类 · 其他命令文档