Вопрос или проблема
Иногда я работаю с сервером через ssh. Я не хочу потерять данные из-за случайной команды rm
. Есть ли способ создать корзину для моего сервера? Я знаю, это звучит глупо, но просто хочу знать, есть ли возможность восстановить файлы, если я их случайно удалю.
Я думал о добавлении нового псевдонима для rm
, но это не всегда сработает. Иногда я использую пакет SFTP в Sublime, и также могу случайно удалить что-то с его помощью.
Что я могу сделать?
Заранее большое спасибо.
Прежде всего, не стоит менять поведение команды rm
глобально. Это просто сломает вашу систему1. Многие программы вызывают rm
внутри, так что если изменить, как она работает, они не будут работать, и это может иметь неожиданные последствия. Вы должны ограничиться только защитой себя от rm
.
Тем не менее, вы можете добавить псевдоним для rm
, изменив ее поведение в ~/.bashrc
. Для сеансов ssh
вам обычно нужно добавить это в .profile
, но стандартный Ubuntu .profile
вызывает .bashrc
, так что это не будет необходимо, если вы сами его не изменили. В основном, если вы не понимаете, о чем я говорю, просто используйте ~/.bashrc
. Команда delete
в сеансе FTP — это совершенно другое и на нее это не повлияет.
Итак, вот несколько псевдонимов, которые вы можете использовать:
-
rm -i
иrm -I
Как описано в
man rm
, эти два флага защищают от случайного удаления файлов. Вы можете использовать один из них в зависимости от уровняраздражениязащиты, который вам необходим:-i запрашивать подтверждение перед каждым удалением -I запрашивать один раз перед удалением больше трех файлов или при удалении рекурсивно. Менее навязчивый, чем -i, но все еще даю- щий защиту от большинства ошибок
Итак, например, чтобы
rm
спрашивала подтверждение перед каждым удалением, добавьте эту строку в~/.bashrc
и~/.profile
:alias rm='rm -i'
-
Установите что-то вроде
trash-cli
, как уже предложено, и затем сделайтеrm
псевдонимом для неё:alias rm='trash-put'
Теперь любые файлы, которые вы удалите с помощью
rm
, будут помещены в~/.local/share/Trash/files/
. -
Используйте подход своими руками с
mv
, как предложил @Rinzwind.
1 В зависимости от того, как именно вы меняете поведение, это может быть нормально, но также может сломать систему.
Если вы добавите псевдоним в ~./bashrc
, вы сможете предотвратить удаление файлов. Вы можете использовать псевдоним из ответа Тимоти Дуэйна:
alias rm='trash-put'
Альтернатива:
alias rm='mv --verbose -f --backup=numbered --target-directory ~/.Trash/'
переместит файлы в вашу локальную корзину и также создаст резервные копии, если там уже есть файл с таким именем.
Если хотите сделать псевдоним глобальным: добавьте его в /etc/bashrc
.
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
Хотя я не знаю, насколько это действительно безопасно.
Все предложенные решения будут работать для вашего опыта работы с командной строкой. Но позвольте мне предложить свой личный совет: не делайте этого. Никогда.
Причина: вы должны знать, что делаете; используя rm
с мыслью, что есть страховочная сетка (с псевдонимом, глобальным изменением в исполняемом файле (1), другими вещами), вы обретете уверенность и сделаете крупные ошибки, когда по какой-либо причине страховочной сетки не будет — это может быть обновление, другая система или что-то еще.
Команда rm
— это (сложная) оболочка вокруг семейства системных вызовов unlink() — видьте это как сервис ядра Linux, который удаляет файлы(2). Многие программы просто используют системный вызов, полностью обходя ваши страховочные сетки.
Например, команда
find . -name test2.aux -delete
напрямую вызывает unlink, как можно увидеть, использовав strace
на ней:
strace find . -name test2.aux -delete
...
unlinkat(AT_FDCWD, "test2.aux", 0) = 0
...
…и я убежден, что сервер SFTP сделает то же самое. Эти случаи вне области действия “защиты” вашего псевдонима или даже замены бинарной программы rm
.
Даже простой mv
, cp
или > файл
могут уничтожить файл вне вашей страховочной сети.
Единственная безопасность — это хорошая резервная копия(3). Научитесь делать её регулярно и дважды проверяйте все свои команды. Тройной если работаете от имени root.
Примечания:
(1) не делайте этого, если только замещающая команда не готова принимать точно все флаги и крайние случаи, которые обрабатывает rm
.
(2) на самом деле намного сложнее.
(3) или делать это на уровне ядра, возможно, используя файловую систему, которая имеет какую-либо долгосрочную память (файловая система с версионностью). Я помню, как работал с VMS в конце 80-х — файловая система, запоминала все версии файла, добавляя “;1”, “;2” и т. д. в имени, на уровне ядра. Удобно, но это кошмар для управления.
Мой предпочитаемый способ:
-
Резервное копирование всех файлов в виртуальной машине.
-
Использование учетной записи службы с более ограниченным доступом.
-
Создание Вики, объясняющей, что делать в случае возникновения такой ситуации. Вики может ссылаться на репозиторий, где у вас есть определенные папки и файлы, которые необходимы для работы вашей системы, и их можно получить при необходимости.
-
Добавление псевдонима, который предотвращает удаление корня и запрашивает подтверждение при удалении более 3 файлов
alias rm='rm -Iv --preserve-root'
После добавления псевдонима, вы можете легко его протестировать
touch file1 file2 file3 file4
rm file1 file2 file3 file4
.
Ответ или решение
Защита от случайного удаления файлов на сервере является важной задачей, особенно если работа с сервером ведется по SSH. Повторное создание или восстановление данных может быть трудоемким и не всегда возможным, особенно если операция rm
выполнена случайно. Рассмотрим основные методы защиты от потерь данных при использовании команды rm
на сервере.
Теория
Команда rm
в Unix-подобных системах предназначена для безвозвратного удаления файлов и папок. Использование этой команды без понимания ее последствий и без надлежащих мер предосторожности может привести к нежелательным потерям данных. Поскольку многие программы также могут вызывать rm
напрямую, изменение ее поведения на уровне системы может привести к непредсказуемым последствиям и сбоям.
Пример
-
Создание алиасов: Один из часто используемых способов — создание алиасов для команды
rm
. Например, можно использовать флаг-i
, чтобы запросить подтверждение перед удалением каждого файла:alias rm='rm -i'
Это можно добавить в файл
~/.bashrc
, чтобы алиас действовал только для вашей учетной записи пользователя. -
Использование утилит для корзины: Установите и используйте утилиты, такие как
trash-cli
, чтобы файлы перемещались в корзину вместо непосредственного удаления:sudo apt-get install trash-cli alias rm='trash-put'
Благодаря этому, удаленные файлы можно будет восстановить из корзины.
-
Скрипты Python: Создание скриптов, которые обрабатывают удаление файлов, например, перемещая их в другое место прежде чем действительно удалить:
#!/usr/bin/python3 from sys import argv from subprocess import Popen args = '' for arg in argv[1:]: args += arg + ' ' Popen('trash ' + args, shell=True)
Следует учесть, что такой подход должен тщательно тестироваться, так как от него могут зависеть другие программы на системе.
Применение
Примените следующие подходы для повышения безопасности удаляемых данных:
-
Обучение и документооборот: Создайте документы и обучайте пользователей, что команда
rm
выполняет безвозвратные операции. Используйте внутренние вики или документацию для описания политики безопасного использованияrm
. -
Ограничение доступа: Используйте ограниченные учетные записи для выполнения операций, которые не требуют привилегий администратора. Это снизит риск случайного удаления важных системных файлов.
-
Регулярное резервное копирование: Настройте автоматическое регулярное резервное копирование данных. Это наиболее надежный способ восстановления данных в случае любого сбоя.
-
Использование версии файловой системы: Рассмотрите возможность использования файловой системы с поддержкой версии, чтобы восстановить прежние версии файлов в случае необходимости.
-
Проверка адекватности выполнения команд: Включите в практику дополнительные проверки перед выполнением команд удаления файлов, особенно когда они запускаются как root.
Заключение
Эти практические подходы обеспечат адекватную защиту от случайного удаления файлов и позволят быстро восстанавливать данные. Необходима комплексная стратегия, которая включает как технические меры, так и обучение пользователей. Таким образом, компании смогут минимизировать риск потерь данных и повысить общую надежность работы системы.