文件与目录 / 命令文档
Linux tar 命令
概述
掌握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 参数验证 • 备份前检查磁盘空间是否足够 • 定期测试备份文件的可恢复性 • 使用有意义的文件名包含日期和版本信息