介绍
当学习Linux命令行时,一个常见的警告是没有undo
命令,这对于使用rm
命令删除文件等事情尤为重要,但对各种情况都有影响。
在本指南中,我们将讨论一些方法来修复
命令行上所做的某些变化. 没有单一的策略,所以涉及的程序和技术取决于你正试图防御什么。
我们将在Ubuntu 12.04系统上实现这些功能,但大多数Linux发行版应该能够在很少的调整下实现这些建议。
删除文件更改
恢复意外更改(或删除)的文件的唯一方法之一是手持该文件的额外副本,我们将讨论几个方法来确保您有这个选项。
备份
当然,最简单和最安全的方式来扭转您服务器上所做的更改是对重要文件进行定期的常规备份。
有大量的备份程序可在Linux系统上使用。 一些关于如何安装和配置备份的指南(https://www.digitalocean.com/community/community_tags/backups)可以在这里找到。 重要的是要研究工具之间的差异,以找出哪一种最适合您的需求。
备份提供了一个非常完整的方式来恢复损坏您的服务器. 它们可以处理完全的数据损坏或删除,只要复制的数据被保存在一个远程位置。
不同级别的备份包括完整备份(完全备份所有数据),差异备份(自上次完整备份以来更改的每个文件备份)和增量备份(自上次完整或差异备份以来备份文件中的数据更改)。
这些级别的组合通常与彼此并行使用,以完全备份文件,而无需每次运行完整的备份。
通常,单个文件可以恢复,而不需要恢复整个文件系统. 这是特别有用的,如果你意外删除或修改一个文件。
DigitalOcean提供一个备份计划,将自动定期备份您的整个服务器. 您可以通过检查页面底部的框来启用此功能。
版本控制
虽然不是全台计算机备份的理想解决方案,但如果您试图简单地将文件恢复到以前的状态,则版本控制可能是您正在寻找的。
版本控制系统,如git
和Mercurial
,允许您跟踪文件的更改,这意味着,如果您将配置目录,如/etc
,置于版本控制下,您可以很容易地扭转您的更改,如果您做了一个改变,破坏了某些东西。
我们在您的服务器上有相当多的文章涵盖 如何使用 git。
简而言之,你可以通过以下命令在 Ubuntu 上安装 git:
1sudo apt-get update
2sudo apt-get install git
一旦安装完成,您需要通过键入设置几个配置选项:
git config --global user.name "your_name" git config --global user.email "your_email"
完成此操作后,切换到您想要跟踪更改的目录. 在本示例中,我们将使用 /etc
目录. 另一个在版本控制下放置的好地方是您的主目录。
1cd /etc
2sudo git init
然后,您可以通过键入该目录中的所有文件(以及子目录):
1sudo git add .
通过键入类似的东西来承诺更改:
1git commit -m "Initial commit"
当您对该目录中的文件进行更改时,您将想要重新运行最后两个命令(使用不同的消息而不是初始委托
)。
然后,您可以通过日志查找 commit hash 来将文件恢复到以前的状态:
1git log
commit 7aca1cf3b5b19c6d37b4ddc6860945e8c644cd4f Author: rootDate: Thu Jan 23 13:28:25 2014 -0500 again commit 4be26a199fd9691dc567412a470d446507885966 Author: root Date: Thu Jan 23 13:20:38 2014 -0500 initial commit
然后通过 typng 返回文件,如下:
git checkout commit_hash -- file_to_revert
这是一个轻松的方式来扭转你可能已经做过的变化。
请记住,这只有在你准备定期承诺Git时才会很好地工作,当你进行更改时,一个想法是设置一个(Cron job)(https://www.digitalocean.com/community/articles/how-to-use-cron-to-automate-tasks-on-a-vps),以便定期运行。
与您的包管理器逆转更改
有时,您可能会使用apt
包管理器进行一些更改,您希望返回它. 其他时候,包管理器可以帮助您将包恢复到默认设置。
使用 Apt 删除软件包
有时,你只安装一个包,才发现它不是你想要保留的东西,你可以通过键入 apt 中删除一个包:
sudo apt-get remove package
这有时是你想要的,但如果你正在尝试完全从你的系统中删除该包,你可以使用清除
命令,如下:
sudo apt-get purge package
这几乎是完全相同的方式,但也删除与该包相关的任何配置文件. 如果您确信您不再需要该包,或者您没有做任何更改,并且可以依靠默认配置文件,这很有用。
您可以通过使用 autoremove apt 命令卸载不再需要的任何自动安装的依赖性:
1sudo apt-get autoremove --purge
安装 apt 包时发生的另一个问题是元包
很难正确删除。
元包是简单的依赖性列表的包,它们本身不安装任何东西,而是其他包列表,它们也难以以自动的方式完全删除。
一个可以帮助的工具是deborphan
包. 安装它如下:
1sudo apt-get install deborphan
删除元包后,您可以运行孤儿
命令,以查找被删除包留下的孤儿,这将帮助您查找未通过常规方法删除的包。
另一种方法是通过mlocate
包来查找丢失的文件,您可以这样安装:
1sudo apt-get install mlocate
之后,您可以通过发出此命令来更新文件的索引:
1sudo updatedb
然后,您可以搜索软件包名称,看看文件系统中是否有其他地方(除了 apt 索引)引用该软件包。
locate package_name
您也可以通过检查 apt 日志来查看 meta-package 安装的文件:
1sudo nano /var/lob/apt/history.log
您可以使用已安装的软件包的信息并手动删除它们,如果您不再需要它们。
恢复默认文件
有时,在配置过程中,您会更改配置文件,并希望返回分布所包装的默认文件。
如果您想将当前配置文件保留为备份,您可以通过键入来复制它:
1sudo mv file file.bak
上面的命令中的 sudo 是必要的,如果您没有对该目录的写权限,否则您可以省略该命令。
删除文件或移动后,您可以重新安装该包,告诉 apt 检查是否缺少任何配置文件:
sudo apt-get -o Dpkg::Options="--force-confmiss" install --reinstall package_name
如果您不知道哪个包负责您需要恢复的配置文件,您可以使用dpkg
实用程序告诉您:
dpkg -S file_name
如果您只想通过某些安装过程中发生的初始包配置步骤来更改某些值,则可以发出以下命令:
dpkg-reconfigure package_name
这将重新启动您最初安装该程序时发生的配置提示。
查找文件的默认权限
另一个常见的情况是,当你修改文件权限时,有时你会更改文件的权限以进行测试,或者是因为你一直在遵循一些建议,以便稍后发现这是一个坏主意。
您可以通过查找哪个软件包拥有一个文件来查找文件的默认权限,您可以通过发出此命令来做到这一点:
dpkg -S filename
例如,如果我们想找出 /etc/deluser.conf
文件的包所有者,我们可以键入:
1dpkg -S /etc/deluser.conf
1adduser: /etc/deluser.conf
正如你所看到的,它告诉我们,这个文件是由adduser
包负责的,然后我们可以通过更改到apt档案来检查该包的deb
文件:
1cd /var/cache/apt/archive
在此目录中,您将找到安装在您的系统上的许多包的 .deb
文件. 如果您无法找到匹配您正在使用的包的文件,您可能需要使用此命令从存储库中重新下载它:
sudo apt-get download package
例如,如果我们的adduser
包没有.deb
,我们可以通过键入获取一个:
1sudo apt-get download adduser
一旦文件位于该目录中,我们可以通过键入查询其安装的文件的默认属性:
dpkg -c file.deb
对于adduser
程序,这可能看起来像这样的东西:
1dpkg -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/root 604 2011-10-19 18:01 ./etc/deluser.conf
drwxr-xr-x root/root 0 2011-10-19 18:01 ./usr/
drwxr-xr-x root/root 0 2011-10-19 18:01 ./usr/sbin/
-rwxr-xr-x root/root 35120 2011-10-19 18:01 ./usr/sbin/adduser
-rwxr-xr-x root/root 16511 2011-10-19 18:01 ./usr/sbin/deluser
. . .
正如您所看到的,我们可以验证默认包为所有者设置阅读/写入访问权限(root),并为所有其他用户设置读取访问权限。
结论
现在你应该有一些策略来扭转你所犯的错误,并有想法如何计划前进,以给自己一个应急计划。
无论是数据文件还是配置参数,在系统运行顺序时跟踪系统的样子都会帮助您在发生故障时修复问题。
在下面的评论中,发布您对逆转更改的任何其他建议。