1 (02.04.2011 13:49:12 отредактировано drBatty)

Команда rm удаляет файлы и каталоги. Всё, и без всяких предупреждений. Навсегда. Точнее не совсем навсегда - сами данные остаются конечно (уничтожить файл безвозвратно на HDD поможет shred), вот только найти их решительно невозможно. Ибо информация о том, где лежат данные будет безвозвратно уничтожены. Придётся проверить весть раздел, и если повезёт, данные будут найдены. Восстанавливает данные таким образом программа photorec. Анделиты в линуксе нет. Точнее, она не работает. Такие дела...

Алиасы.

В силу того, что команда rm чрезвычайно опасна, в большинстве дистрибутивов сделан алиас

 Консоль:
alias rm='rm -i'

И потому, команда rm спрашивает подтверждения перед удалением. Если использовать rm в скриптах, или как /bin/rm, или как rm -f, то разрешение НЕ спрашивается.

Verbose mode.

Имеется также ключ -v, который очень рекомендуется к применению - с этим ключом rm -v пишет то, что удаляет. Полезно потому, что удаление 100500 файлов в Linux сейчас занимает доли секунды. А вот восстановить их чрезвычайно сложно. Конечно, вывод 100500 строчек намного дольше, и пользователь успеет прервать работу rm, перед окончательным удалением (CTRL+C).

Имена файлов и хардлинки.

Команда rm не всегда удаляет файл. Файл удаляется тогда, и только тогда, когда
1) удаляется последнее имя файла (у файла в Linux может быть сколько угодно имён, в т.ч. и не быть вовсе, файл с несколькими именами называют хардлинком).
2) файл более не используется никаким процессом.
Таким образом, если наш файл имеет два имени, то удаляя файл командой rm, нам надо выполнить rm дважды, либо передать rm оба имени в качестве параметров. Можно защитить свои файлы, создав на них хардлинки там, где у пользователя нет права модификации (в каталоге с правом -w). Тогда пользователь сможет удалять только свои имена, но сами файлы останутся, т.к. число имён не будет равно 0.
Кроме того, если файл открыт другим приложением, то удалить его невозможно. Однозадачная и однопользовательская венда в данном случае прерывает единственную задачу, и пишет единственному юзеру сообщение - дескать "файл нельзя удалять!". В Linux'е очевидно это невозможно, ведь файл может быть использован многими пользователями, а прерывать их работу, согласитесь, жестоко... Потому удаление откладывается до того момента, пока все процессы всех юзеров не закончат работу с этим файлом. При этом, для процессов файл ещё есть, но в ФС такого имени уже нет. Можно конечно узнать дескриптор удалённого, но ещё не закрытого файла, посмотрев в каталоге /proc/PID/fd, а лучше командой lsof. Вот тема про это:
http://linuxforum.ru/viewtopic.php?id=11408

Каталоги.

В линуксе имеются особые файлы - каталоги. Это действительно каталоги, в которых хранятся имена файлов, и указатели на эти файлы (номера inode). Операция удаления rm - это на самом деле операция не над файлом, а над каталогом, который содержит этот файл. Потому для неё необходимо право модификации каталога, и не нужны права чтения/записи в сам файл. Операция удаления каталогов не имеет никакого смысла, за исключением случая, когда под "каталогом" мы понимаем не только сам каталог, но и все файлы и каталоги которые "в нём" находятся (т.е. мы в данном случае хотим удалить "папку с файлами", а не сам каталог). Для этого, очевидно, надо сначала удалить все файлы, а затем удалить (уже пустой) каталог. Если при удалении файлов нам встретится вложенные каталоги, для них следует рекурсивно применить эту процедуру. Рекурсивное удаление выполняется командой rm -r. А если каталог уже пуст, то его можно удалить командой rmdir.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)