Rox-filer与linux回收站

使用环境:Ubuntu 7.04

Gnome自带的Nautilus,典型属于大而全的东西,而Xfce里面默认的Thunar要好一些,两者都有莫名其妙被关闭的经历,并且回收站还不在一个地方,Nautilus删除文件会移动到相应磁盘下的.Trash-用户名或者用户的$HOME/.Trash目录,而Thunar会把删除的文件移动到~/.local/share/Trash$目录下,还用files和info两个目录分别保存文件和信息。两个我都不太喜欢,决定换用小巧灵活的Rox-filer,唯一遗憾的是放弃了左边目录树的查看功能。

Rox不仅启动速度快,占用资源小,它的定制功能、文件选定等功能也非常灵活,比如[Ubuntu中文 论坛](http://forum.ubuntu.org.cn/about15116.html)里[eexpress](http://forum.ubuntu.org.cn/profile.php?mode=viewprofile&u=1239)提供的那个“选定文件按照目录名打包”脚本放在SendTo里面就非常好用,还有选定文件之后用Shift+!输入mv "$@" somewhere命令移动文件也是个非常不错的折衷方法。对于samfs和usb设备支持差了点,不过可以用Bookmark或者Ctrl+1(红警的编队快捷键)来弥补。

但是和Nautilus和Thunar相比,Rox除了缺少目录树之外,还没有回收站的功能,这年月谁能保证不删错一个文件啊,ext3分区的文件恢复又相对麻烦,怎么办?用libtrash喽,和Rox一样都在Ubuntu的源中可以直接安装,我当前使用的版本是2.4-1。

libtrash和其他的回收站处理不同,他直接作用于linux的底层,相当于是在libc上挂了一个钩子(hook),凡是系统要进行删除文件操作的时候,不管是用rm命令,还是php的unlink函数,都会用到底层的libc,也就逃不过libtrash的掌控,所以说使用起来非常放心、省心。

也正由于libtrash的底层性,所以最好不要启用root用户的回收站功能,因为root对系统的管理要涉及到很多文件修改,如果被libtrash拒绝将会导致无法预知的结果,所以,默认的配置文件/etc/libtrash.conf不要动,复制一份为$HOME/.libtrash,作用用户级的配置文件来使用,默认设置已经比较好用了,不过我还是按照自己的习惯修改了几个地方:

#TRASH_CAN = Trash
# 和Ubuntu默认回收站目录保持一致
TRASH_CAN = .Trash

#IGNORE_EXTENSIONS = o;log;aux
# Log文件还是要保留的
IGNORE_EXTENSIONS = o;aux

#TEMPORARY_DIRS = /tmp;/var
# /var目录下的日志文件也要保护起来
TEMPORARY_DIRS = /tmp

libtrash是通过LD_PRELOAD机制来启用的,所以需要修改.bashrc作相应的设置:

# libtrash setting
export LD_PRELOAD=/usr/lib/libtrash/libtrash.so.2.4
alias TrashOn='export TRASH_OFF=NO'
alias TrashOff='export TRASH_OFF=YES'
TrashOn

真正起作用的是第一句export,设置了这个环境变量之后,才真正的把钩子“挂上”,后面的alias是设置方便的开关命令,想像一下当你清空移动硬盘上的电影的时候,$HOME被塞满到爆的情况吧,这时候也许就要临时关闭回收站功能了,设置了TRASH_OFF=YES之后,删除的文件不会再被移动到回收站,而是真正的被系统删除。

除了TrashOff之外,配合Rox的SendTo机制,也许更方便一些,在~/.config/rox.sourceforge.net/SendTo目录创建一个脚本trm-Truely_Remove

#! /bin/bash
# 暂时关闭libtrash,永久删除指定文件

export TRASH_OFF=YES

# 遍历指定的文件进行处理
for I in "$@"
do
        rm -rf $I
done

export TRASH_OFF=NO

这样再有想直接删除的文件,在Rox中选定然后用Send to发送到这个脚本进行处理就可以了,不过一定要确定是真正不要了的文件哦。

还剩下唯一一个缺点,就是libtrash只能指定一个回收站目录,一般是在用户的HOME目录下,如果需要管理的文件不在$HOME下的比较多,比如我习惯使用的/big1, /big2等等,删除后的文件就全都存到$HOME这里来了,即使他们不在一个分区,而不是像Naulius那样每个分区一个回收站目录。所以回收站里的数据会增长的很快,不过也有办法解决,单独给这个目录分配一个分区喽,还不用考虑磁盘碎片的问题。

参考:

  • [LibTrash – DebianWiki](http://wiki.debian.org.tw/index.php/LibTrash)
  • [linux上的垃圾箱](http://wenliang.wordpress.com/2007/02/09/trashonlinux/)

update @ 2007-05-19

按照上面的设置,从命令行启动的rox能够正常写入回收站,但从Xfce菜单上启动的就不行了,原因未知,不过可以自己写一个脚本中转一下:

#!/bin/bash
export LD_PRELOAD=/usr/lib/libtrash/libtrash.so.2.4
/usr/bin/rox

在默认的设置中,.Trash目录是受保护的,不管是用shell还是用rox进入这个目录,文件都无法删除,但是可以用上面讲到的那个SendTo...脚本来完成,这样反而觉得更安全些了呢。

4 thoughts on “Rox-filer与linux回收站”

  1. RoxFiler我也遇到过退出的情况,一般出现在文件夹下有非常多的文件时,比如我的/usr/share/bin目录。

    我用的是Xubuntu,结果用了一圈发现还是Thunar比较适合我。

    回收站我觉得并不是必要的,因为我一般不随便删除东西,都是实在不行了,才大规模清理一下。

  2. 看来哪个都不是完美的,thunar算是最好的折衷方案了 不过我现在调整成这样了: 在shell中不使用回收站功能,这样操作方便一些 在rox中启用回收站功能,整理文件的时候还是用rox要多一些, 这样更不容易丢失文件。

Leave a Reply to Fwolf Cancel reply

Your email address will not be published. Required fields are marked *