我有时在ssh上使用我的服务器。我不想因为意外的rm而失去任何东西。有办法为我的服务器创建一个垃圾桶吗?我知道这听起来很愚蠢,但我只想知道,如果我无意中删除了文件,是否有一种恢复文件的方法。
我考虑为rm添加一个新别名,但这并不总是有效的。我有时使用SFTP包的崇高,我也可以意外地删除使用它的东西。
我能做什么?
先谢谢你。
发布于 2014-05-13 06:52:05
如果向~./bashrc添加别名,则可以防止删除文件。您可以将来自Timothy的答案中的命令化名为
alias rm='trash-put'备选方案:
alias rm='mv --verbose -f --backup=numbered --target-directory ~/.Trash/'将mv文件发送到本地垃圾,如果已经有同名文件,也会创建备份。
如果您需要全局别名:将其添加到/etc/bashrc中。
发布于 2014-05-13 06:17:04
垃圾桶可能适合你的需要
sudo apt-get install trash-clihttp://www.webupd8.org/2010/02/make-rm-move-files-to-trash-instead-of.html
编辑:
您还可以对rm进行备份,然后用脚本替换所有rm出现的情况。
#!/usr/bin/python3
from sys import argv
from subprocess import Popen
args = ''
for arg in argv[1:]:
args += arg + ' '
Popen('trash '+args, shell=True)然后使用
chmod +x rm虽然我不知道这有多安全。
发布于 2014-05-13 14:36:42
所有建议的答案将适用于您的命令行经验。但让我附和我的个人建议:不要那样做。绝不可能。
理由:你应该知道你在做什么;使用rm认为有一个安全网(别名,可执行文件(1)中的全局变化,其他东西)会让你变得自信,当安全网不存在时,你会犯重大错误--这可以是一个更新,另一个系统,或者其他什么。
rm命令是解链接()系列系统调用的一个(复杂的) shell --把它看作是处理文件(2)的linux内核服务。许多程序只会使用系统调用,完全绕过您的安全网。
例如,命令
find . -name test2.aux -delete 将直接调用unlink,通过在其上使用strace可以看到:
strace find . -name test2.aux -delete
...
unlinkat(AT_FDCWD, "test2.aux", 0) = 0
......and我打赌SFTP服务器也会这么做。它们超出了别名的“保护”范围,甚至超出了rm二进制替换的范围。
即使是简单的mv、cp或> file也可以破坏安全网之外的文件。
唯一的安全是一个好的备份(3)。学会经常这样做,并反复检查所有的命令。三倍,如果运行作为根。
脚注:
(1)除非替换命令准备好完全接受rm管理的所有标志和角条件,否则不要这样做。
(2)比这复杂得多,真的。
(3)或在内核级别执行此操作,可能是通过使用具有某种长期内存( 版本控制文件系统)的文件系统。我记得在80年代末使用VMS -- 文件系统确实记得所有版本的文件,在名称上附加了";1“、";2”等等,在内核级别。方便,但维护噩梦。
https://askubuntu.com/questions/465128
复制相似问题