使用trashcan恢复linux下误删的文件

时间:2021-11-07 17:33:09

在linux命令行下,经常会误操作删除一些东西,如果加了-f参数,又是重要的文件那就等着杯具吧,本人曾经将一个月的工作误删了,后来试了试一些文件恢复工具,但都操作复杂,比较麻烦,不了了之,只有重做一次,最近经人推荐试用了下Trash can这个工具,感觉比较好用,故推荐之
下载链接https://github.com/comwt/trashcan
1、 安装
#tar –zxf trashcan-3.4.tar.gz
#cd trashcan-3.4/shell
# ./trash_install
安装过程其实比较简单,但会有很多问答,慢慢耐心选择回答就行
在问答过程中,有一个问题会问希望配置文件是命名成什么名字,最好取一个自己比较能方便识别的名字如trashcan.profile,因为安装之后需要通过这个配置文件来对环境变量做出一些设置,所以这个文件非常重要
安装结束后找到trashcan.profile,执行如下命令:
#source                   trashcan.profile
执行完成后就可以使用了
2、 原理
trash can的原理实际是并不是从硬盘上将丢失的数据恢复,数据其实并没有真正的被删除,只是放到了另一个地方,当用户需要的时候,再还原就行,这跟windows中的回收站很类似。那么它是怎么做到这一点的呢,看看trashcan.profile就知道了
#vi trashcan.profile可以看到如下内容
#-Trash Can
TRASHDIR=/home/litl/.trash #-- User's TRASH DIRectory
TBINDIR=/usr/bin #-- Trash BINary DIRectory
aliasdelete="/bin/bash ${TBINDIR}/trash.sh -rest ${TRASHDIR} -d "
aliasempty="/bin/bash ${TBINDIR}/trash.sh -empty ${TRASHDIR} "
aliasprm="/bin/bash ${TBINDIR}/trash.sh -prm ${TRASHDIR} "
aliaspurge="/bin/bash ${TBINDIR}/trash.sh -purge ${TRASHDIR} "
aliastrestore="/bin/bash ${TBINDIR}/trash.sh -rest ${TRASHDIR} "
aliasrm="/bin/bash ${TBINDIR}/trash.sh -rm ${TRASHDIR} " #-- Same as 'throw'
aliasthrow="/bin/bash ${TBINDIR}/trash.sh -rm ${TRASHDIR} " #-- Same as 'rm'
aliastkeep="/bin/bash ${TBINDIR}/trash.sh -keep ${TRASHDIR} " #-- Configure keep days
aliastmax="/bin/bash ${TBINDIR}/trash.sh -tmax ${TRASHDIR} " #-- Configure capacity
aliastrash="/bin/bash ${TBINDIR}/trash.sh -list ${TRASHDIR} " #-- Trash Specs/Contents
purge #-- Daily Old Trash Purge
这一下可以很清楚地看到,trashcan实际是是把系统原有的命令rm做了别名,替换成trash.sh中的命令,删除的东西会暂时放到$TRASHDIR中,也就是文章中看到的/home/litl/.trash目录下。
个人认为这种方式很优雅,用户大多数时候删除数据都是属于误操作,只要有种方式避免这种情况的发生就能杜绝绝大多数杯具的发生了,真正的破坏性情况丢失数据还是很少的,所以这种让用户有后悔药可吃是方法比较明智的。
3、 使用
#trash
可以看到以下内容,这里列出了trashcan的用法
OPTIONS:
empty -Permanently remove all trash
prm -Permanently remove (bypass trash system)
purge -Permanently remove trash older than 460 days
trestore -Restores file to its originallocation
rm -remove file(s)
throw -remove file(s)
tkeep -configure the number of days to keep trash
tmax -configure trash can capacity
trash -list trash disk usage,
list trash options,
list files in trash (date deleted,file name, original path)

下面来使用一下trash can提供的一些功能,首先建立一个测试目录
#mkdirtesttrashcan
在里面随意放一些东西,我放的东西如下:
[root@localhosttesttrashcan]# ls
cyrus-sasl-2.1.23 php-5.3.8 php-5.3.8.tar.gz postfix-2.8.2 postfix-2.8.2.tar.gz squirrelmail-webmail-1.4.22 squirrelmail-webmail-1.4.22.tar.bz2
[root@localhosttesttrashcan]# rm postfix-2.8.2* 将postfix相关的文件全部删除
[root@localhosttesttrashcan]# trash 
再按一下回车,即可看到如下内容,列出了当前trashcan中的文件有哪些,可以看到postfix相关的内容都在里面
TRASH CANCONTENTS:
Deleted Type File Name
------- ---- ---------
03/02/2012 DIR courier-authlib-0.60.2
03/02/2012 DIR extman-0.2.5
03/02/2012 DIR postfix-2.8.2
03/02/2012 FILE cyrus-sasl-2.1.23.tar.gz
03/02/2012 FILE dovecot-1.1.4.tar.gz
03/02/2012 FILE extman-0.2.5.tar.gz
03/02/2012 FILE httpd-2.2.21.tar.gz
03/02/2012 FILE postfix-2.8.2.tar.gz

接下来恢复刚刚删除的postfix
[root@localhosttesttrashcan]# trestore
可看到如下内容
Deleted Type Original Path
1. 03/02/2012 DIR /root/litl/testtrashcan/courier-authlib-0.60.2
2. 03/02/2012 FILE /root/litl/testtrashcan/cyrus-sasl-2.1.23.tar.gz
3. 03/02/2012 FILE /root/litl/testtrashcan/dovecot-1.1.4.tar.gz
4. 03/02/2012 DIR /root/litl/testtrashcan/extman-0.2.5
5. 03/02/2012 FILE /root/litl/testtrashcan/extman-0.2.5.tar.gz
6. 03/02/2012 FILE /root/litl/testtrashcan/httpd-2.2.21.tar.gz
7. 03/02/2012 DIR /root/litl/testtrashcan/postfix-2.8.2
8. 03/02/2012 FILE /root/litl/testtrashcan/postfix-2.8.2.tar.gz
9. EXIT (NOT SHOWN)

Select the file number to be restored:
提示我们输入想要恢复文件的编号,输入想恢复的文件对应编号即可,若是多个文件,可用逗号隔开,如下:
Select the filenumber to be restored: 7,8
回车,成功之后可看到文件恢复成功的提示,如下
File wassuccessfully restored.

至于如何将所有文件全部还原或者还原一个编号范围内的文件我还没相应的方法,只是粗略试了一下,大家可继续摸索。

4、 其他
使用trash can的总体感受是恢复文件的速度很快,但删除文件的时候明显很卡,估计是删除的时候需要做很多操作来供日后恢复,但这点缺点丝毫不影响本人对它的好感,只要恢复的时候多快好省那就行了,谁又会希望自己删东西的时候删得快呢?