Protection For rm

2

Por vezes, trabalho com o meu servidor através do ssh. Eu não quero perder nada por causa de um acidental rm . Existe uma maneira de criar uma lixeira para o meu servidor? Eu sei que parece estúpido, mas eu só quero saber se há uma maneira de recuperar coisas se eu acidentalmente excluir arquivos.

Eu pensei em adicionar um novo alias para rm , mas isso nem sempre funciona. Eu às vezes uso o pacote SFTP do Sublime, e também posso acidentalmente excluir coisas usando-o.

O que posso fazer?

Muito obrigado antecipadamente.

    
por user1652575 13.05.2014 / 08:02

4 respostas

2

Se você adicionar um alias a ~./bashrc , poderá impedir a exclusão de arquivos. Você pode alias o comando da resposta de Timothy Duane com

alias rm='trash-put'

Alternativa:

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

enviará arquivos mv para o Lixo local e também criará backups se já houver um arquivo com o mesmo nome.

Se você quiser o alias globalmente: adicione-o a /etc/bashrc .

    
por Rinzwind 13.05.2014 / 08:52
2

Primeiro de tudo, você não quer mudar o comportamento de rm globalmente . Isso simplesmente irá quebrar o seu sistema 1 . Muitos programas chamam rm internamente, portanto, se você mudar a maneira como eles se comportam, eles não "funcionarão" e isso pode ter conseqüências inesperadas. Você terá que se limitar a proteger você mesmo de rm .

Você pode, no entanto, adicionar um alias a rm , alterando seu comportamento, para seu ~/.bashrc . Para ssh sessões, você normalmente precisa adicioná-lo ao seu .profile , mas o padrão do Ubuntu .profile chama .bashrc para que não seja necessário, a menos que você tenha alterado você mesmo. Basicamente, se você não sabe do que estou falando, use apenas ~/.bashrc . O comando delete em uma sessão FTP é algo completamente diferente e não será afetado.

Então, dito isso, aqui estão alguns aliases que você pode usar:

  1. rm -i e rm -I

    Como explicado em man rm , esses dois sinalizadores protegem você contra a exclusão inadvertida de arquivos. Você também pode usar, dependendo do nível de proteção annoyance que deseja:

    -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
    

    Portanto, por exemplo, para que rm avise você antes de cada exclusão, adicione essa linha a ~/.bashrc e ~ / .profile ':

    alias rm='rm -i'
    
  2. Instale algo como trash-cli como já sugerido e, em seguida, crie rm um alias para ele:

    alias rm='trash-put'
    

    Agora, todos os arquivos que você excluir com rm serão colocados em ~/.local/share/Trash/files/ .

  3. Use a abordagem do tipo "faça você mesmo" com mv , como sugerido por @Rinzwind.

1 Dependendo de como exatamente você muda o seu comportamento, pode ser bom, mas pode quebrar.

    
por terdon 13.05.2014 / 16:00
1

trash-cli pode atender às suas necessidades

sudo apt-get install trash-cli

link

Editar:

Você também pode fazer um backup de rm e então substituir todas as ocorrências de rm por um script

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

e, em seguida, use

chmod +x rm

Embora eu não tenha ideia de como isso é seguro.

    
por ever99 13.05.2014 / 08:17
0

Todas as respostas propostas funcionarão para sua experiência de linha de comando. Mas deixe-me entrar em contato com minha sugestão pessoal: não faça isso . Nunca.

Fundamentação: você deve saber o que está fazendo; usar rm pensando que existe uma rede de segurança (com um alias, uma mudança global no executável (1), outras coisas) fará com que você cresça confiante e você irá cometer grandes erros quando a segurança net por qualquer motivo não está presente - que pode ser uma atualização, outro sistema ou qualquer outra coisa.

O comando rm é um shell (complexo) em torno da família unlink () de chamadas do sistema --- veja-o como o serviço de kernel do Linux que dispõe de ficheiros (2). Muitos programas apenas usam a chamada do sistema, ignorando completamente suas redes de segurança.

Por exemplo, o comando

find . -name test2.aux -delete 

chamará diretamente o unlink, como você pode ver usando strace :

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

... e aposto que o servidor SFTP fará o mesmo. Eles estão fora do escopo da "proteção" do seu alias ou até mesmo da substituição binária rm .

Mesmo um simples mv , cp ou > file pode destruir um arquivo fora da sua rede de segurança.

O único cofre é um bom backup (3). Aprenda a fazer isso com frequência e verifique todos os seus comandos. Triplo se estiver executando como root.

Notas de rodapé:

(1) não faça isso, a menos que o comando de substituição esteja pronto para aceitar exatamente todos os sinalizadores e condições de canto que rm gerencia.

(2) muito mais complexo do que isso, realmente.

(3) ou fazendo isso no nível do kernel, provavelmente usando um sistema de arquivos que possui algum tipo de memória de longo prazo (um sistema de arquivos de versionamento ). Lembro-me de trabalhar com o VMS no final dos anos 80 - o sistema de arquivos lembrava toda a versão de um arquivo que anexava um "; 1", "; 2" etc no nome, no nível do kernel. Útil, mas um pesadelo de manutenção.

    
por Rmano 13.05.2014 / 16:36