前不久才因为自己的一个手快执行了 “rm /*”,误删除了整个根目录。数据丢失的教训有时候是巨大而难以承受的。
2. 防止 rm 误删除
2.1 一条危险的命令 rm -rf
rm -rf
常被用来删除文件或目录,因为使用它的时候可以快速删除所需要删除的文件或目录,而又不需要反复确认。
rm
命令,可以删除一个目录中的一个或多个文件或目录,也可以将某个目录以及目录下的所有子目录和文件都删除。对于链接文件,则只是删除整个链接文件,不删除原有文件。
-rf
参数。-r
或 -R
,递归处理,将指定目录下的所有文件以及子目录一并处理掉;-f
表示强制删除文件或目录。
2.2 建立回收站机制防止误删
建立回收站机制后,当你在删除数据的时候,并不是真的在删除数据,而是将文件移动到一个特定的目录中。相当于看似执行的是 rm
命令实际上执行的是 mv
命令。
2.2.1 建立过程
对于要建立回收站机制,可以通过写 Shell 脚本替换 rm 命令,或者在需要删除文件的时候使用 mv 命令将文件移动到回收站。
- 在
/home/username/
目录下新建一个目录,并命名为.trash
- 在
/home/username/tools/
目录下,新建一个 Shell 脚本,命名为remove.sh
给
remove.sh
赋予执行权限:chmod +x /home/username/tools/remove.sh
remove.sh
脚本内容如下
# /home/username/tools/remove.sh
TRASH_DIR="/home/username/.trash"
for i in $*; do
STAMP=`date +%y%m%d-%H:%M:%S`
fileName=`basename $i`
mv $i $TRASH_DIR/$fileName.$STAMP
done
- 修改
~/.bashrc
, 增加下面一行
alias rm="sh /home/username/tools/remove.sh"
给 rm
设置别名,使用我们自己建的 remove.sh
替代 rm 命令
- 设置
/etc/crontab
定时计划,定期清空垃圾箱,例如
0 0 * * * rm -rf /home/username/.trash/*
- 执行
source ~/.bashrc
使其立即生效
删除效果如下
注意:
- 如果想直接删除而不是直接放进回收站,可以直接使用
/bin/rm
来删除 rm
之前的一些参数将会失效,因为现在使用的其实是mv
- 而在使用新脚本删除文件时,如果删除的文件重名,会提示是否进行覆盖。
2.3 注意命令 rm -rf 变量的使用
在脚本中应该尽量避免使用 rm -rf $FOO/
, 而推荐使用 rm -rf $FOO
;删除尽量不要写相对路径,不要带变量
提醒:我就是栽在了这里头了
2.4 备份重要数据
将重要的数据进行异地远程备份也是一种保障数据安全的方式。
2.5 rm-protection
2.5.1 rm-protection 介绍
这是一个完全兼容 rm
的数据保护工具。如果安装它,当在执行 rm
命令之前,会检查所要删的每一个文件或目录是否被保护。通过 rm-protection
命令可以为一个文件或目录设置一个安全问题与回答。
项目地址为:rm-protection
2.5.2 rm-protection 安装
可以直接通过 pip install rm-protection
, 可以有选择性地为其设置别名如 rm-p
简化命令行。
通过执行 protection filename
, 对文件进行保护,当使用 rm -rf filname
删除文件时,则会报出问答信息以确定确实是所需要删除的数据。
)