转载时请注明出处和作者联系方式
文章出处:http://blog.csdn.net/jack0106 
作者联系方式:冯牮 fengjian0106@yahoo.com.cn

 

前两天有个同事在命令行下面执行rm的时候,不小心删除了很多系统文件,搞得系统崩溃了,我们想过恢复ext4文件系统,但是没有成功,最终还是重装电脑。我之前也犯过同样的错误,所以再总结一下

 

1. 最简单的办法,将rm替换为mv,方法如下:

 

在~/.bashrc 文件里追加下面一段,然后刷新该文件 source ~/.bashrc 即可。使用rm命令的时候就会把文件移动到指定的文件夹~/.trash下 

 

 

 

 

这种方法虽然简单,但是还不够灵活,而且这个rm命令,不能处理命令行选项。

 

2. 第一种方法的改进,可以参考此帖http://iregex.org/blog/safer-rm-command.html

不足的地方----仍然是不能处理rm的命令行选项。

 

3. 提供一个和rm兼容的工具,选项参数和rm保持一致。(这个代码我还没有找到,我也没有自己去写,因为,后面还有更好的方法)

不足的地方----本来这种方法已经没有不足了,但是,gnome图形环境下,是有回收站的,我们还可以更好的和回收站整合

 

4. 提供一个和rm兼容的工具,选项参数和rm保持一致,并且,文件会被删除到gnome的回收站中(gnome回收站的路径是~/.local/share/Trash  其中还包含2个或多个子路径,回收站里面不仅保存文件,还保存执行删除操作时的一起额外信息,比如原始路径和删除的时间),这样的话,在图形环境下,也可以察看被删除的文件,并且可以恢复。

 

 

这个工具已经有了,不需要我们自己造轮子,在ubuntu下执行sudo apt-get install trash-cli,然后就会得到trash这个命令行工具,看一下它的帮助信息,和容易就可以使用了

 

trash --help

Usage: trash [OPTION]... FILE...

 

Put files in trash

 

Options:

  --version            show program's version number and exit

  -h, --help           show this help message and exit

  -d, --directory      ignored (for GNU rm compatibility)

  -f, --force          ignored (for GNU rm compatibility)

  -i, --interactive    ignored (for GNU rm compatibility)

  -r, -R, --recursive  ignored (for GNU rm compatibility)

  -v, --verbose        explain what is being done

 

 

 

 

5. 如果要重新造轮子,怎么造?

这就要用到glib中的gio模块,在gio中,文件都是用GFile来表示的,GFile有一个函数,就是把文件删除到回收站中,函数如下:

 

 

要自己造轮子,就要用到这个函数,还可以进一步深入,这个函数的内部,是如何实现的?这个函数的内部,调用到了glocalfile.c中的另外一个函数,如下:

 

 

可以用c编码,也可以用python编码,其实前面提到的trash工具,就是用python编写的。

 

 

 

Logo

更多推荐