档案反删除,避免删除档案,在ext2档案系统下抢救已删除档案
避免误删除档案和建立资源回收桶机制
如今,几乎所有系统【图形界面】有内建资源回收机制,减少误删档案时的遗憾。
不过,在字符下,目前各个版本为建立相关机制,所以使用rm指令删除了重要档案,多半是回天乏术,无法还原已删除的档案。因此随后将介绍集中方法,那就自行建立类似资源回收站的机制。
使用回答的方式删除档案
避免误删档案最简单的方式,便是在删除之前再三确认。若在rm指令后加上-i参数,则删除档案前,rm指令会询问我们是否确定:
[root@localhost ~]# rm -i yum.gz
rm:是否删除一般文件‘yum.gz’? y
因此我们使用alias指令,如下建立一个名为rm的指令别名:
[root@localhost ~]# alias rm='rm -i'
【上述指令适合于zsh,bash等Bourne Shell家族,如果你的shell为tcsh或csh,则指令为alias rm ‘rm -i’。本章随后内容中的指令和设定档于tcsh或csh下亦多所不同】
如此使用rm删除档案时,便会自动加上-i参数,询问是否确定:
[root@localhost ~]# touch iso1
[root@localhost ~]# touch iso2
[root@localhost ~]# rm iso*
rm: 无法删除目录‘iso’: 是一个目录
rm:是否删除一般空文件‘iso1’? y
rm:是否删除一般空文件‘iso2’? y
由于指令下定义的别名只是暂时性的,所以可以将上述alias指令加入家目录下.bashrc档案最后面,便可以在每次登入时自动设定这个别名。若是希望系统上所有使用者皆能使用此别名,则可以将其加入/etc/目录下的profile档案最后面。
【许多发行版预设已经在root帐户的.bashrc档内加入此别名,以免拥有最高权力root误删除重要的系统档案】
建立资源回收机制---使用mv取代rm
治本的方法还是自行建立资源回收站,将要删除的档案先移到回收站,等到一定时间再行删除,便能真正避免误删档案的情况。
只要使用mv取代rm指令,便可以建立一个简单的资源回收站,首先将建立一个指令稿取代原有的rm指令,请在/usr/local/bin目录下,使用文件编辑器建立一个名为rm.junk的新档:
#!/bin/sh
##设定资源回收站的目录名称
[root@localhost ~]# vi /usr/local/bin/rm.junk
#!/bin/sh
##设定资源回收站的目录名称
TRASH_DIR=".trash"
[ -d $TRASH_DIR ] || mkdir -p ~/$TRASH_DIR
mv $* ~/$TRASH_DIR/
完成后执行如下指令,为指令稿加上执行的权限:
[root@localhost ~]# chmod +x /usr/local/bin/rm.junk
[root@localhost ~]# alias rm='/usr/local/bin/rm.junk'
【由于设置是暂时的,因此需将alias指令加入家目录下的.bashrc档案最后面,便可以每次登陆自行设定这个别名。若是希望系统所有使用者都能使用此别名,可以将其加入到/etc/目录下的profile档案最后面】
如此输入rm删除档案时,便自行呼叫rm.juk指令稿.这个指令稿会在使用者的家目录下,建立一个名为.trash的目录,然后将所有删除的档案,搬移到该目录下。
【如果想要真正删除该档案,可输入/bin/rm,才能直接呼叫位于/bin目录下的rm执行档】
[root@localhost ~]# rm grub*
[root@localhost ~]# cd ~/.trash./
[root@localhost ~]# cd ~/.trash/
[root@localhost .trash]# ls
grub-0.95 grub-1.96 grub-1.96.tar.gz grub1.iso grub_for_dos-0.4.1
[root@localhost .trash]#
【我们藉由rm.juk指令稿,让mv指令取代原本的rm指令,因为rm指令与rm指令的参数不尽相同,所以有常见的参数便无法使用,如,mv指令没有-r参数,故执行rm -r将发生错误】
不过所有删除的档案都转移到回收站了,所以这些档案上仍然存在系统上,为了避免其持续占有宝贵资源空间,可以执行crontab -e指令,加入下面内容:
0 2 * * * /bin/rm -rf ‘find ~/.trash/ -atime +1’
【意思是在价目录的.trash目录内搜寻超过一天以上没有被存取过的档案】
如此每天凌晨2点,系统便会在帐户下的资源回收站内,搜寻超过一天以上没被存取的资料,然后自动删除。如果想要帮系统上所有使用者自动删除资源回收站超过一天以上的档案,则可使用root帐户执行crontab -e指令,加入:
0 2 * * */bin/rm -rf ‘find /home/*/.trash/ -atime +1’