如何使用备份、Git和Apt-Get在LinuxVPS上撤消更改

来自菜鸟教程
跳转至:导航、​搜索

介绍


在学习 Linux 命令行时,遇到的一个流行警告是没有“撤消”命令。 这与使用 rm 命令删除文件之类的事情尤其相关,但在各种情况下都有影响。

在本指南中,我们将讨论一些方法来“撤消”在命令行上所做的某些更改。 没有单一的策略,因此所涉及的程序和技术会根据您要防范的具体内容而有所不同。 我们将从一些明显的想法开始并继续前进。

我们将在 Ubuntu 12.04 系统上实现这些,但大多数 Linux 发行版和版本应该能够在稍加调整的情况下实现这些建议。

撤消文件更改


恢复无意中更改(或删除)的文件的唯一方法之一是手头有该文件的额外副本。 我们将讨论确保您拥有该选项的几种方法。

备份


当然,能够恢复服务器上所做更改的最简单和最安全的方法是对重要文件运行定期例行备份。

Linux 系统上有大量可用的备份程序。 可以在此处找到有关如何 安装和配置备份 的一些指南。 研究工具之间的差异以找出最适合您需求的工具非常重要。 同样重要的是定期验证您的备份,以确保他们正在执行您希望他们执行的操作。

备份提供了一种非常完整的方法来恢复对服务器的损坏。 只要将复制的数据保存在远程位置,他们就可以处理全部数据损坏或删除。

不同级别的备份包括完整备份(完整备份所有数据)、差异备份(备份自上次完整备份以来更改的每个文件)和增量备份(备份自上次完整备份或差异备份以来文件内的数据更改) .

这些级别的组合通常相互串联使用以完全备份文件,而无需每次运行完全备份的开销。

通常,无需恢复整个文件系统即可恢复单个文件。 如果您不小心删除或修改了文件,这将特别有用。

DigitalOcean 提供了一个备份计划,可以定期自动备份您的整个服务器。 您可以在创建 Droplet 时通过选中页面底部的框来启用此功能。

版本控制


有点类似于备份的策略是版本控制。 虽然不是备份整台计算机的理想解决方案,但如果您只是尝试将文件恢复到以前的状态,那么版本控制可能正是您想要的。

版本控制系统,如 gitmercurial,允许您跟踪对文件的更改。 这意味着,如果您将配置目录(如 /etc)置于版本控制之下,那么如果您所做的更改破坏了某些内容,则可以轻松地恢复您的更改。

我们有很多文章介绍 如何在您的服务器上使用 git

简而言之,您可以使用以下命令在 Ubuntu 上安装 git:

sudo apt-get update
sudo apt-get install git

安装完成后,您需要通过键入以下内容设置一些配置选项:

 git 配置 --global 用户名 “ your_name ” git config --global user.email “ your_email ”

完成此操作后,切换到您要跟踪更改的目录。 在本例中,我们将使用 /etc 目录。 另一个受版本控制的好地方是您的主目录。 我们可以通过键入以下内容来初始化 git 存储库:

cd /etc
sudo git init

然后,您可以通过键入以下内容添加此目录(和子目录)中的所有文件:

sudo git add .

通过键入以下内容提交更改:

git commit -m "Initial commit"

您的文件现在将受到版本控制。 当您对此目录中的文件进行更改时,您将需要重新运行最后两个命令(使用不同的消息而不是“初始提交”)。

然后,您可以通过日志查找提交哈希将文件恢复到以前的状态:

git log

提交 7aca1cf3b5b19c6d37b4ddc6860945e8c644cd4f 作者:root 根@localhost 日期:2014 年 1 月 23 日星期四 13:28:25 -0500
again

提交4be26a199fd9691dc567412a470d446507885966作者:root 根@localhost 日期:2014 年 1 月 23 日星期四 13:20:38 -0500

initial commit

然后通过 tyipng 恢复文件,例如:

git checkout commit_hash – file_to_revert

这是恢复您可能所做的更改的简单方法。

请记住,只有在您准备好在进行修改时定期提交到 git 时,这才有效。 一个想法是设置一个 cron 作业 来定期运行它。

使用包管理器恢复更改


有时,您可能会使用想要还原的 apt 包管理器进行一些更改。 其他时候,包管理器可以帮助您将包恢复为默认设置。 我们将在下面讨论这些情况。

使用 Apt 卸载软件包


有时,您安装一个软件包只是发现它不是您想要保留的东西。 您可以通过键入以下内容删除 apt 中的包:

sudo apt-get 删除包

但是,这将使配置文件保持不变。 这有时是您想要的,但如果您试图从系统中完全删除软件包,您可以使用 purge 命令,如下所示:

sudo apt-get purge包

这以几乎完全相同的方式运行,但也会删除与包关联的任何配置文件。 如果您确定不再需要该软件包或者您没有进行任何修改并且可以依赖默认配置文件,这将非常有用。

您可以使用 autoremove apt 命令卸载不再需要的任何自动安装的依赖项:

sudo apt-get autoremove --purge

使用 apt 安装软件包时发生的另一个问题是“元软件包”可能难以正确删除。

元包是简单的依赖列表的包。 他们自己不安装任何东西,但是是其他要引入的软件包的列表。 众所周知,它们也很难以自动方式完全移除。

一种可以提供帮助的工具是 deborphan 包。 像这样安装它:

sudo apt-get install deborphan

删除元包后,您可以运行 orphaner 命令来查找包卸载留下的孤儿。 这将帮助您找到没有通过常规方法删除的包。

另一种查找杂散文件的方法是通过 mlocate 包。 你可以像这样安装它:

sudo apt-get install mlocate

之后,您可以通过发出以下命令来更新文件索引:

sudo updatedb

然后,您可以搜索包名称以查看文件系统(apt 索引之外)上是否有其他位置引用了该包。

定位package_name

您还可以通过检查 apt 日志来查看元包安装的包的文件:

sudo nano /var/lob/apt/history.log

您可以使用有关已安装软件包的信息,如果不再需要它们,可以手动删除它们。

恢复默认文件


有时,在配置过程中,您更改了配置文件并希望恢复为分发包打包的默认文件。

如果要将当前配置文件保留为备份,可以通过键入以下内容将其复制出来:

sudo mv file file.bak

如果您对相关目录没有写权限,则上述命令中的 sudo 是必需的。 否则,您可以省略该命令。

删除文件或将其移开后,您可以重新安装软件包,告诉 apt 检查是否缺少任何配置文件:

sudo apt-get -o Dpkg::Options="–force-confmiss" install --reinstall package_name

如果你不知道你需要恢复的配置文件是哪个包负责的,可以使用dpkg实用程序告诉你:

dpkg -S文件名

如果您只是想通过在某些安装过程中发生的初始包配置步骤来更改某些值,您可以发出以下命令:

dpkg-重新配置package_name

这将重新启动您最初安装程序时发生的配置提示。

查找文件的默认权限


当您修改文件权限时,会发生另一种常见情况。 有时,您出于测试目的更改文件的权限,或者因为您一直遵循一些建议,但后来发现这是一个坏主意。

通过找出哪个包拥有文件,可以找出您的发行版打包的文件的默认权限。 您可以通过发出以下命令来做到这一点:

dpkg -S文件名

这将告诉您与该文件关联的包。 例如,如果我们想找出 /etc/deluser.conf 文件的包所有者,我们可以输入:

dpkg -S /etc/deluser.conf

adduser: /etc/deluser.conf

如您所见,它告诉我们 adduser 包负责该文件。 然后,我们可以通过更改为 apt 存档来检查该包的 .deb 文件:

cd /var/cache/apt/archive

在此目录中,您将找到系统上安装的许多软件包的 .deb 文件。 如果您找不到与您正在使用的软件包匹配的文件,您可能必须使用以下命令从存储库重新下载它:

sudo apt-get 下载包

例如,如果我们的 adduser 包没有 .deb,我们可以通过键入以下内容来获取:

sudo apt-get download adduser

一旦文件位于该目录中,我们可以通过键入以下内容来查询它安装的文件的默认属性:

dpkg -c文件.deb

对于 adduser 程序,这可能看起来像这样:

dpkg -c adduser_3.113ubuntu2_all.deb

drwxr-xr-x root/root 0 2011-10-19 18:01 ./ drwxr-xr-x root/root 0 2011-10-19 18:01 ./etc/ -rw-r–r-- root/根 604 2011-10-19 18:01 ./etc/deluser.conf drwxr-xr-x 根/根 0 2011-10-19 18:01 ./usr/ drwxr-xr-x 根/根 0 2011-10 -19 18:01 ./usr/sbin/ -rwxr-xr-x 根/根 35120 2011-10-19 18:01 ./usr/sbin/adduser -rwxr-xr-x 根/根 16511 2011-10- 19 18:01 ./usr/sbin/deluser 。 . . 

如您所见,我们可以验证默认软件包是否为所有者(root)设置了读/写访问权限,并为所有其他用户设置了读访问权限。

结论


你现在应该有一些策略来扭转你所犯的错误,并有关于如何提前计划给自己一个应急计划的想法。 几乎上面提到的所有概念都使用了某种关于事物先前状态的记录,无论是由您创建还是通过您的发行版的存储库可用。

这应该加强维护对您很重要的文件副本的重要性。 无论是数据文件还是配置参数,在系统处于良好工作状态时跟踪系统的外观将有助于您在出现问题时进行修复。

在下面的评论中,发布您对还原更改的任何其他建议。

贾斯汀·艾林伍德