Orange的运维学习日记–19.Linux文件归档和备份
文章目录
tar
简介
归档和压缩文件对于创建完整备份和通过网络传输数据具有重要作用
最常用的归档工具之一是tar
命令
tar 可以将大量文件打包为一个存档文件,也可结合 gzip
、bzip2
或 xz
进行压缩
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 -W
或md5sum
)