Orange的运维学习日记--19.Linux文件归档和备份

发布于:2025-08-02 ⋅ 阅读:(18) ⋅ 点赞:(0)

Orange的运维学习日记–19.Linux文件归档和备份

tar 简介

归档和压缩文件对于创建完整备份和通过网络传输数据具有重要作用

最常用的归档工具之一是tar命令

tar 可以将大量文件打包为一个存档文件,也可结合 gzipbzip2xz 进行压缩


tar 命令概览

选项 功能
-c 创建新归档
-t 列出归档内容
-x 从归档提取文件
-f archive 指定归档文件名
-r 向已有归档追加文件
–delete 从归档中删除文件
-z 使用 gzip 压缩或解压
-j 使用 bzip2 压缩或解压
-J 使用 xz 压缩或解压

在这里插入图片描述


tar 命令语法示例

tar [选项组合] archive_name file_or_directory...

示例:创建名为 backup.tar 的归档

tar -cf backup.tar /path/to/data

创建 tar

非 root 用户打包时可能因权限不足而失败

# 普通用户尝试打包 /etc 目录时部分文件权限不足
tar -cf etc.tar /etc

获得 root 权限后可完整打包

sudo tar -cf etc.tar /etc

为避免同名覆盖,可附加日期后缀

tar -cf etc-$(date +%Y%m%d).tar /etc
ls -l etc-*.tar

查看归档内容

使用 -t 选项列出归档中的所有成员

tar -tf etc-20240726.tar

通过管道和 grep 过滤特定文件

tar -tf etc-20240726.tar | grep etc/host

提取文件

提取全部内容

tar -xf etc-20240726.tar

提取部分文件

列出所需文件

tar -tf etc-20240726.tar | grep etc/host

指定列表提取

tar -xf etc-20240726.tar etc/host.conf etc/hosts etc/hostname

在归档中追加文件

使用 -r 选项向已有归档追加新文件

tar -r -f etc-20240726.tar /usr/share/doc/at/timespec
tar -tf etc-20240726.tar | grep timespec

从归档中删除文件

使用 --delete 选项从归档中移除指定成员

tar --delete -f etc-20240726.tar usr/share/doc/at/timespec
tar -tf etc-20240726.tar | grep timespec

tar 包压缩管理

tar 本身不压缩,仅支持打包
结合外部压缩工具可实现归档压缩

压缩工具 选项 后缀 特点
gzip -z .tar.gz / .tgz 压缩最快、最广泛
bzip2 -j .tar.bz2 压缩比更高、速度稍慢
xz -J .tar.xz 最新压缩比最佳、耗时

压缩前需确保工具已安装

sudo yum install gzip bzip2 xz

gzip 压缩

time tar -czf etc.tar.gz /etc

bzip2 压缩

time tar -cjf etc.tar.bz2 /etc

xz 压缩

time tar -cJf etc.tar.xz /etc

查看压缩结果

ls -lh etc.tar.*

解压或查看压缩归档无需额外选项

tar -tf etc.tar.gz

定时自动脚本

下面示例脚本会将指定目录打包成带时间戳的 gzip 压缩包,并清理旧文件

#!/bin/bash

# 要备份的目录列表,用空格分隔
BACKUP_SRC="/etc /home /var/www"

# 备份存放路径
BACKUP_DEST="/backup"

# 日期格式,用于生成唯一文件名
DATE=$(date +'%Y%m%d_%H%M')

# 最终归档文件名
ARCHIVE_NAME="backup_${DATE}.tar.gz"

# 确保备份目录存在
mkdir -p "${BACKUP_DEST}"

# 创建 gzip 压缩的 tar 包
tar -czf "${BACKUP_DEST}/${ARCHIVE_NAME}" ${BACKUP_SRC}

# 删除 7 天前的旧备份
find "${BACKUP_DEST}" -type f -name "backup_*.tar.gz" -mtime +7 -exec rm -f {} \;

使用步骤

  • 将脚本保存为 /usr/local/bin/backup.sh

  • 添加可执行权限

    chmod +x /usr/local/bin/backup.sh
    
  • 确保 /backup 目录存在且有写权限

在用户 crontab 中添加定时任务,每天凌晨 2 点自动执行

0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

定时任务说明

表达式 含义
0 分钟,每小时第 0 分
2 小时,凌晨 2 点
* 日,每日执行
* 月,月份不限
* 星期几,不限定

tar 补充

  • 为防止意外覆盖,可结合 -v 选项查看操作细节
  • 使用相对路径打包可避免归档中包含绝对路径前缀
  • 对超大数据量建议分卷打包(--split-size 或结合 split 命令`)
    | 2 | 小时,凌晨 2 点 |

| * | 日,每日执行 |
| * | 月,月份不限 |
| * | 星期几,不限定 |


tar 补充

  • 为防止意外覆盖,可结合 -v 选项查看操作细节
  • 使用相对路径打包可避免归档中包含绝对路径前缀
  • 对超大数据量建议分卷打包(--split-size 或结合 split 命令`)
  • 定期验证归档完整性(tar -Wmd5sum

网站公告

今日签到

点亮在社区的每一天
去签到