Я только что потерял некоторые данные в папке A, которая была внутри папки B после выполнения rm -rf B
. Прежде чем я понял, что я сделал, все было кончено. Теперь урок усвоен, я хочу сделать часть своей папки защищенной от идиота, чтобы в следующий раз избежать этого, когда я сделаю что-то подобное и захочу покончить с собой.
Один из способов, который я могу придумать, - написать функцию bash и присвоить ей псевдоним rm
. Эта функция будет искать в каждой подпапке скрытый файл, например .dontdelete
. Когда его найдут, он спросит, действительно ли я хочу продолжить. Я не могу сделать это защищено от записи, так как есть процесс, который постоянно пишет в эту папку. Есть ли лучший способ сделать это?
permissions
directory
rm
Дилавар
источник
источник
rm
дляrm -i
:> -i строка перед каждым удаление или> -I подскажи один раз перед удалением более трех файлов, или при удалении рекурсивно. Менее навязчив, чем -i, но при этом обеспечивает защиту от большинства ошибок. Вы можете в любое время переписать их с другими флагами.safe-rm
tmpwatch
для удаления файлов из этой папки каждый час.Ответы:
При изучении вашего вопроса я наткнулся на эту технику, которая может помочь вам в будущем.
Вы можете, очевидно, коснуться файла в каталоге, например, так:
Теперь, когда вы запустите команду
rm -fr *
в каталоге, где-i
он присутствует, вы увидите интерактивное приглашение изrm
.То же самое можно сделать, просто оставив псевдоним на месте,
rm
чтобы он всегда работалrm -i
. Это может стать раздражающим. Так часто я видел, что этот псевдоним был на месте, а затем отключил его, когда вы действительно хотите удалить без запроса.Теперь в каталогах вас встретят так:
Чтобы переопределить псевдоним:
Это все еще не останавливает
rm -fr
однако. Но это обеспечивает вам некоторую защиту.Ссылки
источник
--force
что-то, вы действительно это имеете в виду.rm -I
(верхний регистрi
) может быть полезен в псевдониме, так как он немного менее навязчив (в соответствии с man-страницей, только если вы удалите более трех файлов или рекурсивно).touch ./-i
хитрость работает только с GNUrm
и только если переменная POSIXLY_CORRECT не установлена (команды POSIX не распознают параметры после аргументов).Много возможностей:
alias rm='rm -i'
- РМ спросит - если вы не укажете-f
...chmod -w dir
- защищает файлы непосредственно в этом каталоге.chattr +i
если вы действительно имеете в виду этоНо лучший способ, вероятно, - иметь хорошую резервную копию и хранить важные данные в некотором контроле версий (например
git
), что также дает много других преимуществ.источник
rm -i
но, как и следовало ожидать, он не работает с-f
опцией. Я использую Git для многих других целей, но что, если я случайно сделаю этоrm -rf *
в Git?Используйте программное обеспечение
git
для контроля версий, например, для инкапсуляции ваших проектов.До тех пор, пока вы не удалите весь проект, вам придется целенаправленно печатать,
rm -rf .*
чтобы удалить.git
каталог и потерять все данные, необходимые для отката.Это дает дополнительное преимущество, заключающееся в том, что вы можете отправлять резервные копии своих материалов на удаленный сервер, такой как github или bitbucket.
источник
Вот как это
rm -rf dir
работает:dir
и перечисляет его содержимое.unlink
его.Если бы вы могли, для списка каталогов сначала вернуть специальное имя файла, и если бы вы могли вызвать процесс, выполняющий
unlink
этот файл, умереть, это решило бы проблему. Это можно сделать с помощью файловой системы fuse.Например, вы можете адаптировать
loopback.pl
пример из модуля Perl Fuse, который просто реализует фиктивную файловую систему, которая является просто проходом к реальной файловой системе, как показано ниже (см. Также патч ниже):.{{do-not-delete}}.
, добавьте список записей с двумя файлами:.{{do-not-delete}}!error
и.{{do-not-delete}}!kill
unlink
первого вернитеEPERM
код так, чтобыrm
отобразилось сообщение об ошибкеunlink
второго, процесс убивается.Вот патч для применения поверх этого
loopback.pl
примера в качестве доказательства концепции:источник
Я создал скрипт, чтобы облегчить эту задачу. Сценарий оболочки изменяет права на чтение / запись и флаг chattr для данного списка папок в интерактивном режиме, не запрашивая пароль root. Вы можете скачать zip-файл по ссылке ниже.
https://drive.google.com/file/d/0B_3UYBZy2FVsMVpBSWdSWnFBYk0/edit?usp=sharing
Я также включил установочный скрипт, чтобы упростить настройку. Инструкции прилагаются в zip-файле.
источник