保护公司

保护公司

我有时通过 ssh 使用我的服务器。我不想因为意外而丢失​​任何东西rm。有没有办法为我的服务器创建一个垃圾箱?我知道这听起来很蠢,但我只是想知道如果我不小心删除了文件,是否有办法恢复。

我考虑过为 添加一个新的别名rm,但这并不总是有效。我有时会使用 Sublime 的 SFTP 包,我也可能会不小心用它删除东西。

我能做些什么?

提前非常感谢您。

答案1

如果添加别名,则~./bashrc可以防止删除文件。您可以使用 Timothy Duane 的回答为命令添加别名

alias rm='trash-put'

选择:

alias rm='mv --verbose -f --backup=numbered --target-directory ~/.Trash/'

将把 mv 文件移到本地垃圾箱,如果已经存在同名文件,还会创建备份。

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

答案2

首先,你不想改变rm全局的行为。这只会破坏你的系统1。许多程序都是rm内部调用的,因此如果你改变其行为方式,它们将无法工作,这可能会产生意想不到的后果。你必须限制自己保护你自己rm

但是,您可以为 添加一个别名rm,从而改变其行为~/.bashrc。对于ssh会话,您可以通常情况下需要将其添加到您的.profile,但默认的 Ubuntu.profile调用.bashrc,所以除非您自己更改它,否则没有必要。基本上,如果您不知道我在说什么,只需使用。FTP会话中的~/.bashrc命令delete完全不同,不会受到影响。

因此,您可以使用以下几个别名:

  1. rm -irm -I

    如 中所述man rm,这两个标志可防止您无意中删除文件。您可以根据级别使用其中任何一个烦恼您想要的保护:

    -i     prompt before every removal
    
    -I     prompt once before removing  more  than  three  files,  or  when
           removing  recursively.  Less intrusive than -i, while still giv‐
           ing protection against most mistakes
    

    因此,例如,要rm在每次删除之前提示您,请将这一行添加到~/.bashrc~/.profile`:

    alias rm='rm -i'
    
  2. trash-cli按照建议安装类似的东西,然后rm为其创建别名:

    alias rm='trash-put'
    

    现在,您删除的任何文件rm都将被放置在 中~/.local/share/Trash/files/

  3. mv按照@Rinzwind 的建议,采用自己动手的方法。


1 这取决于您如何具体改变其行为,它可能会没问题,但也可能会中断。

答案3

trash-cli 可能适合你的需求

sudo apt-get install trash-cli

http://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

尽管我不知道这到底有多安全。

答案4

所有建议的答案都适用于您的命令行体验。但让我提出我的个人建议:不要那样做。 绝不。

理由:你应该知道你在做什么;认为rm有一个安全网(用别名、可执行文件的全局更改(1)等)会让你变得自信,你将要当安全网因某种原因不存在时,就会犯下大错误——这可能是更新、另一个系统或其他什么。

rm命令是一个(复杂的)外壳,解除链接()家庭系统调用--- 将其视为处理文件的 Linux 内核服务 (2)。许多程序只会使用系统调用,完全绕过您的安全网。

例如,命令

find . -name test2.aux -delete 

strace将直接调用 unlink,正如你通过使用它所看到的:

strace find . -name test2.aux -delete 
...
unlinkat(AT_FDCWD, "test2.aux", 0)      = 0
...

...我敢打赌 SFTP 服务器也会这样做。这些超出了别名或rm二进制替换的“保护”范围。

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

唯一安全的方法就是做好备份(3)。学会经常这样做,并仔细检查所有命令。如果以 root 身份运行,则检查三遍。


脚注:

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

(2)事实上,情况要复杂得多。

(3)或者在内核层面实现,可能使用具有某种长期记忆的文件系统(版本文件系统)我记得在 80 年代末与 VMS 合作过——文件系统在内核级别,确实记住了文件的所有版本,并在名称后附加了“;1”、“;2”等。这很方便,但维护起来却很麻烦。

相关内容