在 Linux 中使用 tar 创建和恢复备份

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

引言

在本实验中,你将学习在 Linux 环境中使用 tar (tape archive) 命令行工具创建和恢复文件系统备份的基本流程。主要目标是获得管理用户权限和处理文件归档等基本系统管理任务的实践经验。在必要时,你将使用 sudo 命令以提升的权限执行操作,以访问和备份系统关键目录,特别是包含用户数据的 /home 目录。

本实验将引导你通过一个实际的工作流程,使用默认的 labex 用户账户和 sudo 来执行管理任务。你将创建一个包含整个 /home 目录的压缩归档,并验证其创建成功。为了模拟恢复场景,你将导航到一个临时目录 /tmp,并从中提取备份归档的内容。最后,你将验证文件和目录结构是否已正确恢复到新位置,从而确认你的备份和恢复过程的完整性。

理解当前环境

在本步骤中,你将了解你的当前环境以及如何使用 sudo 执行管理任务。labex 用户能够使用 sudo (superuser do) 以提升的权限运行命令,这允许你执行管理任务而无需切换到 root 用户账户。

使用 sudo 是一种安全最佳实践,因为它为特定命令提供了临时的提升权限,同时保持你的用户上下文。这种方法比完全切换到 root 用户更安全,因为它降低了意外执行危险命令的风险。

首先,让我们通过运行 whoamipwd (print working directory) 命令来验证你当前的身份和位置。

检查你是谁:

whoami

输出应为 labex

labex

接下来,检查你当前所在的目录:

pwd

输出应显示你位于 labex 用户的项目目录中:

/home/labex/project

你可以通过运行一个需要管理访问权限的简单命令来测试你的 sudo 权限。让我们检查 /root 目录,该目录通常需要提升的权限:

sudo ls /root

此命令将成功执行,证明你拥有执行管理任务所需的 sudo 权限。sudo 命令将暂时授予你访问文件系统受限区域所需的权限。

现在你已经了解了你的环境和 sudo 功能,你已准备好在下一步创建备份。

创建 /home 目录的备份归档

在本步骤中,你将使用 tar 命令和 sudo 来创建 /home 目录的备份。tar (tape archiver) 工具是 Linux 上用于创建、查看和提取归档文件的标准工具。归档文件是一个包含多个其他文件和目录的单个文件,便于存储和传输。

你当前以 labex 用户登录,并且你当前的工作目录是 /home/labex/project。你将在你的主目录中创建备份文件,该目录对你的用户账户是可访问的。

你将使用的命令是 sudo tar -cvf ~/backup.tar /home。让我们分解一下这些选项:

  • sudo: 这授予了读取 /home 目录中所有文件的必要权限,包括其他用户拥有的文件。
  • -c (create): 此选项告诉 tar 创建一个新的归档文件。
  • -v (verbose): 这会使 tar 在将每个文件添加到归档时列出它。这对于查看操作进度很有用。
  • -f (file): 此选项允许你指定归档文件的名称。它后面必须紧跟着归档名称。在我们的例子中,它是 ~/backup.tar~ 是你的主目录 (/home/labex) 的快捷方式。
  • /home: 这是你要备份的源目录。

现在,在你的终端中运行命令来创建备份归档:

sudo tar -cvf ~/backup.tar /home

由于你使用了 -v 选项,你将看到屏幕上滚动显示一个长长的文件列表,这些文件正在被添加到 backup.tar 归档中。输出将与此类似,列出 /home 目录中的所有文件:

tar: Removing leading `/' from member names
/home/
/home/labex/
/home/labex/.bashrc
/home/labex/.profile
/home/labex/.zshrc
/home/labex/project/
/home/labex/.zsh_history
...

消息 tar: Removing leading '/' from member names 是正常的。它表示 tar 将归档内的路径存储为相对于指定目录的路径,这是为了可移植性的标准做法。

在下一步中,你将验证 backup.tar 文件是否已成功创建。

验证 backup.tar 文件的创建

在本步骤中,你将验证 backup.tar 归档文件是否已在上一阶段成功创建。在执行备份等关键操作后,确认预期的输出文件是否存在始终是一个好习惯。

由于你在主目录 (~/backup.tar) 中创建了备份文件,你需要检查你的主目录。检查文件的最简单方法是使用 ls (list) 命令并提供完整路径,或者导航到你的主目录。

执行 ls 命令来检查你的主目录:

ls ~

该命令将列出你主目录中的所有文件和目录。你应该在输出中看到 backup.tar 文件:

backup.tar

或者,你也可以直接使用其完整路径来检查文件:

ls -l ~/backup.tar

输出将类似于:

-rw-r--r-- 1 root root 10240 <Date> <Time> /home/labex/backup.tar

此详细列表让你更有信心,表明文件存在且大小非零,这正是你对备份归档的预期。请注意,由于你是使用 sudo 创建的,该文件归 root 所有,但它存储在你可访问的主目录中。

现在你已成功创建并验证了备份,下一步是模拟恢复场景。

切换到 /tmp 目录进行恢复

在本步骤中,你将把当前目录切换到 /tmp。为了练习恢复备份,最好先将文件提取到一个中立的位置。这可以防止意外覆盖现有文件,并允许你在将恢复的数据移动到最终目的地之前对其进行检查。/tmp 目录是 Linux 系统中用于临时文件的标准位置,非常适合此目的。

要在 Linux 文件系统中导航目录,你需要使用 cd (change directory) 命令。你当前位于 /root 目录。

要切换到 /tmp 目录,请执行以下命令:

cd /tmp

运行命令后,你的终端提示符可能看起来没有变化,但你在文件系统中的位置已经改变。你可以通过使用 pwd (print working directory) 命令来确认你的新位置,该命令会显示你当前目录的完整路径。

pwd

输出应确认你现在位于 /tmp

/tmp

现在你已进入 /tmp 目录,可以提取你之前创建的 backup.tar 归档文件的内容了。

将备份归档提取到当前目录

在本步骤中,你将把 backup.tar 文件的内容提取到你的当前目录 /tmp。这个过程通常被称为从备份中“恢复”。你将再次使用 tar 命令,但会使用不同的选项来执行提取。

你当前位于 /tmp 目录。备份文件 backup.tar 位于你的主目录 (/home/labex)。因此,在运行命令时,你必须提供归档文件的完整路径。

提取归档的命令是 tar -xvf ~/backup.tar。让我们看看这些选项:

  • -x (extract): 此选项告诉 tar 从归档中提取文件。这是与创建命令的关键区别。
  • -v (verbose): 和之前一样,这会列出每个正在提取的文件,向你展示进度。
  • -f (file): 这指定了要处理的归档文件的名称。你使用 ~/backup.tar 来引用你主目录中的备份文件。

请注意,提取不需要 sudo,因为你正在提取到 /tmp,这是一个普通用户可写的位置,并且你只是读取备份文件(不修改系统文件)。

现在,在你的终端中执行命令来提取文件:

tar -xvf ~/backup.tar

你将看到一系列文件和目录在你的当前目录 (/tmp) 中被创建。输出将是归档中包含的文件列表,这应该与你创建它时看到的列表相似:

home/
home/labex/
home/labex/.bashrc
home/labex/.profile
home/labex/.zshrc
home/labex/project/
home/labex/.zsh_history
...

此输出表明 tar/tmp 中创建了一个 home 目录,并将所有备份的文件和目录恢复到了其中。在最后一步,你将验证这一点。

验证文件是否已恢复到 /tmp

在最后一步中,你将确认备份归档中的文件是否已成功提取到 /tmp 目录。这是任何恢复过程中确保数据完整性的关键部分。

你当前位于 /tmp 目录。要查看新创建的 home 目录,请使用 ls 命令:

ls

你应该会在可能存在的任何其他临时文件列表中看到一个 home 目录:

home
...

这证实了归档中的顶级目录已被创建。为了更全面地检查,让我们看看这个新的 home 目录内部,以查看它是否包含预期的用户数据。

ls home

输出应该会显示 labex 用户的家目录,这是你最初备份的 /home 目录的内容:

labex

这证实了备份和恢复过程是成功的。你已经成功地使用 sudo 权限创建了 /home 的备份,将其存储在你的主目录 (/home/labex) 中,然后成功地将其恢复到了 /tmp/home 的临时位置。

你可以通过比较几个文件来验证恢复的文件是否与原始文件匹配。例如,你可以检查你的 .bashrc 文件是否已正确恢复:

ls home/labex/.bashrc

输出应确认文件存在:

home/labex/.bashrc

备份和恢复过程现已完成。你已成功演示了如何使用 sudo 权限的 tar 命令来创建系统备份,同时保持你的用户上下文,这是系统管理任务推荐的方法。

总结

在本实验中,你学习了如何执行一项基础的系统管理任务:在 Linux 中使用 tar 命令并配合 sudo 权限来创建和恢复目录备份。整个过程始于理解你作为 labex 用户的环境,并在必要时使用 sudo 执行具有提升权限的命令。这种方法比完全切换到 root 用户更安全、更可靠,因为它为特定任务提供了临时的提升权限,同时保持了你的用户上下文。

你使用带有 sudotar 工具创建了一个单一的归档文件 backup.tar,其中包含了 /home 目录的所有内容,并将其存储在你可访问的主目录中。这演示了如何在用户边界内处理系统级备份,并避免与系统功能发生潜在冲突。

在实验的恢复部分,你学习了最佳实践,即首先切换到一个安全、临时的位置,如 /tmp 目录,以避免覆盖实时数据。然后,你使用 tar 命令将 backup.tar 归档中的内容提取到当前目录,而无需提升权限,因为你只是读取备份文件并写入用户可访问的位置。最后一步是验证备份中的文件和目录是否已正确恢复到 /tmp,从而确认了整个备份和恢复周期的完整性。