首页
学习
活动
专区
圈层
工具
发布

rm保护
EN

Ask Ubuntu用户
提问于 2014-05-13 06:02:29
回答 3查看 2.1K关注 0票数 2

我有时在ssh上使用我的服务器。我不想因为意外的rm而失去任何东西。有办法为我的服务器创建一个垃圾桶吗?我知道这听起来很愚蠢,但我只想知道,如果我无意中删除了文件,是否有一种恢复文件的方法。

我考虑为rm添加一个新别名,但这并不总是有效的。我有时使用SFTP包的崇高,我也可以意外地删除使用它的东西。

我能做什么?

先谢谢你。

EN

回答 3

Ask Ubuntu用户

发布于 2014-05-13 06:52:05

如果向~./bashrc添加别名,则可以防止删除文件。您可以将来自Timothy的答案中的命令化名为

代码语言:javascript
复制
alias rm='trash-put'

备选方案:

代码语言:javascript
复制
alias rm='mv --verbose -f --backup=numbered --target-directory ~/.Trash/'

将mv文件发送到本地垃圾,如果已经有同名文件,也会创建备份。

如果您需要全局别名:将其添加到/etc/bashrc中。

票数 2
EN

Ask Ubuntu用户

发布于 2014-05-13 06:17:04

垃圾桶可能适合你的需要

代码语言:javascript
复制
sudo apt-get install trash-cli

http://www.webupd8.org/2010/02/make-rm-move-files-to-trash-instead-of.html

编辑:

您还可以对rm进行备份,然后用脚本替换所有rm出现的情况。

代码语言:javascript
复制
#!/usr/bin/python3
from sys import argv
from subprocess import Popen
args = ''
for arg in argv[1:]:
    args += arg + ' '
Popen('trash '+args, shell=True)

然后使用

代码语言:javascript
复制
chmod +x rm

虽然我不知道这有多安全。

票数 1
EN

Ask Ubuntu用户

发布于 2014-05-13 14:36:42

所有建议的答案将适用于您的命令行经验。但让我附和我的个人建议:不要那样做。绝不可能。

理由:你应该知道你在做什么;使用rm认为有一个安全网(别名,可执行文件(1)中的全局变化,其他东西)会让你变得自信,当安全网不存在时,你会犯重大错误--这可以是一个更新,另一个系统,或者其他什么。

rm命令是解链接()系列系统调用的一个(复杂的) shell --把它看作是处理文件(2)的linux内核服务。许多程序只会使用系统调用,完全绕过您的安全网。

例如,命令

代码语言:javascript
复制
find . -name test2.aux -delete 

将直接调用unlink,通过在其上使用strace可以看到:

代码语言:javascript
复制
strace find . -name test2.aux -delete 
...
unlinkat(AT_FDCWD, "test2.aux", 0)      = 0
...

...and我打赌SFTP服务器也会这么做。它们超出了别名的“保护”范围,甚至超出了rm二进制替换的范围。

即使是简单的mvcp> file也可以破坏安全网之外的文件。

唯一的安全是一个好的备份(3)。学会经常这样做,并反复检查所有的命令。三倍,如果运行作为根。

脚注:

(1)除非替换命令准备好完全接受rm管理的所有标志和角条件,否则不要这样做。

(2)比这复杂得多,真的。

(3)或在内核级别执行此操作,可能是通过使用具有某种长期内存( 版本控制文件系统)的文件系统。我记得在80年代末使用VMS -- 文件系统确实记得所有版本的文件,在名称上附加了";1“、";2”等等,在内核级别。方便,但维护噩梦。

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/465128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档