Команда rm | |
Исходный автор (-ы) | Кен Томпсон, Деннис Ритчи. (ATT Bell Laboratories ) |
---|---|
Разработчик (и) | Различные разработчики с открытым исходным кодом и коммерческие разработчики |
Первоначальный выпуск | 3 ноября 1971 г.; 48 лет назад (1971-11-03) |
Операционная система | Unix, Unix-like, V, Plan 9, Inferno, KolibriOS, IBM i |
Платформа | Кросс-платформенность |
Тип | Команда |
Лицензия | coreutils : GPLv3 + |
In вычисления, rm
(сокращение от remove) - это базовая команда в Unix и Unix-подобных операционных системах, используемая для удаления таких объектов как компьютерные файлы, каталоги и символические ссылки из файловых систем, а также специальные файлы, такие как узлы устройства, каналы и сокеты, аналогично команде del
в MS-DOS, OS / 2 и Microsoft Windows. Команда также доступна в оболочке EFI.
The rm
удаляет ссылки на объекты из файловой системы с помощью системного вызова unlink, где эти объекты могли иметь несколько ссылок (например, файл с двумя разными именами), а сами объекты отбрасываются только тогда, когда все ссылки были удалены, и ни одна из программ по-прежнему не имеет открытых дескрипторов объектов.
Это позволяет использовать сценарии, в которых программа может открыть файл, немедленно удалить его из файловой системы, а затем использовать его для временного пространства, зная, что пространство файла будет освобождено после выхода из программы, даже если она завершится. путем сбоя.
Команда обычно не уничтожает данные файла, так как ее цель на самом деле просто отсоединить ссылки, а освобожденное пространство файловой системы может по-прежнему содержать оставшиеся данные из удаленного файла. В некоторых случаях это может быть проблемой безопасности, а усиленные версии иногда предусматривают стирание данных при обрезании последней ссылки, и доступны такие программы, как shred и srm, которые в частности, обеспечить возможность удаления данных.
rm
обычно встречается только в операционных системах, производных от UNIX, которые обычно не обеспечивают восстановление удаленных файлов с помощью механизма, подобного корзине, отсюда и тенденция пользователей к заключите rm
в какую-то оболочку, чтобы ограничить случайное удаление файла.
Существуют утилиты восстановления, которые попытаются восстановить индекс и могут вернуть файл, если части не были повторно использованы.
В некоторых старых версиях Unix команда rm
удаляла каталоги, если они были пустыми. Такое поведение все еще может быть получено в некоторых версиях rm
с флагом -d
, например, BSD (например, FreeBSD, NetBSD, OpenBSD и macOS ), полученный из 4.4BSD-Lite2.
Версия rm
, входящая в состав GNU coreutils, была написана Полом Рубином, Дэвидом Маккензи, Ричардом Столлманом, и Джим Мейеринг. В этой версии также есть опция -d
для обеспечения совместимости. Та же функциональность предоставляется стандартной командой rmdir
.
Параметр -i
в версии 7 заменил dsw
или «удалить из переключателей», который дебютировал в версии 1. Дуг Макилрой писал, что dsw
«был инструментом отчаяния, предназначенным для очистки файлов с непроизносимыми именами».
KolibriOS включает реализацию rm
.
Команда rm также была перенесена в операционную систему IBM i.
rm
удаляет файл, указанный после добавления параметров. Пользователи могут использовать полный или относительный путь к файлу, чтобы указать файлы для удаления. rm
по умолчанию не удаляет каталог.
% rm foo
удаляет файл «foo » в каталоге, в котором в данный момент находится пользователь.
rm
, как и другие команды, использует параметры, чтобы указать, как он будет себя вести:
-r
, «рекурсивный», который удаляет каталоги, предварительно удаляя содержимое рекурсивно (чтобы не оставлять файлы без каталога для хранения).-i
, " интерактивный », который запрашивает подтверждение каждого удаления.-f
,« принудительно », который игнорирует несуществующие файлы и отменяет любые запросы подтверждения (эффективно отменяет -i
), хотя не удаляет файлы из каталог, если каталог защищен от записи.-v
, «подробный», который выводит на терминал-d
, что делает rm
, «каталог», который удаляет пустой каталог и работает только если указанный каталог пуст.--one-file-system
, удаляет файлы только в той же файловой системе, что и аргумент, и игнорирует смонтированные файловые системы.rm
может перекрываться оболочкой псевдоним (оболочка C псевдоним, оболочка Борна или Bash) функция «rm -i
», чтобы избежать случайного удаления файлы. Если пользователь по-прежнему желает удалить большое количество файлов без подтверждения, он может вручную отменить аргумент -i
, добавив параметр -f
(как параметр, указанный позже в расширенная командная строка "rm -i -f
" имеет приоритет). К сожалению, такой подход порождает опасные привычки к использованию подстановочных знаков, что приводит к собственной версии случайного удаления.
rm -rf
(по-разному, rm -rf /
, rm -rf *
и другие) часто используется в шутках и анекдотах о катастрофах Unix. Вариант команды rm -rf /
, если его запускает суперпользователь, приведет к удалению с машины каждого файла, доступного из текущей файловой системы.
rm
часто используется вместе с xargs для предоставления списка файлов для удаления:
xargs rm < filelist
Или для удаления всех изображений PNG во всех каталогах ниже текущий:
найти. -name '*.png' -exec rm {} +
Обычно в большинстве файловых систем для удаления файла требуется разрешение на запись в родительский каталог (и разрешение на выполнение, чтобы войти в каталог на первом месте). (Обратите внимание, что, что сбивает с толку новичков, разрешения на сам файл не имеют значения. Однако GNU rm
запрашивает подтверждение, если защищенный от записи файл должен быть удален, если не используется опция -f.)
Чтобы удалить каталог (с помощью rm -r
), нужно рекурсивно удалить все его содержимое. Для этого необходимо иметь права на чтение, запись и выполнение для этого каталога (если он не пустой) и всех непустых подкаталогов рекурсивно (если они есть). Разрешения на чтение необходимы для отображения содержимого каталога с целью его удаления. Иногда это приводит к странной ситуации, когда непустой каталог не может быть удален, потому что у кого-то нет прав на запись в него и поэтому нельзя удалить его содержимое; но если бы тот же каталог был пуст, его можно было бы удалить.
Если файл находится в каталоге с установленным липким битом, то для удаления файла требуется, чтобы он был владелец файла.
Sun Microsystems представила защиту «rm -rf /
» в Solaris 10, впервые выпущенном в 2005 году. команда, система теперь сообщает, что удаление / запрещено. Вскоре после этого такая же функциональность была введена в FreeBSD версию утилиты rm
. GNU rm
отказывается выполнять rm -rf /
, если - предоставляется опция preserve-root
, которая используется по умолчанию, поскольку в 2006 году была выпущена версия 6.4 GNU Core Utilities. В более новых системах этот отказоустойчивый является всегда активен, даже без опции. Чтобы запустить команду, пользователь должен обойти отказоустойчивость, добавив параметр --no-preserve-root
, даже если он является суперпользователем.
Системные администраторы, дизайнеры и даже пользователи часто пытаются защитить себя от случайного удаления файлов, создав псевдоним или функцию в следующих строках:
alias rm = " rm -i "rm () {/ bin / rm -i" $ @ "; }
Это приводит к тому, что rm
запрашивает пользователя для каждого файла подтвердить, следует ли его удалить, нажав клавишу Y или N. К сожалению, это приводит к тому, что пользователи не заботятся о подстановочных знаках, которые они передают в свои команды rm
, а также поощряют тенденцию поочередно нажимать y
и клавишу возврата для подтверждения удаляет - пока не пройдет один файл, который им нужно сохранить. Замечено, что пользователи заходили так далеко, как «yes | rm files
», который автоматически вставляет «y» для каждого файла.
Компромисс, позволяющий пользователям подтвердить только один раз, поощряет правильное использование подстановочных знаков и упрощение проверки списка может быть достигнуто с помощью чего-то вроде:
if [-n "$ PS1"]; затем rm () {ls -FCsd "$ @" echo 'remove [ny]? '| tr -d '\ 012'; читать, если ["_ $ REPLY" = "_y"]; then / bin / rm -rf "$ @" else echo '(отменено)' fi} fi
Важно отметить, что эту функцию не следует превращать в сценарий оболочки, так как это может привести к ее обнаружению раньше. системы rm
в пути поиска, и это не должно быть разрешено в неинтерактивных оболочках, где это может нарушить пакетные задания. Заключение определения в if [-n "$ PS1"]; тогда.... ; fi
конструкция защищает от последнего.
Существуют сторонние альтернативы, предотвращающие случайное удаление важных файлов, такие как «safe-rm» или «trash».
GNU Core Utilities реализация, используемая в нескольких дистрибутивах Linux, будет ограничена в байтах аргументов командной строки количество страниц, выделенных в ядре для аргументов командной строки до ядра 2.6.23, выпущенного 9 октября 2007 г., было определено при компиляции ядра. время в переменной MAX_ARG_PAGES
в файле include / linux / binfmts.h
, но новые ядра ограничивают максимальную длину аргумента 25% от максимального предела стека (ulimit -s). Ошибка: / bin / rm: слишком длинный список аргументов.
выдаст запрос, если предел аргументов командной строки превышает
В Викибуке Руководство по Unix есть страница по теме: rm |
rm
: удаление записей из каталога - Команды Справочник по служебным программам, Спецификация Single UNIX, выпуск 7 из The Open Group rm (1)
– Plan 9 Руководство программиста, том 1rm (1)
– Inferno Общие команды Ручной