Linux也有后悔药,五种方案快速恢复你的系统
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~
新手在学习Linux系统的时候,难免会遇到命令输错,或系统出错的难题。那么如何快速解决呢?本文就先给你一个后悔药,让你快速备份并恢复Linux系统。本文将以Ubuntu为例,在这之前,你需要一台服务器,你可以免费使用腾讯云开发者实验室进进行试验。
备份
当然,能够还原服务器上所做更改的最简单、最安全的方法是对重要文件执行常规例行备份。
Linux系统上有大量备份的软件。我们要研究备份工具之间的差异,找出最适合您需求的工具。更重要的是定期验证您的备份,以确保它们正常执行。
备份提供了一种非常好的方法来恢复服务器的损坏。只要复制的重要数据保存在其他服务器,它们就可以在数据损坏或删除时发挥效用。
备份包括完全备份(完全备份所有数据),差异备份(备份自上次全备份以来已更改的每个文件)和增量备份(备份自上次完全备份或差异备份以来文件中的数据更改)。
这些级别的组合通常彼此联合使用以完全备份文件,通常,您可以恢复单个文件,而无需还原整个文件系统。如果您不小心删除或修改了文件,可以用备份快速恢复。
版本控制
与备份有些类似的策略是版本控制。虽然不是备份整台计算机的理想解决方案,但如果您只想将文件恢复到以前的状态,则版本控制可能正是您所需要的。
版本控制系统,如git和mercurial,允许您跟踪文件的更改。这意味着,如果您将配置目录/etc放在版本控制下,则可以轻松地在由于更改而导致文件损坏的情况下还原更改。
简而言之,您可以使用以下命令在Ubuntu上安装git:
sudo apt-get update
sudo apt-get install git
安装完成后,您需要输入以下内容来设置一些配置选项:
git config --global user.name "your_name"
git config --global user.email "your_email"
完成此操作后,切换到要跟踪更改的目录。我们将使用此示例中的目录。另一个置于版本控制之下的好地方是您的主目录。我们可以通过输入以下内容来初始化git存储库:/etc
cd /etc
sudo git init
然后,您可以通过输入以下内容添加此目录(和子目录)中的所有文件:
sudo git add .
通过输入以下内容来提交更改:
git commit -m "Initial commit"
您的文件现在将受版本控制。当您对此目录中的文件进行更改时,您将需要重新运行最后两个命令(使用不同的内容而不是“Initial commit”)。
然后,您可以通过日志查找哈希值将文件还原到以前的状态:
git log
commit 7aca1cf3b5b19c6d37b4ddc6860945e8c644cd4f
Author: root
Date: Thu Jan 23 13:28:25 2014 -0500
again
commit 4be26a199fd9691dc567412a470d446507885966
Author: root
Date: Thu Jan 23 13:20:38 2014 -0500
initial commit
然后通过下面的命令恢复文件,例如:
git checkout commit_hash -- file_to_revert
请记住,只有在准备好进行修改时才能定期提交git。
使用程序包管理器还原更改
有时,您可以使用apt包管理器进行一些更改。程序包管理器可以帮助您将程序包还原为默认设置。我们将在下面讨论这些情况。
使用Apt卸载软件包
有时,您安装一个软件包却发现它不是您想要保留的东西。您可以通过输入以下内容来删除apt中的包:
sudo apt-get remove package
但是,上面的命令将使配置文件保持不变。但如果您尝试从系统中完全删除软件包,则可以使用purge命令,如下所示:
sudo apt-get purge package
您可以使用autoremove apt命令卸载任何不再需要的自动安装的依赖项:
sudo apt-get autoremove --purge
使用apt安装软件包时发生的另一个问题是“元软件包”很难正确删除。
元包是简单的依赖列表的包。它们本身并没有安装任何东西,而是一个其他包的列表。很难以自动方式完全删除。
一个可以提供帮助的工具就是deborphan包:
sudo apt-get install deborphan
删除元数据包后,可以运行orphaner命令查找软件包卸载所留下的孤立信息。这将帮助您找到未通过常规方法删除的包。
查找杂散文件的另一种方法是通过mlocate包。安装:
sudo apt-get install mlocate
之后,您可以通过以下命令来更新文件索引:
sudo updatedb
然后,您可以搜索包名称,以查看引用该包的文件系统(apt索引之外)是否有其他位置。
locate package_name
您还可以通过检查apt日志来查看元数据包安装的文件:
sudo nano /var/lob/apt/history.log
恢复默认文件
有时,在配置期间,您需要更改配置文件,并希望恢复默认文件。
如果要将当前配置文件保留为备份,可以通过输入以下内容将其复制:
sudo mv file file.bak
如果您没有对相关目录的写入权限,则必须使用上述命令中的sudo。
删除文件或将其移开后,您可以重新安装软件包并检查是否缺少任何配置文件:
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文件的包所有者,我们可以输入:
dpkg -S /etc/deluser.conf
adduser: /etc/deluser.conf
如您所见,它告诉我们adduser包负责该文件。然后,我们可以通过更改为apt存档来检查该包的.deb文件:
cd /var/cache/apt/archive
在此目录中,您将找到系统上安装的软件包的.deb文件。如果找不到与您正在使用的包的匹配的文件,则需要使用以下命令从存储库重新下载它:
sudo apt-get download package
如果我们的adduser包没有.deb,我们可以通过输入以下内容获取一个:
sudo apt-get download adduser
一旦文件出现在该目录中,我们可以通过输入以下内容来查询它安装的文件的默认属性:
dpkg -c file.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/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设置读/写访问权限,以及为所有其他用户设置读访问权限。
结论
现在你应该有一些策略来扭转你所犯的错误,并提出规划相关的应急计划。上面提到的五种方案都需要提前备份。
您可以购买一台新的服务器进行尝试,不过我还是建议您用你免费使用腾讯云开发者实验室进进行试验。
参考文献:《How To Use Backups, Git, and Apt-Get to Undo Changes on a Linux VPS》
问答
相关阅读
此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/developer/article/1159250?fromSource=waitui
欢迎大家前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~
海量技术实践经验,尽在云加社区!
Linux也有后悔药,五种方案快速恢复你的系统的更多相关文章
- Redis集群方案怎么做?大牛给你介绍五种方案!
Redis集群方案 Redis数据量日益增大,而且使用的公司越来越多,不仅用于做缓存,同时趋向于存储这块,这样必促使集群的发展,各个公司也在收集适合自己的集群方案,目前行业用的比较多的是下面几种集群架 ...
- LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下)
LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下) 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cou ...
- 阐述Linux操作系统之rpm五种基本操作
Linux操作系统现在已经成为流行的操作系统,很多的人都开始学习,Linux操作系统包括了很多的专业知识,今天和大家讲讲Linux操作系统中的rpm基本操作.希望你学会本文中提到rpm的五种基本操作知 ...
- linux 清空文件的几种方案
之前要清理文件,都是简单粗暴的rm -rf log文件,最近,发现在某些环境下,是不能删除文件本省的,又必须要清理文件的内容信息,经过亲自实验,目测以下的几种方案是可行的,方案如下: 1.采用vi命令 ...
- 解决T4模板的程序集引用的五种方案
在众多.NET应用下的代码生成方案中,比如CodeDOM,BuildProvider, 我觉得T4是最好的一种.关于T4的基本概念和模板结果,可以参考我的文章<基于T4的代码生成方式>.如 ...
- Linux 清空日志的五种方法
VIM 是linux下一款优秀的编辑器,但是上手难度略大,网络上可以找到的教程很多,快捷键也非常多,一时很难记住. 本文换一种思路,就是根据平时自己的常用需要,去反查VIM如何操作的,再记录下来,这样 ...
- 【转】HTML5 本地存储五种方案
1.LocalStorage LocalStorage就是Key-Value的简单键值对存储结构,Web Storage除了localStorage的持久性存储外,还 有针对本次回话的sessionS ...
- Redis 分布式锁|从青铜到钻石的五种演进方案
缓存系列文章: 缓存实战(一):20 图 |6 千字|缓存实战(上篇) 缓存实战(二):Redis 分布式锁|从青铜到钻石的五种演进方案 缓存实战(三):分布式锁中的王者方案 - Redisson 上 ...
- iOS五种本地缓存数据方式
iOS五种本地缓存数据方式 iOS本地缓存数据方式有五种:前言 1.直接写文件方式:可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据 ...
随机推荐
- python 面向对象终极进阶之开发流程
好了,你现在会了面向对象的各种语法了, 但是你会发现很多同学都是学会了面向对象的语法,却依然写不出面向对象的程序,原因是什么呢?原因就是因为你还没掌握一门面向对象设计利器, 此刻有经验的人可能会想到 ...
- Java核心卷笔记(一)
第三章Java基程序设计结构 1.注释 三种注释方式: // 注释单行 /* 内容 */ 注释单行 /** * 内容 */ 2. java 数据类型 Java数据类型可分为两种:基本数据类型和引用数据 ...
- Django入门一之安装及项目创建
1. 习惯性的创建虚拟环境 # 由于我安装也安装了pyhton3所以在前面要加python2 -m F:\Python Script\MyVirtualenv>python2 -m virtua ...
- Flask入门之Bootstrap介绍使用和Flask-Nav快速导航栏
一.Bootstrap Bootstrap,来自 Twitter,是目前最受欢迎的前端框架. Python中,同样可以使用Bootstrap. 1. 导入Bootstrap库 from flask_b ...
- 微信授权、获取用户openid-纯前端实现——jsonp跨域访问返回json数据会报错的纯前端解决办法
近来,倒霉的后台跟我说让我拿个openid做微信支付使用,寻思很简单,开始干活. 首先引导用户打开如下链接,只需要将appid修改为自己的就可以,redirect_url写你的重定向url https ...
- Cookie SQL注入
转自http://blog.sina.com.cn/s/blog_6b347b2a0101379o.html cookie注入其原理也和平时的注入一样,只不过说我们是将提交的参数已cookie方式提交 ...
- Git协作流程
Git 作为一个源码管理系统,不可避免涉及到多人协作. 协作必须有一个规范的流程,让大家有效地合作,使得项目井井有条地发展下去."协作流程"在英语里,叫做"workflo ...
- LoadRunner常用方法
LR常用的函数 lr_start_transaction: 为性能分析标记事务的开始 lr_end_transaction: 为性能分析标记事务的结束 lr_rendezvous: 在 Vuser 脚 ...
- 区分IE8 、IE9 、IE10的专属css hack
想让IE8及以下的浏览器实现同样的效果,且不希望使用css3pie或htc或条件注释等方法时,可能就会需要用到IE8和IE9的专属css hack了. .test{ /* 1. */ color:#0 ...
- Java 读书笔记 (十六) Java 继承
例: 开发动物类,其中动物分别为企鹅以及老鼠,要求如下: 企鹅: 属性(姓名,id), 方法(吃,睡,自我介绍) 老鼠: 属性(姓名,id), 方法(吃,睡,自我介绍) 企鹅类: public cla ...