Chinaunix首页 | 论坛 | 博客
  • 博客访问: 631771
  • 博文数量: 151
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 1664
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-13 16:37
文章分类

全部博文(151)

文章存档

2010年(16)

2009年(135)

我的朋友

分类: LINUX

2009-11-19 20:37:02

建立资源回收站----安装libtrash函式库
-----------------------------------------------------------------
前面我们使用mv命令指代rm指令,可以建立一个简易的资源回收站,不过这个方法只能复原使用rm指令来删除的档案。如果使用其他档案管理程序如mc等,因为这些程序大多直接呼叫系统删除档案的函式,而不式使用rm指令,所以经由其他程序删除的档案仍然无法复原.如此看来,取代系统函式才是真正治本的方法。
下载和安装libtrash
----------------------------------------------------------------
Libtrash是一个动态载入的函式库,只要先将它载入系统中,libtrash便会自动拦截所有对系统删档函式的呼叫,将所有欲删除的档案,放入特定目录中。所以藉由libtrash函式库,便可建立一个完整的资源回收机制,复原所有不小心删除的档案。
       首先连线,点选downloaded from旁边的here链接,下载libtrash的原始档。下载完毕后如下安装:
【由于上面的网站打不开,所以我下的是网上down的bz2包】
[root@smart402 ~]# tar jxvf libtrash-2.2.tar.bz2
[root@smart402 ~]# cd libtrash-2.2
[root@smart402 libtrash-2.2]# make
[root@smart402 libtrash-2.2]# make install
Libtrash函式库被安装在/usr/local/lib目录下,可以如下观察:
[root@smart402 ~]#cd /usr/lib
[root@smart402 lib]# ls -l libtrash.so
lrwxrwxrwx  1 root root 15  7月 28 03:38 libtrash.so -> libtrash.so.2.2
载入libtrash函式库
--------------------------------------------------------------------
安装了libtrash后,便可以将libtrash函式库载入系统。载入方法:
1)  使用LD_PRELOAD环境变数载入libtrash
LD_PRELOAD环境变数定义了系统必须预先载入的函式库,因此可以执行下面命令,要求系统载入libtrash函式库:
[root@smart402 lib]# export LD_PRELOAD=/usr/lib/libtrash.so
【如果希望每次登入时自动设定LD_PRELOAD环境变数,则将上述指令加入家目录下的  .bashrc档案最后面.若是希望系统上的所有使用者登入时,都能自动载入libtrash函式库,则可以将其加入/etc/目录下的prifile档案最后面】
若要取消载入libtrash函式库,只要执行下面指令:
[root@smart402 ~]# unset LD_PRELOAD
2)  使用/etc/ld.so.preload设定档载入libtrash
/etc/ld.so.preload档案的作用和LD_PRELOAD环境变量相同,此设定档内定义的函式库,都会被系统自动登入.因此请使用文本编辑器,开启/etc/ld.so.preload(若不存在,则自行建立),输入下列设定值:
/usr/lib/libtrash.so
   如此,系统便会自动载入libtrash函式库。如果想要取消libtrash函式库,只要重新编辑/etc/ld.so.preload档案,将上述设定值删除即可。
【如果找不到libtrash.so这个文件,则可以使用#updatedb;locate libtrash.so搜索即可】
两种载入方式的优缺点
-------------------------------------------------------------------------------
我们将从两种观点来分析载入方式的优缺点:
A):系统稳定性:
从系统稳定姓的角度看:使用/etc/ld.so.preload设定档较为危险。每次当启动执行档时,若该执行档用动态链接函式库,则在载入标准函式库之前,系统会自动依据ld.so.preload档案,预先载入其设定的函式库.如果编辑设定档时路径输入错误,导致系统找不到libtrash函式库,或者libtrash函式库出现漏洞,都会导致执行程序时出现错误.此时可能连文件编辑器都无法正常工作,严重的话更可能发生无法正常开关机的状态。
【如果真的发生上述情况,请试着进入单人模式,或者使用开机软件或光盘启动电脑后,移除/etc/ld.so.preload档中关于libtrash函式库的设定,即可修复系统】
如果藉由LD_PRELOAD环境变数载入libtrash函式库,那么发生问题时,只要使用unset指令即可取消载入。因为unset指令为shell内建的命令,不需要启动任何执行档,所以不会收到libtrash函式库载入错误的影响。
B):方便度
使用ld.so.preload档时,只要在/etc/ld.so.preload设定完成后,即可让所有使用者受惠,所以比较方便。
LD_PRELOAD环境变数如果只设定于单一账号的.brashrc档中,将仅适用于该账号,即使设定在/etc/profile档案,也无法使用于last的帐户,因为last的登入设定档为/etc/last.login。所以LD_PRELOAD环境变量容易受到shell的因素而需要不同的设定,使用上比较复杂。
从以上分析中,自行衡量哪一种方式比较适合你的环境.
如何使用libtrash函式库所建立的资源回收机制
---------------------------------------------------------------------------------------
    载入libtrash函式库后,系统便已经建立资源回收的机制了,不论使用什么程序删除文档,libtrash函式库都会将删除的档案转移到,家目录下的Trash目录。所以如果需要挽救不小心删除的档案时,只要切换到Trash目录下寻找即可。
[root@smart402 ~]# ls
anaconda-ks.cfg  heartbeat-2.0.2          install.log         ipvsadm-1.24            ipvsadm-1.24.tar.gz  libnet.tar.gz  libtrash-2.2.tar.bz2
Desktop          heartbeat-2.0.2.tar.tar  install.log.syslog  ipvsadm-1.24-6.src.rpm  libnet               libtrash-2.2   Trash
[root@smart402 ~]# rm ipvsadm-1.24.tar.gz
rm:是否删除一般文件‘ipvsadm-1.24.tar.gz’? y
[root@smart402 ~]# ls ~/Trash/
ipvsadm-1.24.tar.gz  SYSTEM_ROOT
[root@smart402 ~]#
【libtrash函式库会自动忽略大小为0的空档案,且预设不保护暂存目录/tmp,/var/tmp下的档案】
[root@smart402 ~]# export TRASH_OFF=YES  【关闭libtrash函式库】
[root@smart402 ~]# export TRASH_OFF=ON  【开启libtrash函式库】
【可以自行为上述指令设定别名,如#alias trash_off=‘export TRASH_OFF=YES’,然后把它写入家目录下的.bashrc这个文件中,如此只要输入trash_off即可关闭libtrash函式库,便不需要输入一长串的字符】
因此如果想要真正删除某个档案,例如要真正删除彻底某个档案:
[root@smart402 ~]# TRASH_OFF=YES rm heartbeat-2.0.2.tar.tar
rm:是否删除一般文件‘heartbeat-2.0.2.tar.tar’? y
[root@smart402 ~]# ls ~/Trash/
ipvsadm-1.24.tar.gz  SYSTEM_ROOT
【若不想每次输入很长的指令,可以执行alias realrm=’TRASH_OFF=YES rm’设定别名,然后写入家目录下的.bashrc】如此想要彻底删除某个文件则
[root@smart402 ~]# alias realrm='TRASH_OFF=YES rm'
[root@smart402 ~]# ls
anaconda-ks.cfg  heartbeat-2.0.2  install.log.syslog  ipvsadm-1.24-6.src.rpm  libnet.tar.gz  libtrash-2.2.tar.bz2
Desktop          install.log      ipvsadm-1.24        libnet                  libtrash-2.2   Trash
[root@smart402 ~]# realrm ipvsadm-1.24-6.src.rpm
rm:是否删除一般文件‘ipvsadm-1.24-6.src.rpm’? y
[root@smart402 ~]# ls ~/Trash/
ipvsadm-1.24.tar.gz  SYSTEM_ROOT
[root@smart402 ~]#
          因为所有想删除的档案搬移到资源回收站内,所以这些档案实际上仍存于系统上,为避免占用宝贵的磁盘空间,则可以执行crontab –e指令:
0 2 * * * TRASH_OFF=YES rm –rf ‘find ~/Trash/ -atime +1‘
【表示在价目录上的Trash目录内搜寻超过一天以上没被存取过的档案】
如此,每天凌晨2点,系统便会在帐户下的资源回收站内,搜寻超过一天以上没被存取过的档案,然后自行删除。如果想帮系统上所有使用者自动删除资源回收站内超过一天以上的档案,则请使用root帐户执行crontab –e:
0 2 * * * TRASH_OFF=YES rm –rf ‘find /home/*/Trash/ -atime +1‘
更改libtrash设定值
------------------------------------------------------------------------
            当安装libtrash函式库时,安装程序会自动在/etc/目录下建立libtrash.conf的档案.不过这个档案并不是libtrash的设定档,libtrash函式库执行时不会读取该档案,其作用只是让我们知道目前libtrash的设定值。
            如果你想要更改libtrash的设定值,请使用文本编辑器,在家目录下建立一个名为 .libtrash的档案,将欲更改的项目由/etc/libtrash.conf复制到.libtrash档内,然后进行设定。如此libtrash函式库执行时,便会读取家目录下的.libtrash档,依据该档的设定值进行对应的动作。
下面是libtrash档的常用设定:
[root@smart402 ~]# more /etc/libtrash.conf
……
TRASH_CAN = Trash 【设定资源回收站的目录名称】
……
PROTECT_TRASH = YES 【设定是否保护资源回收站的档案,若设定为YES,除非关闭libtrash函式库,否则将无法删除资源回收站内的档案】
IGNORE_EXTENSIONS = o;log;aux       【设定忽略特定副档名,此处预设表示所有副档名为.o '.log'.aux的档案将不会被放进资源回收站,而是直接删除 】
IGNORE_HIDDEN = YES  【设定忽略档名以”。”开头的隐藏档,作用类似前面IGNORE_EXTENSIONS项目】
IGNORE_EDITOR_BACKUP = YES       【设定忽略档名以“~”结尾的备份档(此处类型的档案通常是文本编辑器用来备份档案前一版本),作用类似前面的IGNORE_EXTENSIONS项目】
。。。。。。
LIBTRASH_CONFIG_FILE_UNREMOVABLE = YES  【设定是否保护libtrash的设定档,若设定为yes,除非关闭libtrash函式库,否则将无法删除libtrash的设定档】
GLOBAL_PROTECTION = YES      【设定是否保护家目录以外的档案】
TRASH_SYSTEM_ROOT = SYSTEM_ROOT       【档GLOBAL_PROTECTION项目被设定为YES时,此项目设定家目录以外的档案将被转移到资源回收站的哪一个目录】
UNREMOVABLE_DIRS=/bin;/boot;/dev;/etc;/lib;/sbin;/usr 【此项目设定哪些目录内的档案永远无法被删除,此处将重要的系统目录设定在此项目内,可避免误删重要的系统档案】
TEMPORARY_DIRS = /tmp;/var     【设定系统暂存档的目录,在这些目录内的档案将不受libtrash的保护】
USER_TEMPORARY_DIRS = temp        【设定个人暂存档的目录,在这些目录内的文件将不受libtrash的保护,设定为temp,表示家目录的temp目录下档案将不受保护】
REMOVABLE_MEDIA_MOUNT_POINTS = /mnt        【设定光碟,软盘等随机挂载的目录,在这些目录内的档案不受libtrash的保护】
EXCEPTIONS = /etc/mtab;/etc/resolv.conf;/etc/adjtime;/etc/upsstatus;/etc/dhcpc     【设定这些档案将不受libtrash的保护,档UNREMOVABLE_DIRS项目设定的目录内有一些需要能被删除档案时,便可以利用此设定项目将这些档案排除在保护外】
阅读(1399) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~