免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1079 | 回复: 2
打印 上一主题 下一主题

[系统管理] (更新) 分享自己写的unix回收站 ~_~ [复制链接]

论坛徽章:
4
2015年亚洲杯之伊朗
日期:2015-02-07 00:41:202015年亚洲杯之伊朗
日期:2015-02-07 13:02:4115-16赛季CBA联赛之福建
日期:2016-04-24 07:22:5215-16赛季CBA联赛之北控
日期:2016-07-05 15:35:19
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-09-29 09:54 |只看该作者 |倒序浏览
本帖最后由 520harrison 于 2016-09-30 13:26 编辑

附件的压缩包内有两个文件
trash.readme      说明文档及示例
trash.sh             脚本

#####################
更新:2016.9.30 10:46
修改了一些问题

欢迎提出意见和修改建议,或者格式、书写习惯、语法及性能上的改善等建议

下面是trash.readme的内容:

#Readme
实现功能:
    1、文件的回收
    2、回收站的列表,恢复,删除,清空,定时清理过期文件
    3、查找已被回收,但未记录在日志中的文件
    4、所有相关的操作,均保留文件的原始权限,避免未经授权的访问
    5、非root用户,仅可操作自己回收的文件,root用户可操作所有用户回收的文件
    6、文件名支持特殊字符(空白符除外)
    7、保护挂载分区、/ 分区下所有文件、/tmp不被删除,如:
           / /boot /bin /sbin /lib /lib64 /usr /var /home /opt /etc /sys
           /proc /dev /net /root /tmp /cgroup /selinux /mnt /media
    8、替换系统rm,将原rm命令备份
    9、在HPUX、AIX、Linux、freebsd中经过测试
脚本部署
    帮助
        sh trashsh -h
    交互安装
        sh trash.sh
    静默安装 加-n
        sh trash.sh -b /bin/
        sh trash.sh -n -d 30   设置回收站文件过期天数
        sh trash.sh -n -f      初始化回收站、日志文件夹(需root权限)
        sh trash.sh -n -a      在shell配置文件中安装alias, -P 指定查找配置文件的位置

已知问题:
    所指定的待回收文件、日志文件、回收站文件,其文件名中不能包含"/" (unix限制)
    待回收文件的文件名中不能包含空白符 [[:space:]]*
    unrm cleantrash 通过-p 指定的日志列表中,文件名不能包含","
    trash.sh cleantrash  通过-P 指定的文件列表中,文件名不能包含","
    系统负载较高时,执行速度略慢
注意:
    * 空白符作为文件名分隔符,含空白符的文件将被视为多个文件,用系统自带的"rm"删除此类文件
    * 文件名中的特殊字符需要转义
        \~\`\!\@#\$%\^\&\*\(\)_-+\=\{\[\}\]\|\\\:\;\'\"\,\<.\>\?
        
    * 为提高执行效率,建议初始化日志目录和回收站目录
        sh trash.sh -f
    1、需修改/tmp目录权限
        chmod 777 /tmp
        chmod +t /tmp
    2、日志文件按优先顺序存放(正则表示),如果以下目录均不可写,则记日志失败
        1、/etc/.trashlog[1-9]
        2、$HOME/.trashlog[1-9]
        3、/tmp/.trashlog[1-9]
        4、/tmp
    3、回收站目录优先顺序(正则表示),如果以下目录均不可写,则记文件回收失败
        1、回收文件对应的挂载点的根目录,/tmp,如:
            # df -P
            Filesystem      512-blocks    Used    Avail Capacity  Mounted on
            /dev/gpt/rootfs   40614392 2705832 34659416     7%    /
            devfs         
                      2       2        0   100%    /dev
        2、回收文件与回收站的对应关系为:
                待删文件           回收站
            /etc/test.conf     /.trash/20160925/root
            /dev/testfile      /dev/.trash/20160925/root
            /tmp/testfile      /tmp/.trash/20160925/root
        3、如果1中的回收站无法访问,则回收站设置为回收文件父目录
            ${file%/*}/.trash[1-9]/`date "+%Y%m%d"`/`id -un`
部署后文件:
    trash.sh            原始脚本文件,执行此文件安装即可
    delete              文件删除
    trashlog            记录日志,由delete,cleantrash调用
    unrm                列表,恢复,删除,清空回收站
    cleantrash          定时清理过期文件,查找已被回收,但未记录在日志中的文件

帮助:
  1. #####################################################################################################
  2. trash.sh -h

  3.     SYNOPSIS
  4.         trash.sh [-afhn]  [-d Expire_Day] [-p Install_Path] [-P path1,path2, ...]
  5.         
  6.         -a                 Install alias
  7.         -d  day            Specify expire day, default 30
  8.         -f                 Init trash and trashlog directory
  9.         -h                 Display this help and exit
  10.         -n                 No prompt
  11.         -p  path           Specify install path, default /bin
  12.         -P  pathlist       Write alias to Shell Config files find in pathlist, default all
  13.         -y                 Replace system rm
  14. #####################################################################################################

  15. #####################################################################################################
  16. delete -h

  17.     SYNOPSIS
  18.         delete [-N | -n] [-F] [-f | -i] [-r | -R] [-h] [--] file ...
  19.     Description
  20.         This is an auxiliary scripts of /bin/rm, povides a function similar to the Recycle Bin
  21.         Only -N -n -F -h control the actions of this scripts
  22.         Other variables like -i -f -r -R will be passed to /bin/rm

  23.         -f                    Ignore nonexistent files, never prompt
  24.         -F                    Use system command "rm", but cannot delete preserved files
  25.         -h, --help            Display this help and exit
  26.         -i                    Prompt before every removal
  27.         -r, -R                Remove directories and their contents recursively
  28.         -n                    No prompt
  29.         -N                    Same as -n, but force to move Files to trash directory

  30.     Warning
  31.         /bin/delete depends on /bin/rm, can not overwrite or delete /bin/rm
  32.         File name is seperated by blank characters
  33.         Special characters need to escape
  34.         \~\`\!\@#\$%\^\&\*\(\)_-+\=\{\[\}\]\|\\\:\;\'\"\,\<.\>\?

  35.     SEE ALSO: "unrm" to recover or to empty trash directory
  36.     SEE ALSO: "/bin/rm --help"
  37. #####################################################################################################


  38. #####################################################################################################
  39. unrm -h

  40.     SYNOPSIS
  41.          unrm [-h]
  42.          unrm <-d id1,id2 ... | [-c] [-P path] -r id1,id2 ...| -F | -l [-f]>
  43.               [-p path1,path2 ... ] [-n] [-u user1,user2 ...]
  44.     DESCRIPTION
  45.          Recover the deleted files, or delete files from the trash directory
  46.          Idlist format: "ID-","-ID","ID1-ID2","ID"

  47.         -c                 Only use with -r, copy instead of move
  48.         -d idlist          Delete files associated with the idlist, seperated by ","
  49.         -f                 Only use with -l, list filename of history file instead of contents
  50.         -F                 IF specify -u, will delete the files belong to userlist in
  51.                            trash directory, otherwise, will empyt trash directory
  52.         -h                 Display this help and exit
  53.         -l                 List trash history
  54.         -n                 Never prompt
  55.         -p pathlist        Specify trash history file list
  56.         -P path            Recover destpath, only use with -r
  57.         -r idlist          Recover the files associated with the idlist, seperated by ","
  58.         -u userlist        Specify user to filter the history, seperated by ","                  
  59.                            special user:"all" and "unknow"
  60.                            all:list trash history of all users
  61.                            unknow: deleted files in trash directory, find by "cleantrash"
  62. #####################################################################################################

  63. #####################################################################################################
  64. cleantrash -h

  65.     SYNOPSIS
  66.          cleantrash [-h]
  67.          cleantrash <-r [-d hold_Day] | -R [-P path1,path2 ...]> [-p path1,path2 ...] [-n] [-u user1,user2 ...]
  68.     DESCRIPTION
  69.          Delete expired files or Find deleted files not marked in logfiles

  70.         -d hold_Day        Specify expiration days of deleted files, only use with -r
  71.         -h                 Display this help and exit
  72.         -n                 Never prompt
  73.         -p pathlist        Specify trash history file list
  74.         -P pathlist        Specify trash directory, only use with -R
  75.         -r                 Delete expired files
  76.         -R                 Find deleted files not marked in logfiles
  77.         -u userlist        Specify user to filter the history, seperated by ","                  
  78.                            special user:"all" and "unknow"
  79.                            all:list trash history of all users
  80.                            unknow: deleted files in trash directory, find by "cleantrash"
  81. #####################################################################################################
复制代码

示例:
  1. #####################################################################################################
  2. # ALIAS
  3. [root@localhost root]#alias
  4. rm='delete -n'
  5. rl='unrm -l'
  6. rla='unrm -l -u all'
  7. rd='unrm -d'
  8. rr='unrm -r'

  9. #####################################################################################################
  10. # 回收
  11. [root@localhost root]#pwd
  12. /root/a
  13. [root@localhost root]#rla
  14. [root@localhost root]#touch a b c 1 2 3 4 5 6 7
  15. [root@localhost root]#ls
  16. 1   2   3   4   5   6   7   a   b   c
  17. [root@localhost root]rm a 1
  18. [root@localhost root]rm -F b 2
  19. [root@localhost root]rla
  20. ID User Date       Time     SourcePath TrashPath
  21. 1  root 2016-09-24 13:28:42 /root/a/a  /.trash/20160924/root
  22. 2  root 2016-09-24 13:28:42 /root/a/1  /.trash/20160924/root
  23. [root@localhost root]ls
  24. 3   4   5   6   7   c
  25. [root@localhost root]rm *
  26. [root@localhost root]rla
  27. ID User Date       Time     SourcePath TrashPath
  28. 1  root 2016-09-24 13:29:14 /root/a/c  /.trash/20160924/root
  29. 2  root 2016-09-24 13:29:14 /root/a/7  /.trash/20160924/root
  30. 3  root 2016-09-24 13:29:14 /root/a/6  /.trash/20160924/root
  31. 4  root 2016-09-24 13:29:14 /root/a/5  /.trash/20160924/root
  32. 5  root 2016-09-24 13:29:14 /root/a/4  /.trash/20160924/root
  33. 6  root 2016-09-24 13:29:14 /root/a/3  /.trash/20160924/root
  34. 7  root 2016-09-24 13:28:42 /root/a/a  /.trash/20160924/root
  35. 8  root 2016-09-24 13:28:42 /root/a/1  /.trash/20160924/root
  36. #####################################################################################################
  37. # 还原
  38. [root@localhost root]#mkdir /tmp/test
  39. [root@localhost root]#rr  1 -P /tmp/test -n
  40. [root@localhost root]#rla
  41. ID User Date       Time     SourcePath TrashPath
  42. 1  root 2016-09-24 13:29:14 /root/a/7  /.trash/20160924/root
  43. 2  root 2016-09-24 13:29:14 /root/a/6  /.trash/20160924/root
  44. 3  root 2016-09-24 13:29:14 /root/a/5  /.trash/20160924/root
  45. 4  root 2016-09-24 13:29:14 /root/a/4  /.trash/20160924/root
  46. 5  root 2016-09-24 13:29:14 /root/a/3  /.trash/20160924/root
  47. 6  root 2016-09-24 13:28:42 /root/a/a  /.trash/20160924/root
  48. [root@localhost root]#ls /tmp/test
  49. c
  50. [root@localhost root]#rr -2 -nc -P /tmp/test
  51. [root@localhost root]#rla
  52. ID User Date       Time     SourcePath TrashPath
  53. 1  root 2016-09-24 13:29:14 /root/a/7  /.trash/20160924/root
  54. 2  root 2016-09-24 13:29:14 /root/a/6  /.trash/20160924/root
  55. 3  root 2016-09-24 13:29:14 /root/a/5  /.trash/20160924/root
  56. 4  root 2016-09-24 13:29:14 /root/a/4  /.trash/20160924/root
  57. 5  root 2016-09-24 13:29:14 /root/a/3  /.trash/20160924/root
  58. 6  root 2016-09-24 13:28:42 /root/a/a  /.trash/20160924/root
  59. [root@localhost root]#ls /tmp/test
  60. 6   7   c
  61. #####################################################################################################
  62. # 删除,清空回收站
  63. [root@localhost root]#rd -1,2-3,5,6- -n -u all
  64. [root@localhost root]#rla
  65. ID User Date       Time     SourcePath TrashPath
  66. 1  root 2016-09-24 13:29:14 /root/a/3  /.trash/20160924/root
  67. [root@localhost root]#unrm -Fn
  68. [root@localhost root]#rla
  69. [root@localhost root]#
  70. #####################################################################################################

  71. #####################################################################################################
  72. # 查找已被回收,但未记录在日志中的文件
  73. [root@localhost root]#rl -fuall
  74. [root@localhost root]#cleantrash -R
  75. Find deleted files not marked in logfiles [YES/NO]:[NO]y
  76. Find /tmp/.trash/20160924/root/a.sh_2016-09-24_12:43:48
  77. Find /tmp/.trash/20160924/root/a_2016-09-24_12:43:42
  78. Find /tmp/.trash/20160924/root/a_2016-09-24_12:44:12
  79. Find /.trash/20160924/root/1_2016-09-24_13:28:42
  80. Find /.trash/20160924/root/awk.core
  81. [root@localhost root]#rla
  82. ID User   Date       Time     SourcePath               TrashPath
  83. 1  unknow 2016-09-24 13:54:56 awk.core                 /.trash/20160924/root
  84. 2  unknow 2016-09-24 13:54:56 a_2016-09-24_12:44:12    /tmp/.trash/20160924/root
  85. 3  unknow 2016-09-24 13:54:56 a_2016-09-24_12:43:42    /tmp/.trash/20160924/root
  86. 4  unknow 2016-09-24 13:54:56 a.sh_2016-09-24_12:43:48 /tmp/.trash/20160924/root
  87. 5  unknow 2016-09-24 13:54:56 1_2016-09-24_13:28:42    /.trash/20160924/root
  88. [root@localhost root]#
  89. #####################################################################################################

  90. #####################################################################################################
  91. # 特殊字符支持
  92. [root@localhost tmp]# ls /
  93. ~`!@#$%^&*()_-+={[}]|\:;'",<.>?

  94. [root@localhost tmp]# rm ~\`\!\@#\$%\^\&\*\(\)_-+\=\{\[\}\]\|\\\:\;\'\"\,\<.\>\?
  95. /~`!@#$%^&*()_-+={[}]|\:;'",<.>? is preserved, if you really want to delete it, please perform:
  96.     /usr/bin/rm /~`!@#$%^&*()_-+={[}]|\:;'",<.>?

  97. [root@localhost tmp]# mv /~\`\!\@#\$%\^\&\*\(\)_-+\=\{\[\}\]\|\\\:\;\'\"\,\<.\>\?  /tmp

  98. [root@localhost tmp]# rm \~\`\!\@#\$%\^\&\*\(\)_-+\=\{\[\}\]\|\\\:\;\'\"\,\<.\>\?

  99. [root@localhost tmp]# rla
  100. ID User Date       Time     SourcePath                           TrashPath
  101. 1  root 2016-09-24 14:07:05 /tmp/~`!@#$%^&*()_-+={[}]|\:;'",<.>? /tmp/.trash/20160924/root

  102. [root@localhost tmp]# cleantrash -R
  103. Find deleted files not marked in logfiles [YES/NO]:[NO]y
  104. Find /tmp/.trash/20160924/root/~`!@#$%^&*()_-+={[}]|\:;'",<.>?1

  105. [root@localhost tmp]# rla
  106. ID User   Date       Time     SourcePath                           TrashPath
  107. 1  root   2016-09-24 14:07:05 /tmp/~`!@#$%^&*()_-+={[}]|\:;'",<.>? /tmp/.trash/20160924/root
  108. 2  unknow 2016-09-24 14:09:03 ~`!@#$%^&*()_-+={[}]|\:;'",<.>?1     /tmp/.trash/20160924/root

  109. [root@localhost tmp]# rr 1 -cP /tmp
  110. Recover the files specified by idlist which recycled by user: root [YES/NO]:[NO]y
  111. Copy /tmp/.trash/20160924/root/~`!@#$%^&*()_-+={[}]|\:;'",<.>?_2016-09-24_14:07:05 to /tmp/~`!@#$%^&*()_-+={[}]|\:;'",<.>? succeed

  112. [root@localhost tmp]# rla
  113. ID User   Date       Time     SourcePath                           TrashPath
  114. 1  root   2016-09-24 14:07:05 /tmp/~`!@#$%^&*()_-+={[}]|\:;'",<.>? /tmp/.trash/20160924/root
  115. 2  unknow 2016-09-24 14:09:03 ~`!@#$%^&*()_-+={[}]|\:;'",<.>?1     /tmp/.trash/20160924/root

  116. [root@localhost tmp]# ls /tmp
  117. ~`!@#$%^&*()_-+={[}]|\:;'",<.>?

  118. [root@localhost tmp]# rd -1 -n
  119. [root@localhost tmp]# rla
  120. ID User   Date       Time     SourcePath                       TrashPath
  121. 1  unknow 2016-09-24 14:09:03 ~`!@#$%^&*()_-+={[}]|\:;'",<.>?1 /tmp/.trash/20160924/root

  122. [root@localhost tmp]# unrm -F -u all
  123. Empty the trash directory recycled by user: all users [YES/NO]:[NO]y
  124. Delete /tmp/.trash/20160924/root/~`!@#$%^&*()_-+={[}]|\:;'",<.>?1 succeed
  125. [root@localhost tmp]# rla
  126. [root@localhost tmp]#
  127. #####################################################################################################

复制代码


论坛徽章:
1
15-16赛季CBA联赛之福建
日期:2016-10-26 14:32:57
2 [报告]
发表于 2016-09-29 10:05 |只看该作者
我先阅读以下,多谢分享

论坛徽章:
0
3 [报告]
发表于 2016-09-29 14:04 |只看该作者
看着不错,多谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP