Защита для рм

Я иногда работаю с моим сервером через ssh. Я не хочу ничего терять из-за случайности rm. Есть ли способ создать корзину для моего сервера? Я знаю, это звучит глупо, но я просто хочу знать, есть ли способ восстановить вещи, если я случайно удаляю файлы.

Я думал о добавлении нового псевдонима для rm, но это не всегда будет работать. Я иногда использую SFTP-пакет Sublime, и я также могу случайно удалить вещи, используя его.

Что я могу сделать?

Большое спасибо заранее.

2
задан 13 May 2014 в 10:02

4 ответа

Если Вы добавляете псевдоним к ~./bashrc, можно предотвратить удаление файлов. Можно исказить команду из ответа от Timothy Duane с

alias rm='trash-put'

Альтернатива:

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

будет mv файлы к Вашему локальному Мусору и также создавать резервные копии, если уже будет файл с тем же именем.

, Если Вы хотите псевдоним глобально: добавьте его к /etc/bashrc.

0
ответ дан 13 May 2014 в 10:02

В первую очередь, Вы не хотите изменять поведение rm глобально. Это просто повредит Ваш system1. Много вызовов программ rm внутренне поэтому, если Вы изменяетесь, как это ведет себя они привычка' работа, и это может иметь неожиданные последствия. Необходимо будет ограничить себя защитой себя от rm.

Можно, однако, добавить псевдоним к rm, изменение его поведения, к Вашему ~/.bashrc. Для ssh сессии, необходимо было бы обычно добавлять его к Вашему .profile вместо этого, но Ubuntu по умолчанию .profile вызовы .bashrc так, чтобы son't быть необходимым, если Вы не изменили его сами. В основном, если Вы не знаете то, о чем я говорю, просто используйте ~/.bashrc. delete команда на сеансе FTP является чем-то совершенно другим и не будет затронута.

Так, это сказало, вот несколько псевдонимов, которые Вы могли использовать:

  1. rm -i и rm -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 В зависимости от того, как точно Вы изменяете его поведение, оно могло бы быть прекрасным, но оно могло бы повредиться.

2
ответ дан 13 May 2014 в 10:02

мусор-cli мог бы удовлетворить Вашим потребностям

sudo apt-get install trash-cli

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

Править:

Вы могли также сделать резервное копирование комнаты и затем заменить все случаи комнаты со сценарием

#!/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

Хотя я понятия не имею, насколько безопасный это действительно.

1
ответ дан 13 May 2014 в 10:02

Весь предложенный ответил, будет работать на Ваш опыт командной строки. Но позвольте мне согласиться со своим персональным предложением: не делайте этого. Никогда.

Объяснение: необходимо знать то, что Вы делаете; использование rm думание, что существует система поддержки (с псевдонимом, глобальным изменением в исполняемом файле (1), другие вещи) заставит Вас стать уверенными, и Вы сделаете большие ошибки, когда система поддержки по любой причине не будет присутствовать---, который может быть обновлением, другой системой, или что бы то ни было.

rm команда является (сложной) оболочкой вокруг удаления связь (), семейство системных вызовов---рассматривает его как сервис ядра Linux, который избавляется от файлов (2). Много программ будут просто использовать системный вызов, полностью обходя Ваши системы поддержки.

Например, команда

find . -name test2.aux -delete 

будет непосредственно звонить удаляют связь, как Вы видите при помощи strace на нем:

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

... и я держал пари, что сервер SFTP сделает то же. Это вне объема к "защите" Вашего псевдонима или даже rm двоичная замена.

Даже простое mv, cp, или > file может уничтожить файл вне Вашей системы поддержки.

Единственный сейф является хорошим резервным копированием (3). Учитесь делать это часто и проверять все Ваши команды дважды. Трижды при выполнении как корень.


Сноски:

(1) не делайте этого, если заменяющая команда не готова принять точно все флаги и угловые условия это rm справиться.

(2) намного более сложный, чем это, действительно.

(3) или делая это на уровне ядра, вероятно, при помощи файловой системы, которая имеет некоторую долгосрочную память (файловая система управления версиями). Я не забываю работать с VMS в конце 80-х---, файловая система действительно помнила всю версию файла, добавляющего a"; 1 дюйм, "; 2 дюйма и т.д. в имени, на уровне ядра. Удобный, но кошмар обслуживания.

0
ответ дан 13 May 2014 в 10:02

Другие вопросы по тегам:

Похожие вопросы: