Везде, где Вам нравится и где это имеет большую часть смысла для Вас. Я видел бесчисленные варианты.
Самостоятельно, я обычно монтирую их в /data0
, /data1
или подкаталоги ниже /data
и помещенные символьные ссылки на соответствующие места (как /home
).
Избегать ошибочного rm -rf
, не вводить rm -rf
.
Если необходимо удалить дерево каталогов, я рекомендую следующий рабочий процесс:
mv directory-to-delete DELETE
DELETE
и проверьте, что это действительно, что Вы хотели удалитьrm -rf DELETE
Никогда не звоните rm -rf
с аргументом кроме DELETE
. Выполнение удаления на нескольких этапах дает Вам возможность проверить, что Вы не удаляете неправильную вещь, любого из-за опечатки (как в rm -rf /foo /bar
вместо rm -rf /foo/bar
) или из-за ментальной ошибки (ой, нет, я означал удалять foo.old
и сохраните foo.new
).
Если Ваша проблема состоит в том, что Вы не можете доверять другим для не ввода rm -rf
, рассмотрите удаление их административных привилегий. Существует намного больше, который может пойти не так, как надо, чем rm
.
Всегда делайте резервные копии.
Периодически проверяйте, что Ваши резервные копии работают и актуальные.
Сохраните все, что не может быть легко загружено с где-нибудь при управлении версиями.
С основной системой Unix, если Вы действительно хотите сделать некоторые каталоги неудаляемыми rm
, замена (или лучшая тень) rm
пользовательским сценарием, который отклоняет определенные аргументы. Или hg rm
.
Некоторые варианты Unix предлагают больше возможностей.
chmod +a 'group:everyone deny delete_child' somedir
(это не предотвращает удаление файлов в подкаталогах: если Вы хотите это, устанавливаете ACL на подкаталоге также).rm
изменить определенные каталоги.Если Вы используете rm *
и zsh, можно установить опцию rmstarwait
:
setopt rmstarwait
Теперь оболочка предупреждает, когда Вы используете *
:
> zsh -f
> setopt rmstarwait
> touch a b c
> rm *
zsh: sure you want to delete all the files in /home/unixuser [yn]? _
Когда Вы отклоняете его (n
), ничего не происходит. Иначе все файлы будут удалены.
ОТРЕДАКТИРУЙТЕ, как предложено комментарием:
Можно изменить атрибут на неизменный файл или каталог, и затем он не может быть удален даже корнем, пока атрибут не удален.
chattr +i /some/important/file
Это также означает, что файл не может быть записан в или изменен в так или иначе, даже корнем. Другой атрибут, по-видимому доступный, который я не использовал сам, является добавлять атрибутом (chattr +a /some/important/file
. Затем файл может только быть открыт в, добавляют режим, не означая удаления также, но можно добавить к нему (скажите что файл журнала). Это означает, что Вы не сможете отредактировать его в vim
например, но можно сделать echo 'this adds a line' >> /some/important/file
. Используя >
вместо >>
перестанет работать.
Эти атрибуты могут быть сброшены с помощью знака "минус", т.е. chattr -i file
Иначе, если это не подходит, одна вещь, которую я практикую, к всегда ls /some/dir
во-первых, и затем вместо того, чтобы перепечатать команду, нажмите стрелку вверх CTL-A, затем удалите ls
и введите мой rm -rf
если мне нужен он. Не прекрасный, но путем рассмотрения результатов ls, Вы знаете перед рукой, если это - то, что Вы хотели.
Защищать от случайного элемента rm -rf *
в каталоге создайте файл, названный "-i" (можно сделать это с emacs или некоторой другой программой) в том каталоге. Оболочка попытается интерпретировать-i и заставит его входить в интерактивный режим.
Например: Вам назвали каталог rmtest
с названным файлом -i
внутри. При попытке rm
все в каталоге, rm
сначала доберется -i
переданный ему и войдет в интерактивный режим. При помещении такого файла в каталогах, требуется иметь некоторую защиту на, это могло бы помочь.
Обратите внимание, что это неэффективно против rm -rf rmtest
.
Один возможный выбор состоит в том, чтобы прекратить использовать rm -rf
и начните использовать rm -ri
. Дополнительное i
параметр там должен удостовериться, что спрашивает, уверены ли Вы, что хотите удалить файл.
Вероятно, Ваш лучший выбор с ним состоял бы в том, чтобы исказить rm -ri
во что-то незабываемое как kill_it_with_fire
. Этот путь каждый раз, когда Вы испытываете желание удалять что-то, разрешение и уничтожаете его с огнем.
f
полная противоположность i
опция?? Я попробовал его и работал хотя...
– amyassin
22.01.2013, 16:24
r
там. Просто зафиксированный это.
– NlightNFotis
22.01.2013, 18:09
Мне нравится помещать имя каталога сначала как это:
$ rm /directoryname -rf
Если вы понимаете язык программирования Си, то я думаю, что можно переписать исходный код rm и сделать небольшой патч для кернела. Я видел это на одном сервере, и было немыслимо удалять некоторые важные каталоги, и когда вы набираете 'rm -rf /direcotyr', он посылает письмо сисадмину.
--no-preserve-root
опция, для другой важной папки.. И это, по-видимому, не существует, как раз когда практика... – amyassin 22.01.2013, 11:41rm -rf
уже означает, “удаляют это, да я уверен, что знаю то, что я делаю”. Если Вы хотите больше, заменуrm
сценарием, который отказывается удалять определенные каталоги. – Gilles 'SO- stop being evil' 22.01.2013, 22:32rm
от доступа к определенным каталогам. Кроме того, так как Ваш вопрос не только о Linux, я должен был упомянуть OSX, которая имеет что-то немного как то, что Вы хотите. – Gilles 'SO- stop being evil' 23.01.2013, 00:17