rm (Unix) - rm (Unix)

редактировать
rm
rm command Команда 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.

Содержание
  • 1 Обзор
  • 2 История
  • 3 Синтаксис
  • 4 Права доступа
  • 5 Защита корня файловой системы
  • 6 Пользователь -proofing
  • 7 Максимальное ограничение аргументов командной строки
  • 8 См. также
  • 9 Ссылки
  • 10 Дополнительная литература
  • 11 Внешние ссылки
Обзор

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 {} +
Permissions

Обычно в большинстве файловых систем для удаления файла требуется разрешение на запись в родительский каталог (и разрешение на выполнение, чтобы войти в каталог на первом месте). (Обратите внимание, что, что сбивает с толку новичков, разрешения на сам файл не имеют значения. Однако 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
Последняя правка сделана 2021-06-04 05:15:56
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте