学习Linux有一段时间了,最初为了更好的学习Linux,ghost了原先的WinXp,安装了fedora 7,但最后还是忍无可是把它卸了(想把Linux作为桌面系统人大概都知道为什么吧)并在Xp下装了VM。因为配置不高,我的电脑运行VM是很吃力的(不比蜗牛快多少,汗),所以能在文本模式下操作的都尽量在文本模式下操作。
前几天一个不小心把很重要的文件给删了,在整整郁闷了240s后,最终决定写一个能在文本模式下操作的回收站。
功能介绍:
insert photo
recycle.setup: 安装回收站程序、创建相应的文件夹和文件
recycle.uninstall: 卸载回收站
recycle.clean:清空该用户的回收站
recycle.del file1 file2 … filen : 删除文件file1, file2 … filen并移至回收站
recycle.restore file1 file2 … filen: 还原文件file1, file2 … filen
recycle.show:显示该用户回收站中的信息
工作流程:
1. 删除文件或文件夹(recycle.del)
当用户要删除某个文件时,我们使用系统调用rename将文件移动到回收站的根目录下(/.recycle/),待用户需要时再将其还原。这样存在着一些问题:首先,用户可能删除具有相同文件名的文件,显然我们无法将它们一起放到/.recycle文件夹下面。其次,因为Linux是一个多用户的操作系统,一个用户(root出外)不因该有权限访问或修改他人的回收站中的内容。
对于第一个问题我们可以这样:当用户删除文件后,我们并不直接将其移动到回收站而是把它按照事先定义的重新命名方式将被删除文件重命名后再移动到回收站。为此再回收站目录下建立一个文本文件infotable,它保存如下信息:原始路径,重命名后的文件名,删除的日期。当删除文件时先向infotable注册一条新记录,如果注册成功则将文件移动到回收站下并重命名为新文件名。为了得到不重复的新文件名,再新建一个文本文件avaitable,它保存有一组数值(如:1,22,434,55,22……),表示所新删除的文件可以取这些数值做为新的文件名,并保证它们不会重复。
对于安全性我们可以为每个用户建立一个文件夹,命名为该用户的ID号。文件夹的属性为“drwx------”并再各文件夹下保存有各自的infotable和avaitable。
2.还原文件或文件夹(recycle.restore)
用户同过参数告诉还原程序要恢复文件的新文件名,还原程序再infotable表中查找它的原始路径,并将其重新移动到路径上去;再该文件的新文件名追加到avaitable文件中(说明该文名可以用了),最后删除文件infotable中的相关记录。
3. 安装以及初始化(recycle.setup)
首先root允许recycle.setup程序,该程序新建一个/.recycle文件夹(mode=0777)并复制回收站程序到/usr/bin目录下。
普通用户初次使用时也要先运行recycle.setup,它根据用户的ID在/.recycle下创建一个子文件夹,接着建立一个空的infotable和avaitable文件,最后将约定的数字写入到avaitable文件中,数据间以换行分隔。
4. 显示回收站信息(recycle.show)
用户输入命令reclcye.show,程序显示读取infotable文件并根据需求显示出用户所需的信息。
5. 清空用户回收站(recycle.clear)
每个用户只有清空自己回收站的权力,清空回收站程序首先得到该用户的ID,接着删除该用户在/.recycle文件夹,最后重新关键avaitable和infotable文件。