Linux学习之旅9

实践部分

介绍

您是“备份哨兵”,一家前途光明的科技创业公司新上任的系统管理员。最近一次轻微的电力波动导致服务器出现故障,短暂损坏了一个非关键日志文件。虽然这次没有丢失任何重要数据,但这无疑是一次严重的警醒。

首席技术官亲自委派你一项至关重要的任务:为公司主应用服务器实施一套完善的备份和恢复策略,而且必须立即完成。用户数据、应用配置和关键日志的完整性现在掌握在你手中。

这是你大显身手的时刻。通过成功创建、验证和自动化备份流程,你不仅能保护公司最宝贵的资产——数据——还能证明自己是公司数字基础设施不可或缺的守护者。系统已上线,时间紧迫。让我们开始工作吧!

重要提示:即将面临的挑战可能超出Linux 快速入门课程的范围。

如果您在挑战过程中遇到困难:
暂时跳过此挑战,继续学习Linux 学习路径中的后续引导式实验。
与 Labby 讨论或查看解决方案。

Day09 备份哨兵

识别备份的关键数据

创建备份之前,首要任务是确定哪些数据至关重要。完整的系统备份通常不切实际。对于我们的应用服务器而言,最重要的资产位于 <path>data、<path>config和 <directory> logs目录中。

为了使备份过程更清晰、更易于管理,我们将创建一个文件,列出所有需要备份的目录。该列表将作为备份脚本的清单。

任务
在~/project目录中创建一个名为backup-list.txt的文件。
该文件应包含三个关键目录的相对路径,每个路径占一行。
要求
文件名必须完全一致backup-list.txt。
文件必须位于该~/project目录中。
该文件必须包含以下三项内容,每项内容单独占一行:
data
config
logs
示例
文件创建完成后backup-list.txt,您的项目目录中应该包含新的清单文件以及现有目录:

~/project/
├── backup-list.txt
├── backups/
├── config/
├── data/
└── logs/

运行程序后cat backup-list.txt,您应该会看到列出的三个关键目录:

data
config
logs

提示
您可以使用文本编辑器nano来创建和编辑文件。
或者,您可以使用echo带有输出重定向的命令(>)来创建文件并向>>其中追加内容。
在这里插入图片描述

创建完整系统备份存档

关键目录列表准备就绪后,就可以创建备份归档文件了。Linux 系统下常用的备份工具是tarTape Archive(磁带归档)。它可以将多个文件和目录打包成一个文件。我们还会使用 .csp 命令压缩归档文件以节省空间gzip。

任务
使用该tar命令创建压缩备份存档。
该存档应命名为system-backup.tar.gz.
必须将压缩文件放置在该~/project/backups/目录中。
归档文件的内容应由backup-list.txt您在上一步创建的文件决定。
要求
最终存档必须位于~/project/backups/system-backup.tar.gz:
你必须使用该tar命令。
您必须使用该-T选项才能tar从中读取文件/目录列表backup-list.txt。
gzip必须使用(z在选项中tar)压缩存档。
示例
创建备份存档后,您的backups目录中应该包含新的压缩存档:

~/project/backups/
└── system-backup.tar.gz

运行程序后ls -lh ~/project/backups/,您应该会看到归档文件及其大小:

-rw-rw-r-- 1 labex labex 1.2K Sep 11 15:08 system-backup.tar.gz

提示
使用 czip 创建压缩存档的常用选项tar有c(创建)、z(使用 gzip 压缩)、v(显示详细信息,以查看进度)和f(指定文件名)。
该-T选项指示tar从后面的文件中获取要归档的文件名,而不是从命令行中获取。
命令结构大致如下tar -czvf [archive_name] -T [list_file]:

在这里插入图片描述

在这里插入图片描述
错误信息“读取的文件名包含空字符”通常表示文件中存在空字符(\0)backup-list.txt。这可能是由于文件在创建或修改过程中引入了空字符造成的。
要解决此问题,您可以按照以下步骤操作:
检查空字符:您可以使用该cat -v命令来查看文件中所有不可打印字符backup-list.txt。
cat -v ./backup-list.txt
删除空字符:如果发现空字符,可以使用以下方法将其删除tr:
tr < ./backup-list.txt -d ‘\000’ > ./backup-list-clean.txt
此命令将创建一个名为 <filename> 的新文件,backup-list-clean.txt其中不包含空字符。
使用清理后的文件:现在,使用清理后的文件创建 tar 归档文件:
tar -czvf ./backups/system-backup.tar.gz -T ./backup-list-clean.txt
验证归档文件:创建归档文件后,您可以验证其内容:
tar -tvf ./backups/system-backup.tar.gz
按照这些步骤操作,您应该能够解决问题并成功创建 tar 归档文件。

这里遇到了一个问题, 我在其他服务器上没发现问题,不知从哪里引入的nul字符.
在这里插入图片描述
但通过这个例子大概知道第一步是干啥的目的是干啥的, 其实没必要使用, 哪里只需要把data config logs三个文件写对就行了, 第二步-T会根据backups-list.txt文档里面的目录进行归档打包.

cat > backup-list.txt << 'EOF'
data
config
logs
EOF

在这里插入图片描述
在这里插入图片描述
圈出部分是正确的命名.

注意:-h 代表 “human-readable”(人类可读格式)

验证备份完整性

如果备份文件损坏或不完整,则毫无用处。任何备份策略的关键步骤都是验证。您必须确保创建的存档包含所有预期文件且可读。

任务
使用该tar命令列出归档文件的内容,system-backup.tar.gz而无需将其解压缩。
将此命令的输出重定向到目录backup-contents.txt中名为 的新文件~/project。
要求
您必须创建一个名为backup-contents.txtin 的文件~/project。
此文件必须包含存储在其中的所有文件和目录的列表system-backup.tar.gz。
不要解压缩文件,只需列出文件即可。
示例
创建验证文件后,您的项目目录中应该包含该新backup-contents.txt文件:

~/project/
├── backup-contents.txt
├── backup-list.txt
├── backups/
├── config/
├── data/
└── logs/

运行后cat backup-contents.txt,您应该会看到存档中所有文件的详细列表:

drwxrwxr-x labex/labex       0 2025-09-11 15:08 data/
-rw-rw-r-- labex/labex      46 2025-09-11 15:08 data/transactions.csv
drwxrwxr-x labex/labex       0 2025-09-11 15:08 config/
-rw-rw-r-- labex/labex      72 2025-09-11 15:08 config/app.conf
drwxrwxr-x labex/labex       0 2025-09-11 15:08 logs/
-rw-rw-r-- labex/labex      49 2025-09-11 15:08 logs/app.log

提示
该tar命令有一个选项可以列出(t)存档的内容。
t将该选项与z(用于 gzip)、v(用于详细列表)和f(用于指定文件)结合使用。
使用输出重定向运算符>将命令的输出保存到文件中。

在这里插入图片描述
在这里插入图片描述

从备份恢复文件

灾难降临!一位初级开发人员在清理空间时,不小心删除了应用程序的主配置文件app.conf。现在应用程序已无法运行。作为备份守护者,你需要从备份中恢复这个关键文件,力挽狂澜。

任务
首先,通过删除文件来模拟事故config/app.conf。
然后,使用该命令从您的存档中仅tar恢复该文件。该文件应恢复到其原始位置。config/app.confsystem-backup.tar.gz
要求
任务完成后,该文件~/project/config/app.conf必须存在。
您只需提取单个config/app.conf文件,无需提取整个压缩包。
示例
文件恢复后app.conf,您的config目录中应该包含已恢复的文件:

~/project/config/
├── app.conf
└── ...

运行后ls -l ~/project/config/app.conf,您应该会看到已恢复的文件:

-rw-rw-r-- 1 labex labex 72 Sep 11 15:08 /home/labex/project/config/app.conf

您可以通过检查文件是否包含预期配置来验证文件内容是否正确:

# This should show the database and API key settings
cat ~/project/config/app.conf

提示
该rm命令用于删除文件。
该tar命令使用x提取文件的选项。
要提取特定文件,您可以将该文件的路径(如存档中所示)添加到命令的末尾tar -x。
归档文件中文件的完整路径是config/app.conf.
在这里插入图片描述

安排自动备份任务

你力挽狂澜,但英雄的使命永无止境。依赖手动备份风险很大。最后一步是实现备份流程自动化,让备份定期自动创建,无需人工干预。为此,我们将使用cronLinux 标准任务调度器 npm。

任务
创建一个定时任务,自动运行备份命令。
(为了完成本次挑战)该任务应该每分钟运行一次。
该命令应在目录内创建一个新的压缩tar文件~/project/backups/。
为防止覆盖,每个新的备份文件都必须有一个包含时间戳的唯一名称(例如,backup-2023-10-27_15-30-00.tar.gz)。
要求
您必须使用它crontab -e来编辑您的定时任务。
cron 任务必须设置* * * * *为每分钟运行一次。
cron 作业中的备份命令必须使用输出目录和源目录的绝对路径/home/labex/project/backups(例如, )。
备份文件名必须包含时间戳。
示例
设置好 cron 任务后,您可以通过检查 crontab 文件并等待自动备份出现来验证其是否正常工作。运行命令后crontab -l,您应该会看到新的备份任务:

# Example output (your exact command may vary)
* * * * * tar -czf /home/labex/project/backups/backup-$(date +\%Y-\%m-\%d_\%H-\%M-\%S).tar.gz -C /home/labex/project data config logs

一两分钟后,您的backups目录中应该会开始显示带有时间戳的备份文件:

~/project/backups/
├── backup-2025-09-11_15-30-00.tar.gz
├── backup-2025-09-11_15-31-00.tar.gz
├── backup-2025-09-11_15-32-00.tar.gz
└── system-backup.tar.gz

提示
运行此命令crontab -e打开 cron 作业编辑器。系统可能会提示您选择编辑器;nano这是一个不错的选择。
cron 作业的格式为:[minute] [hour] [day_of_month] [month] [day_of_week] [command].* * * * * 表示每天每小时每分钟执行一次。
你可以使用该date命令生成时间戳。例如,date +%Y-%m-%d_%H-%M-%S将生成类似这样的格式2023-10-27_15-30-00。
要在一个命令中使用另一个命令的输出,请使用$ (command).
重要提示:在 crontab 中,百分号 (% %) 具有特殊含义(它会被视为换行符)。\%在使用命令时,必须用反斜杠 (%) 对其进行转义date。
crontab 中的最后一条命令可能如下所示:* * * * * tar -czf /path/to/backup-$(date +\%F_\%T).tar.gz -C /path/to/source dir1 dir2

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
上面这个是错误的写法, 开头不能有空格, 不要加注释, 写在第一行.

在这里插入图片描述

在nano编辑器中:保存并退出是
按 Ctrl + O 保存
按 Enter 确认文件名
按 Ctrl + X 退出
在这里插入图片描述
在这里插入图片描述

注解上面那个命令
* * * * *                                    # 每分钟运行一次
mkdir -p /home/labex/project/backups &&      # 确保备份目录存在
tar -czf                                     # 创建gzip压缩的tar文件
"/home/labex/project/backups/backup-$(date +\%Y-\%m-\%d_\%H-\%M-\%S).tar.gz"  # 带时间戳的文件名
-T /home/labex/project/backup-list.txt        # 从文件读取要备份的目录列表

概括

恭喜Sentinel!你们成功设计并实施了一套完整的自动化备份和恢复策略。得益于你们的勤勉和精湛技艺,公司的数据现在安全无虞。你们不仅避免了一场潜在的危机,还建立了一套能够保障公司未来发展的系统。

在这个挑战中,你已经掌握了几项基本的系统管理技能:

识别关键数据:明确需要备份的内容。
创建归档:使用该tar命令创建压缩备份。
验证完整性:确保备份有效且完整。
执行恢复操作:提取特定文件以从数据丢失中恢复。
自动化任务:安排定时任务进行定期无人值守备份。
这些都是任何 Linux 系统管理员、开发人员或 DevOps 工程师都必须掌握的实用技能。你已经证明自己具备成为关键系统可靠守护者的能力。

温习:

tar相关:

在这里插入图片描述
在这里插入图片描述

crontab 完全指南

crontab 是 Unix/Linux 系统的定时任务调度器,用于在固定时间或间隔执行命令。

crontab 命令速查表
操作命令说明示例
编辑当前用户的crontabcrontab -e打开crontab编辑器进行编辑crontab -e # 选择nano或vim编辑器
列出当前用户的crontab任务crontab -l显示当前用户的所有定时任务crontab -l # 显示类似:
* * * * * /home/user/backup.sh
删除当前用户的所有crontab任务crontab -r谨慎使用:删除所有cron任务crontab -r # 删除后无法恢复
从文件恢复crontabcrontab <filename>从文件加载crontab配置crontab my-cron.txt # 从文件恢复
crontab 时间格式:
* * * * * command_to_execute
│ │ │ │ │
│ │ │ │ └─ 星期几 (0-7) 0和7都代表周日
│ │ │ └─── 月份 (1-12)
│ │ └───── 日期 (1-31)
│ └─────── 小时 (0-23)
└───────── 分钟 (0-59)
示例:每分钟打印"时间戳+whoami", 记录保存在whoami.log里面.
#提前选择编辑器vim,打开crontab,并创建任务
crontab -e
* * * * * echo "$(date '+\%Y-\%m-\%d \%H:\%M:\%S'): $(whoami)" >> ./whoami.log


#验证任务是否添加成功
crontab -l

#等待几分钟, 查看whoami.log里面,测试结果

#结束crontab任务
crontab -r
选择vim编译器

在这里插入图片描述
使用select-editor选择2, vim编辑器(vim.basic), 然后Enter.
在这里插入图片描述

打开crontab,并创建任务

在这里插入图片描述
在这里插入图片描述

验证任务是否添加成功

输出* * * * * 字样说明已经成功添加任务
在这里插入图片描述

等待几分钟, 查看whoami.log里面,测试结果

在这里插入图片描述

结束crontab任务
# 删除所有用户的crontab
crontab -r
# 删除username用户的crontab
sudo crontab -u username -r

在这里插入图片描述
2点08后没有变化, 所示成功了, 现在可以把不用的whoami.log删除了

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值