减少rm命令带来的危险--写在误删Portage数据库之后
2010-05-16 09:58
274 查看
前段时间,为了清理空间,我误删了/usr/livecd/文件夹(#rm -rf /usr/livecd/
),那竟然是Portage的数据库所在(Portage数据库,Gentoo中文手册的解释:Portage将你系统的状态(装了哪些软件包,什么文件属于哪个软件包……)保存在/var/db/pkg。不要手动改变这些文件!它可能破坏Portage对你系统的了解)。
后果就是导致emerge出错,无法安装新的软件(原因后文解释)。在Gentoo的论坛上我发现也有犯相同错误的,而且时间比我早多了(这里
),这就是滥用root权限的后果,我找到了两种解决方法:
第一,如果你是像我一样从livecd安装Gentoo的,可以使用livecd启动系统,复制/usr/livecd/下的db目录到/var下
第二,通过日志文件/var/log/emerge.log来恢复Portage数据库,Gentoo论坛上有人编写了这样一个脚本,可以点此处下载
恢复数据库之后,接下来应该通过emerge来更新系统,来恢复db下的记录(#emerge --update --deep --newuse system
),建议使用system关键字,这样会比较快;然后再搜索相应缺失的库,并且重新emerge相应的包(#revdep-rebuild
)。更新系统发现,Gentoo使用了新的OpenRC来管理配置文件,启动过程由于autoconfig脚本自动配置portmap和dhcp花费了很长时间,于是从我误删了autoconfig脚本(#rm /etc/runlevels/default/autoconfig
),重启之后是快了很多,但是无法进入X window,startx也无法启动,报错提示,大意是agp模块没有加载,于是我手动加载了intel_agp,modprobe intel_agp,再运行startx,可以进入可以进入X window了,就是有点慢(呃,我在命令行倒腾了两天),这是因为没有配置opengl的缘故,进入KDE之后发现,声卡,网卡均工作不正常,lsmod发现是对应的模块没有加载,加载之(#modprobe sky2,snd-hda-intel
)。
到这一步,我才意识到autoconfig的作用,而autoconfig在google project上的介绍也的确是如此(The livecd-tools package is a simple set of tools used to perform
auto-detection
on a Gentoo Linux (or Gentoo-based) LiveCD, particularly those created
with
catalyst.)
造成其根本原因是我从livecd复制安装的Gentoo,所以/var/db/实际上是/usr/livecd/db的软链接,删除了/usr/livecd目录自然Portage崩溃;同样,livecd需要能在不同硬件上运行,所以每次默认启动都会扫描所有硬件,再使用autoconfig脚本来配置需要加载的模块。所以Linux是可以实现10s开机的,前提是得自己根据硬件信息,选择性编译内核、加载模块,去掉一些不必要的脚本。Gentoo其实就是这么提倡的(还包括不推荐使用genkernel命令。。)
由此我想的一个问题,如何减少rm命令带来的危险?虽然linux下也有数据恢复软件(例如:Mondo Rescue,TestDisk,safecopy,PhotoRec,ddrescue ),但是用起来很不方便;就算是不使用root用户登陆由于是个人使用,还是知道root的密码,能够删除掉,而且动不动就提示permission denied,麻烦的很。我想到了两个方法,第一是定期备份系统。。。
第二个方法: 利用KDE的回收站——Trash文件夹。在KDE环境下删除文件,默认是会移到到Trash($HOME/.local/share/Trash
)下的,如果在konsole中执行rm,也能把要删除的文件移入Trash下,这样就能减少了rm命令带来的危险了。过一段时间后(例如配置为7天)Trash自动清空。如何做到呢?其实很简单,bash提供了alias的机制,能够让我们更方便的使用命令。
打开.bashrc,添加如下行:
#useful aliases
alias rm="/root/rm.sh"
再在root目录下创建rm.sh,添加如下行:
#!/bin/bash
kioclient move $1 trash:/
如果要手动清空Trash,可以使用ktrash --empty
命令,还原则使用ktrash --restore
命令即可。(而且,对于目录,不需要加-r参数也能移动到回收站下)
当然了,这是在KDE环境下,使用的也是kioclien和ktrash命令,不过原理是相通的,没有KDE环境也能实现这样的效果:将kioclient move替换为mv命令,自定义一个trash目录(如/var/trash),然后定义一个cron计划任务,定时删除trash目录下的文件,这样也能实现回收站的效果。发现误删文件的时间一般不会间隔很长,通过这样的“定制”rm命令,能减少一定的危险,但是也会造成不便,有利有弊,各自权衡吧。
),那竟然是Portage的数据库所在(Portage数据库,Gentoo中文手册的解释:Portage将你系统的状态(装了哪些软件包,什么文件属于哪个软件包……)保存在/var/db/pkg。不要手动改变这些文件!它可能破坏Portage对你系统的了解)。
后果就是导致emerge出错,无法安装新的软件(原因后文解释)。在Gentoo的论坛上我发现也有犯相同错误的,而且时间比我早多了(这里
),这就是滥用root权限的后果,我找到了两种解决方法:
第一,如果你是像我一样从livecd安装Gentoo的,可以使用livecd启动系统,复制/usr/livecd/下的db目录到/var下
第二,通过日志文件/var/log/emerge.log来恢复Portage数据库,Gentoo论坛上有人编写了这样一个脚本,可以点此处下载
恢复数据库之后,接下来应该通过emerge来更新系统,来恢复db下的记录(#emerge --update --deep --newuse system
),建议使用system关键字,这样会比较快;然后再搜索相应缺失的库,并且重新emerge相应的包(#revdep-rebuild
)。更新系统发现,Gentoo使用了新的OpenRC来管理配置文件,启动过程由于autoconfig脚本自动配置portmap和dhcp花费了很长时间,于是从我误删了autoconfig脚本(#rm /etc/runlevels/default/autoconfig
),重启之后是快了很多,但是无法进入X window,startx也无法启动,报错提示,大意是agp模块没有加载,于是我手动加载了intel_agp,modprobe intel_agp,再运行startx,可以进入可以进入X window了,就是有点慢(呃,我在命令行倒腾了两天),这是因为没有配置opengl的缘故,进入KDE之后发现,声卡,网卡均工作不正常,lsmod发现是对应的模块没有加载,加载之(#modprobe sky2,snd-hda-intel
)。
到这一步,我才意识到autoconfig的作用,而autoconfig在google project上的介绍也的确是如此(The livecd-tools package is a simple set of tools used to perform
auto-detection
on a Gentoo Linux (or Gentoo-based) LiveCD, particularly those created
with
catalyst.)
造成其根本原因是我从livecd复制安装的Gentoo,所以/var/db/实际上是/usr/livecd/db的软链接,删除了/usr/livecd目录自然Portage崩溃;同样,livecd需要能在不同硬件上运行,所以每次默认启动都会扫描所有硬件,再使用autoconfig脚本来配置需要加载的模块。所以Linux是可以实现10s开机的,前提是得自己根据硬件信息,选择性编译内核、加载模块,去掉一些不必要的脚本。Gentoo其实就是这么提倡的(还包括不推荐使用genkernel命令。。)
由此我想的一个问题,如何减少rm命令带来的危险?虽然linux下也有数据恢复软件(例如:Mondo Rescue,TestDisk,safecopy,PhotoRec,ddrescue ),但是用起来很不方便;就算是不使用root用户登陆由于是个人使用,还是知道root的密码,能够删除掉,而且动不动就提示permission denied,麻烦的很。我想到了两个方法,第一是定期备份系统。。。
第二个方法: 利用KDE的回收站——Trash文件夹。在KDE环境下删除文件,默认是会移到到Trash($HOME/.local/share/Trash
)下的,如果在konsole中执行rm,也能把要删除的文件移入Trash下,这样就能减少了rm命令带来的危险了。过一段时间后(例如配置为7天)Trash自动清空。如何做到呢?其实很简单,bash提供了alias的机制,能够让我们更方便的使用命令。
打开.bashrc,添加如下行:
#useful aliases
alias rm="/root/rm.sh"
再在root目录下创建rm.sh,添加如下行:
#!/bin/bash
kioclient move $1 trash:/
如果要手动清空Trash,可以使用ktrash --empty
命令,还原则使用ktrash --restore
命令即可。(而且,对于目录,不需要加-r参数也能移动到回收站下)
当然了,这是在KDE环境下,使用的也是kioclien和ktrash命令,不过原理是相通的,没有KDE环境也能实现这样的效果:将kioclient move替换为mv命令,自定义一个trash目录(如/var/trash),然后定义一个cron计划任务,定时删除trash目录下的文件,这样也能实现回收站的效果。发现误删文件的时间一般不会间隔很长,通过这样的“定制”rm命令,能减少一定的危险,但是也会造成不便,有利有弊,各自权衡吧。
相关文章推荐
- Linux系统的rm命令太危险,一不小心就会删除系统文件。写一个shell脚本来替换系统的rm命令,
- Ubuntu中恢复rm命令误删文件
- 使用ext3grep恢复ext3文件系统中误删除文件(使用rm命令误删的)
- Linux系统 rm 删除命令 “危险”!!!
- 开启我的CSDN博客之旅——写在数据库技术大会之后
- Linux下修改rm命令,防止误删
- 防止误删文件!将rm命令改造成mv命令简易版
- Oracle Linux 6.7中使用service multipathd reload命令之后,Oracle 数据库crash掉.
- 使用ext3grep恢复ext3文件系统中误删除文件(使用rm命令误删的)
- [Shell]做一个自己的rm命令来替换系统自带的,以免误删除之后恢复不了
- 使用ext3grep恢复ext3文件系统中误删除文件(使用rm命令误删的)
- Ubuntu中恢复rm命令误删文件(转)
- sql中 vacuum命令:回收空白空间,减少数据库大小
- 手抖的后果:误执行"rm -rf"命令之后
- rm -rf 命令带来的恶梦 修改rm命令;让rm 命令删除的文件到回收站
- 小米3root之后仍无法在命令窗口查看数据库信息_解决办法之一
- Ubuntu中恢复rm命令误删文件
- 使用testdisk恢复误删文件【rm -rf 命令】
- GitLab误删生产数据库告诉我要对rm命令动手脚(文末送脚本)
- 修改rm命令防止误删