对于被rm -rf 伤过的人来说,这个东西或许很吸引眼球。
linux下rm命令是表示删除一个文件,而linux是没有回收站机制的,所以一个文件一旦删除的话,就彻底从磁盘上消失了。而很多人喜欢加上-f选项,是代表强制的意思,更暴力的是删除文件夹的时候使用rm -rf 命令,这样一来,文件夹本身,以及文件夹下的子子孙孙都删除了。
而万一你执行了 rm -rf /*命令 那无异于原子弹爆炸。
由于没有回收站机制,很多人吃过这个亏,曾经辛苦写的几个月的代码瞬间化为乌有。
既然linux没有回收站机制,那我们能否自己实现一个?
答案是可以的。下面,我们就自己手动做一个回收站,给自己一个后悔的机会。
既然罪魁祸首是rm 命令,那我们就对这个命令进行改造。在linux下对命令进行重新定义使用alias命令,修改的是.bashrc文件。
即:
vim ~/.bashrc
在文件结尾,我们添加一下几句代码:
mkdir -p ~/.trash
alias rm=trash
alias r=trash
alias rl='ls ~/.trash/'
alias ur=undelfile
undelfile()
{
mv -i ~/.trash/$@ ./
}
trash()
{
mv -i $@ ~/.trash/
}
cleartrash()
{
read -p "clear sure?[n]" confirm
[ $confirm == 'y' ] || [ $confirm == 'Y' ] && /bin/rm -rf ~/.trash/*
}
在这里,我们是在家目录下建立一个.trash的隐藏文件夹,作为回收站。然后,我们对rm 命令进行重新定义。当我们之心rm或者r的时候,将执行trash函数。而在trash函数里面,只做一件事:
mv -i $@ ~/.trash/
就是将rm 之后所有的文件移动到.trash目录下(即模拟回收站) -i 选项表示如果.trash目录有同名文件的话,将提示覆盖。
我们将rl 定义为ls ~/.trash 也就是说,我们可以通过rl查看.trash目录下的文件,即被[删除]的文件
如果要还原文件,可以执行ur,而ur将执行undelfile函数。在undelfile里,又将ur之后的文件从.trash目录移动到原目录,从而实现文件删除还原。
当过了一段时间后,回收站里的文件太多了,我们可以使用cleartrash
命令清空回收站。他执行同名函数,调用/bin/rm命令将.trash目录清空。
.brash文件修改完毕后,我们要让他生效:
source ~/.bashrc
我们来实际体验一下:
删除文件
alvin@alvin-pc:~/test$ touch file1 file2 file3
alvin@alvin-pc:~/test$ ls
file1 file2 file3
alvin@alvin-pc:~/test$ rm file1 file2
alvin@alvin-pc:~/test$ r file3
查看回收站文件
alvin@alvin-pc:~/test$ rl
file1 file2 file3
还原被删除的文件
alvin@alvin-pc:~/test$ rl
file1 file2 file3
alvin@alvin-pc:~/test$ ur file1
alvin@alvin-pc:~/test$ ur file2
alvin@alvin-pc:~/test$ ur file3
alvin@alvin-pc:~/test$ ls
file1 file2 file3
alvin@alvin-pc:~/test$ rl
alvin@alvin-pc:~/test$
清空回收站
alvin@alvin-pc:~/test$ rm file1 file2 file3
alvin@alvin-pc:~/test$ rl
file1 file2 file3
alvin@alvin-pc:~/test$ cleartrash
clear sure?[n]y
alvin@alvin-pc:~/test$ rl
alvin@alvin-pc:~/test$
通过以上这些步骤,我们虽然可以实现一个回收站的功能,但是实际工作中,我们还是要养成定时备份的习惯,这样即使有误操作,我们也可以将损失降到最低。
地址:
https://mp.weixin.qq.com/s?__biz=MzA4NzQzMzU4Mg==&mid=2652927220&idx=2&sn=743288835e311da573106752c1bba0e5&chksm=8bed5cf5bc9ad5e34f00ba8bf15f5db8f67cbcbb52ab4af15487fa82cbfad901d5215ed60661&mpshare=1&scene=23&srcid=&sharer_sharetime=1580965861078&sharer_shareid=fc4e4e728d15840fe15fc9697ab1c078#rd