Jump to content

РМ (Unix)

(Перенаправлено из Rm (команда EFI) )
РМ
Оригинальный автор(ы) Кен Томпсон , Деннис Ритчи
( AT&T Bell Laboratories )
Разработчик(и) Различные с открытым исходным кодом и коммерческие разработчики разработчики
Первоначальный выпуск 3 ноября 1971 г .; 52 года назад ( 1971-11-03 )
Написано в С
Операционная система Unix , Unix-подобные , V , Plan 9 , Inferno , KolibriOS , IBM i
Платформа Кросс-платформенный
Тип Команда
Лицензия основные утилиты : GPLv3+
План 9: МОЯ лицензия

rm (сокращение от «удалить ») — базовая команда в Unix и Unix-подобных операционных системах, используемая для удаления таких объектов, как компьютерные файлы , каталоги и символические ссылки, из файловых систем , а также специальных файлов, таких как узлы устройств , каналы и сокеты , аналогично del команда в MS-DOS , OS/2 и Microsoft Windows . Команда также доступна в оболочке EFI . [1]

The rm команда удаляет ссылки на объекты из файловой системы с помощью системного вызова unlink , где эти объекты могли иметь несколько ссылок (например, файл с двумя разными именами), а сами объекты отбрасываются только тогда, когда все ссылки удалены и нет программ все еще имеют открытые дескрипторы объектов.

Это позволяет реализовать сценарии, в которых программа может открыть файл, немедленно удалить его из файловой системы, а затем использовать его в качестве временного пространства, зная, что пространство файла будет освобождено после завершения работы программы, даже если она закроется из-за сбоя.

Команда обычно не уничтожает данные файла, поскольку на самом деле ее целью является просто разрыв связей, а освобожденное пространство файловой системы все еще может содержать остатки данных из удаленного файла. В некоторых случаях это может быть проблемой безопасности, и усиленные версии иногда предусматривают удаление данных при разрыве последней ссылки, а такие программы, как shred и srm доступны , которые специально обеспечивают возможность очистки данных.

rm обычно встречается только в операционных системах, производных от UNIX , которые обычно не обеспечивают восстановление удаленных файлов с помощью такого механизма, как корзина , [2] отсюда и тенденция пользователей заключать rm в какой-то обертке, чтобы ограничить случайное удаление файлов.

Существуют утилиты восстановления , которые попытаются восстановить индекс и вернуть файл, если его части не использовались повторно.

В некоторых старых версиях Unix rm команда удалит каталоги, если они пусты. [3] Такое поведение все еще можно получить в некоторых версиях rm с -d флаг, например, BSD (например, FreeBSD , [4] НетБСД , [5] OpenBSD [6] и macOS ), полученный из 4.4BSD-Lite2.

Версия rm пакет GNU coreutils был написан Полом Рубином, Дэвидом Маккензи, Ричардом Столлманом и Джимом Мейерингом. [7] Эта версия также предоставляет -d вариант, чтобы помочь с совместимостью. [8] Такая же функциональность предусмотрена стандартом. rmdir команда.

The -i опция в версии 7 заменена dswили «удалить из переключателей», которое дебютировало в Версии 1 . Дуг Макилрой написал это dsw «был инструментом отчаяния, предназначенным для очистки файлов с непроизносимыми именами». [9]

Команда доступна в виде отдельного пакета для Microsoft Windows как часть UnxUtils коллекции , состоящей из собственных Win32- портов распространенных GNU Unix-подобных утилит. [10] KolibriOS включает в себя реализацию rm команда. [11] Команда rm также была перенесена в операционную систему IBM i . [12]

Синтаксис

[ редактировать ]

rm удаляет файл, указанный после добавления опций. Пользователи могут использовать полный или относительный путь к файлу, чтобы указать файлы для удаления. rm по умолчанию не удаляет каталог. [13] rm foo удаляет файл « foo » в каталоге, в котором в данный момент находится пользователь.

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

  • -r, «рекурсивный», который удаляет каталоги, предварительно рекурсивно удаляя их содержимое (чтобы не оставлять файлы без каталога для размещения).
  • -i, «интерактивный», который запрашивает подтверждение каждого удаления.
  • -f, «принудительный», который игнорирует несуществующие файлы и отменяет любые запросы на подтверждение (фактически отменяя -i), хотя он не удалит файлы из каталога, если каталог защищен от записи.
  • -v, «многословный», который печатает то, что rm делает на терминале
  • -d, «каталог», который удаляет пустой каталог и работает только в том случае, если указанный каталог пуст.
  • --one-file-system, удаляет только файлы в той же файловой системе, что и аргумент, и игнорирует смонтированные файловые системы.

rm может быть перекрыт псевдонимом оболочки ( оболочки C псевдоним , оболочка Bourne или Bash) функцией " rm -i", чтобы избежать случайного удаления файлов. Если пользователь по-прежнему желает удалить большое количество файлов без подтверждения, он может вручную отменить удаление. -i аргумент, добавив -f опция (как опция, указанная позже в расширенной командной строке " rm -i -f" имеет приоритет). К сожалению, этот подход порождает опасные привычки использования подстановочных знаков, приводящие к собственной версии случайного удаления.

rm -rf (по-разному, rm -rf /, rm -rf *и другие) часто используется в шутках и анекдотах о катастрофах Unix, [14] например, потеря многих файлов во время производства фильма « История игрушек 2» в студии Pixar . [15] rm -rf / вариант команды, если его запускает суперпользователь , приведет к удалению с компьютера каждого файла, доступного из текущей файловой системы.

rm часто используется вместе с xargs для предоставления списка файлов для удаления:

 xargs rm < filelist

Или, чтобы удалить все изображения PNG во всех каталогах ниже текущего:

 find . -name '*.png' -exec rm {} +

Разрешения

[ редактировать ]

Обычно в большинстве файловых систем для удаления файла требуется разрешение на запись в родительский каталог (и разрешение на выполнение, чтобы в первую очередь войти в каталог). (Обратите внимание, что, что сбивает с толку новичков, права доступа к самому файлу не имеют значения. Однако GNU rm запрашивает подтверждение, если файл, защищенный от записи, должен быть удален, если не используется опция -f.) [16]

Чтобы удалить каталог (с помощью rm -r), необходимо рекурсивно удалить все его содержимое. Для этого необходимо иметь права на чтение, запись и выполнение для этого каталога (если он не пуст) и для всех непустых подкаталогов рекурсивно (если таковые имеются). Разрешения на чтение необходимы для просмотра содержимого каталога и его удаления. Иногда это приводит к странной ситуации, когда непустой каталог невозможно удалить, поскольку у него нет разрешения на запись в него и поэтому невозможно удалить его содержимое; но если бы тот же каталог был пуст, его можно было бы удалить. [17]

Если файл находится в каталоге с установленным битом липкости , то для удаления файла необходимо, чтобы он был владельцем файла.

Защита корня файловой системы

[ редактировать ]

Sun Microsystems представила « rm -rf /» защита в Solaris 10, впервые выпущенная в 2005 году. После выполнения команды система теперь сообщает, что удаление / не разрешено. [18] Вскоре после этого та же функциональность была представлена ​​в FreeBSD . версии rm полезность. [19] ГНУ rm отказывается выполнять rm -rf / если --preserve-root предоставляется вариант, [20] который используется по умолчанию с момента версии 6.4 GNU Core Utilities выпуска в 2006 году. В новых системах этот отказоустойчивый режим всегда активен, даже без этой опции. Чтобы запустить команду, пользователь должен обойти отказоустойчивость, добавив опцию --no-preserve-root, даже если они являются суперпользователями.

Проверка пользователя

[ редактировать ]

Системные администраторы, дизайнеры и даже пользователи часто пытаются защитить себя от случайного удаления файлов, создавая псевдоним или функцию вроде:

alias rm="rm -i"
rm () { /bin/rm -i "$@" ; }

Это приводит к rm запросить у пользователя подтверждение для каждого файла, следует ли его удалить, нажав клавишу Y или N. К сожалению, это приучает пользователей небрежно относиться к подстановочным знакам, которые они вводят в свои rm команды, а также поощрять тенденцию поочередно наносить удары y и клавиша возврата для подтверждения удаляет - до тех пор, пока не пройдет один файл, который им нужно было сохранить. [ нужна ссылка ] Было замечено, что пользователи даже доходили до " yes | rm files", который автоматически вставляет "y" для каждого файла. [ нужна ссылка ]

Компромисс, который позволяет пользователям подтвердить только один раз, поощряет правильное использование подстановочных знаков и упрощает проверку списка, может быть достигнут с помощью чего-то вроде:

if [ -n "$PS1" ] ; then
  rm () 
  { 
      ls -FCsd "$@"
      echo 'remove[ny]? ' | tr -d '\012' ; read
      if [ "_$REPLY" = "_y" ]; then
          /bin/rm -rf "$@"
      else
          echo '(cancelled)'
      fi
  }
fi

Важно отметить, что эту функцию не следует превращать в сценарий оболочки, так как существует риск того, что она будет обнаружена раньше системы. rm в пути поиска, а также не должно быть разрешено в неинтерактивных оболочках, где это может нарушить пакетные задания. Заключив определение в if [ -n "$PS1" ] ; then ....  ; fi конструкция защищает от последнего.

Существуют сторонние альтернативы, которые предотвращают случайное удаление важных файлов, например «safe-rm». [21] или «мусор». [22]

Ограничение максимального количества аргументов командной строки

[ редактировать ]

GNU Core Utilities, Реализация используемая в нескольких дистрибутивах Linux, будет ограничена в байтах аргументов командной строки. Количество страниц, выделенных в ядре для аргументов командной строки до ядра 2.6.23. Выпущено 9 октября 2007 г. [23] [24] были определены во время компиляции ядра в переменной MAX_ARG_PAGES в include/linux/binfmts.h файл, но новые ядра ограничивают максимальную длину аргумента до 25% от максимального предела стека (ulimit -s). Ошибка: /bin/rm: Argument list too long. выдаст запрос, если превышен лимит аргументов командной строки [25]

См. также

[ редактировать ]
  1. ^ «Оболочки EFI и сценарии» . Интел . Проверено 25 сентября 2013 г.
  2. ^ «Unix — Часто задаваемые вопросы (3/7) [Частые публикации]Раздел — Как «восстановить» файл?» . www.faqs.org .
  3. ^ "страница rm из раздела 1 8-го руководства unix" . man.cat-v.org .
  4. ^ «RM(1)» , FreeBSD-5.4-RELEASE , получено 5 февраля 2015 г.
  5. ^ «RM(1)» , NetBSD-2.0 , получено 5 февраля 2015 г.
  6. ^ «RM(1)» , OpenBSD-3.6 , получено 5 февраля 2015 г.
  7. ^ «rm(1): удалить файлы/каталоги — справочная страница Linux» . linux.die.net .
  8. ^ Кшиштоф Гой (22 января 2012 г.). «rm: новая опция --dir (-d) для удаления пустых каталогов» . coreutils.git .
  9. ^ Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). CSTR. Лаборатории Белла. 139.
  10. ^ «Собственные порты Win32 некоторых утилит GNU» . unxutils.sourceforge.net .
  11. ^ «Shell — KolibriOS wiki» . wiki.kolibrios.org .
  12. ^ ИБМ . «IBM System i Версия 7.2 Программирование Qshell» (PDF) . ИБМ . Проверено 05 сентября 2020 г.
  13. ^ «rm(1) — страница руководства Linux» . man7.org .
  14. ^ Гите, Вивек. «Linux/UNIX: удалить файл» . Никскрафт . Проверено 24 ноября 2011 г.
  15. ^ Панзарино, Мэтью (21 мая 2012 г.). «Как «Историю игрушек 2» удалили дважды: один раз случайно, другой намеренно» . ТНВ | СМИ . Проверено 27 сентября 2022 г.
  16. ^ «Справка и примеры команд Linux rm» . КомпьютерНадежда . 24 января 2018 года. Архивировано из оригинала 16 апреля 2016 года . Проверено 24 января 2019 г. {{cite news}}: CS1 maint: неподходящий URL ( ссылка )
  17. ^ МакЭлхерн, Кирк (2 января 2014 г.). «Освойте командную строку: Удаление файлов и папок» . Макмир . Проверено 24 января 2019 г.
  18. ^ «Вмешательство в дела волшебников» . Архивировано из оригинала 03.11.2016.
  19. ^ «Предыдущий коммит добавил в rm(1) код для предупреждения и удаления любых · freebsd/freebsd@d6b7bd9» . Гитхаб .
  20. ^ «вызов rm (GNU Coreutils)» . www.gnu.org .
  21. ^ «Safe-rm в Launchpad» . Панель запуска .
  22. ^ "Андреафрансия/мусор-кли" . 12 сентября 2020 г. – через GitHub.
  23. ^ «Linux_2_6_23 — новички в ядре Linux» . kernelnewbies.org .
  24. ^ «kernel/git/torvalds/linux.git — дерево исходного кода ядра Linux» . git.kernel.org .
  25. ^ « Слишком длинный список аргументов»: За пределами аргументов и ограничений | Linux Journal» . www.linuxjournal.com .

Дальнейшее чтение

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d69bad70f09d24641cf7de8141b76426__1690261560
URL1:https://arc.ask3.ru/arc/aa/d6/26/d69bad70f09d24641cf7de8141b76426.html
Заголовок, (Title) документа по адресу, URL1:
rm (Unix) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)