Как удалить файловую систему
Обновлено: 21.11.2024
Удаляет файловую систему, навсегда блокируя доступ к ее содержимому. По возвращении файловая система больше не существует, и вы не можете получить доступ к содержимому удаленной файловой системы.
Вы не можете удалить используемую файловую систему. То есть, если в файловой системе есть какие-то цели монтирования, их нужно сначала удалить. Дополнительные сведения см. в разделах DescribeMountTargets и DeleteMountTarget .
Вызов DeleteFileSystem возвращается, когда файловая система все еще находится в состоянии удаления. Вы можете проверить статус удаления файловой системы, вызвав операцию DescribeFileSystems, которая возвращает список файловых систем в вашей учетной записи. Если вы передаете идентификатор файловой системы или маркер создания для удаленной файловой системы, DescribeFileSystems возвращает ошибку 404 FileSystemNotFound.
Для этой операции требуются разрешения для действия elasticfilesystem:DeleteFileSystem.
Описания глобальных параметров см. в «справке aws».
Краткий обзор¶
Параметры¶
Идентификатор файловой системы, которую вы хотите удалить.
--cli-ввод-json | --cli-input-yaml (строка) Считывает аргументы из предоставленной строки JSON. Строка JSON соответствует формату, предоставленному --generate-cli-skeleton . Если в командной строке указаны другие аргументы, эти значения переопределяют значения, предоставленные JSON. Невозможно передать произвольные двоичные значения, используя значение, предоставленное JSON, поскольку строка будет воспринята буквально. Это нельзя указывать вместе с --cli-input-yaml .
--generate-cli-skeleton (строка) Печатает скелет JSON в стандартный вывод без отправки запроса API. Если не задано значение или указано значение input , печатает образец ввода JSON, который можно использовать в качестве аргумента для --cli-input-json . Точно так же, если предоставлен yaml-input, он напечатает образец ввода YAML, который можно использовать с --cli-input-yaml . Если предоставлено значение output , он проверяет входные данные команды и возвращает образец вывода JSON для этой команды.
Описания глобальных параметров см. в «справке aws».
Примеры¶
Чтобы удалить файловую систему
В следующем примере удаления файловой системы указанная файловая система удаляется.
Эта команда ничего не выводит.
Дополнительную информацию см. в разделе Удаление файловой системы Amazon EFS в Руководстве пользователя Amazon Elastic File System.
Некоторая информация относится к предварительной версии продукта, которая может быть существенно изменена до ее выпуска. Microsoft не дает никаких явных или подразумеваемых гарантий в отношении представленной здесь информации.
Перегрузки
УдалитьФайл(Строка)
Параметры
Имя и путь к удаляемому файлу.
Исключения
Путь недействителен по одной из следующих причин: это строка нулевой длины; содержит только пробелы; он содержит недопустимые символы; он имеет косую черту в конце, где должен быть указан файл; или это путь к устройству (начинается с \\.\).
файл имеет значение Nothing или пустую строку.
Путь превышает установленную системой максимальную длину.
Имя файла или каталога в пути содержит двоеточие (:) или имеет недопустимый формат.
Файл используется.
У пользователя недостаточно прав для просмотра пути.
Файл не существует.
У пользователя нет разрешения на удаление файла, или файл доступен только для чтения.
Примеры
В этом примере удаляется файл Test.txt .
В этом примере удаляется файл Test.txt, и пользователь может подтвердить удаление файла.
В этом примере файл Test.txt удаляется и отправляется в корзину.
Примечания
Кому | Посмотреть |
---|---|
Чтобы удалить файл | Как удалить файл в Visual Basic |
Относится к
DeleteFile(String, UIOption, RecycleOption)
Параметры
Имя и путь к удаляемому файлу.
Необходимо ли визуально отслеживать ход операции. По умолчанию используется UIOption.OnlyErrorDialogs .
Указывает, следует ли отправлять удаленный файл в корзину. По умолчанию используется RecycleOption.DeletePermanently .
Исключения
Путь недействителен по одной из следующих причин: это строка нулевой длины; содержит только пробелы; он содержит недопустимые символы; он имеет косую черту в конце, где должен быть указан файл; или это путь к устройству (начинается с \\.\).
файл имеет значение Nothing или пустую строку.
Путь превышает установленную системой максимальную длину.
Имя файла или каталога в пути содержит двоеточие (:) или имеет недопустимый формат.
Файл используется.
У пользователя недостаточно прав для просмотра пути.
Файл не существует.
У пользователя нет разрешения на удаление файла, или файл доступен только для чтения.
Примеры
В этом примере удаляется файл Test.txt .
В этом примере удаляется файл Test.txt и позволяет пользователю подтвердить удаление файла.
В этом примере файл Test.txt удаляется и отправляется в корзину.
Примечания
Параметры showUI и recycle не поддерживаются в приложениях, не взаимодействующих с пользователем, таких как службы Windows.
Кому | Посмотреть |
---|---|
Чтобы удалить файл | Как удалить файл в Visual Basic |
См. также
Относится к
DeleteFile(String, UIOption, RecycleOption, UICancelOption)
Параметры
Имя и путь к удаляемому файлу.
Необходимо ли визуально отслеживать ход операции. По умолчанию используется UIOption.OnlyErrorDialogs .
Указывает, следует ли отправлять удаленный файл в корзину. По умолчанию используется RecycleOption.DeletePermanently .
Указывает, будет ли создаваться исключение, когда пользователь отменяет операцию. По умолчанию используется UICancelOption.ThrowException .
Исключения
Путь недействителен по одной из следующих причин: это строка нулевой длины; содержит только пробелы; он содержит недопустимые символы; он имеет косую черту в конце, где должен быть указан файл; или это путь к устройству (начинается с \\.\).
файл имеет значение Nothing или пустую строку.
Путь превышает установленную системой максимальную длину.
Имя файла или каталога в пути содержит двоеточие (:) или имеет недопустимый формат.
Файл используется.
У пользователя недостаточно прав для просмотра пути.
Файл не существует.
У пользователя нет разрешения на удаление файла, или файл доступен только для чтения.
Пользователь отменил операцию, и для onUserCancel задано значение ThrowException.
Примеры
В этом примере удаляется файл Test.txt .
В этом примере удаляется файл Test.txt, и пользователь может подтвердить удаление файла.
В этом примере файл Test.txt удаляется и отправляется в корзину.
Примечания
Параметры showUI , recycle и onUserCancel не поддерживаются в приложениях, не взаимодействующих с пользователем, таких как службы Windows.
После совершения печально известной ошибки удаления всей моей файловой системы с помощью sudo rm -rf /* , восстановления после ужасного ущерба, который я нанес, и преодоления того факта, что я только что потерял 6 лет своей жизни, я начал задаваться вопросом, почему возможно ли это сделать, и что можно сделать, чтобы предотвратить эту ошибку.
Одним из предложенных мне решений является отмена root-доступа для моей учетной записи, но это неудобно, потому что многие команды требуют root-доступа, а когда вам приходится запускать несколько десятков команд каждый день, это раздражает. р>
Создание резервной копии вашей системы — это очевидный способ. Но восстановление резервной копии также требует некоторого времени простоя, и в зависимости от вашей системы это время простоя может составлять дни или недели, что в некоторых случаях может быть неприемлемо.
Мой вопрос: почему бы не реализовать подтверждение, когда пользователь пытается удалить свою файловую систему? Так что, когда вы действительно захотите это сделать, вы просто нажмете Y или введите, а если вы этого не сделаете, по крайней мере, вы не потеряете все.
"Почему это вообще возможно?" Почему не должно быть возможным? Есть совершенно веские причины для удаления содержимого иерархии каталогов, и есть множество подмножеств /, которые было бы почти так же плохо удалить (например, /etc/). В задачу rm не входит решать, какие каталоги можно или нельзя легко удалить.
Заголовок гласит: "Почему можно удалить систему?" тогда как сам вопрос спрашивает: «Мой вопрос: почему бы не реализовать подтверждение, когда пользователь пытается удалить свою файловую систему?». Так что это делает вопрос неясным. Какой из них является вашим фактическим вопросом, чтобы мы по крайней мере знали, что ответить? Пожалуйста, отредактируйте свой пост, чтобы внести ясность
В чем собственно вопрос? Я вижу три: (1) Почему это возможно? (2) Как предотвратить это? и (3) Почему бы не реализовать подтверждение? -- Это не один и тот же вопрос, первый требует рассуждений, второй -- инструментов. (Третье связано со вторым, но все же не совсем одно и то же. Подтверждение — не единственный способ что-то предотвратить.)
Если вы не просите разъяснений у автора вопроса, пожалуйста, вообще не комментируйте. Я вижу здесь много самодовольных комментариев, объясняющих, как это вина ОП из-за того, что он не знает, что означают флаги, или из-за отсутствия резервной копии или чего-то еще. Я очень рад узнать, что так много наших пользователей достаточно мудры, чтобы иметь резервные копии и не запускать команды, которых они не понимают. Это абсолютно здорово для них, но совершенно бесполезно для ОП, который, по-видимому, уже усвоил этот урок. Так что давайте перестанем греться в лучах собственного блеска и просто ответим на вопрос.
7 ответов 7
Познакомьтесь с safe-rm , «оболочкой команды rm для предотвращения случайного удаления»:
safe-rm предотвращает случайное удаление важных файлов, заменяя rm оболочкой, которая проверяет заданные аргументы по настраиваемому черному списку файлов и каталогов, которые никогда не следует удалять.
Пользователи, которые попытка удалить один из этих защищенных файлов или каталогов не сможет этого сделать, и вместо этого будет показано предупреждающее сообщение. ( man safe-rm )
Если приведенная выше ссылка для установки не работает, просто используйте sudo apt install safe-rm. Конфигурация по умолчанию уже содержит системные каталоги, попробуем, например, rm /*:
Как видите, это помешает вам удалить /home , где, как я полагаю, хранятся ваши личные файлы. Однако это не мешает вам удалить ~ или любой из его подкаталогов, если вы попытаетесь удалить их напрямую. Чтобы добавить каталог ~/precious_photos, просто добавьте его абсолютный путь с разрешением тильды в файл конфигурации safe-rm /etc/safe-rm.conf, например:
Для случаев, когда вы запускаете rm без sudo 1 и флага -f, рекомендуется добавить псевдоним для вашей оболочки, который делает флаг rm -i флагом по умолчанию. Таким образом, rm запрашивает каждый файл перед его удалением:
Таким же полезным является флаг -I , но он только предупреждает «один раз перед удалением более трех файлов или при рекурсивном удалении», что «менее навязчиво, чем -i , но при этом обеспечивает защиту от большинства ошибок»:< /p>
Общая опасность этих псевдонимов заключается в том, что вы легко привыкаете полагаться на них, чтобы спасти себя, что может иметь неприятные последствия при использовании другой среды.
1: sudo игнорирует псевдонимы, это можно обойти, определив alias sudo='sudo ', хотя
Подтверждение уже есть, проблема в -f в команде, то есть --force ; Когда пользователь форсирует операцию, предполагается, что он знает, что делает (очевидно, всегда может добавиться ошибка).
С опцией --force все иначе: я не получу подтверждения и файлы будут удалены.
Проблема в том, чтобы знать команду и ее параметры, больше ориентироваться в мануале команды (также если команда находится в учебнике) например: первый раз я увидел команду tar xzf some.tar.gz Я спрашиваю себя: "Что означает xzf?"
Затем я прочитал справочную страницу tar и обнаружил ее.
Я не думаю, что это уместно здесь. В тот момент, когда rm впервые запрашивает защищенный от записи или любой другой файл, возможно, он уже удалил целую кучу важных файлов.
Лично я всегда думал, что -f требуется для удаления папок. Я даже открыл подсказку, чтобы подтвердить и пожаловаться, но узнал, что нужен только -r. Я полагаю, что rm -rf стал нормой, поскольку он так полезен в скрипте (вы же не хотите, чтобы скрипт потерпел неудачу только из-за того, что вы пытаетесь удалить несуществующие вещи), поэтому вы часто видите его, но я предположим, нам нужно проявлять бдительность, просто используя rm -r в качестве нашего «по умолчанию» в оболочке (понятно, что не должно быть предположений «по умолчанию», которые вы не понимаете, особенно с sudo, но люди будут людьми, и, по крайней мере, это безопаснее).
rm не запрашивает подтверждения по умолчанию, он запрашивает только каталоги и файлы, защищенные от записи. Если вы запустили эту команду на своем компьютере, вы, вероятно, удалили много своих собственных файлов. Если вам нужен rm для запроса подтверждения, вам нужно передать параметр -i. Например: rm -ir ./*
rm – это низкоуровневый системный инструмент. Эти инструменты построены максимально просто, поскольку они должны присутствовать в любой системе. Ожидается, что rm будет иметь хорошо известное поведение, особенно в отношении запросов подтверждения, чтобы его можно было использовать в скриптах.
Добавление специального регистра в запрос rm /* было бы невозможно, так как команда rm не видит его в этой форме. Подстановочный знак * расширяется оболочкой перед передачей в rm , поэтому фактическая команда, для которой требуется особый регистр, будет выглядеть примерно так: rm /bin /boot /dev /etc /home /initrd.img /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var /vmlinuz . Добавление кода для проверки этого случая (который, вероятно, будет отличаться в разных Linux) было бы сложной задачей, а также подвержено тонким ошибкам. Стандартный linux rm имеет защиту по умолчанию от разрушения системы, отказываясь удалять / без параметра --no-preserve-root.
По умолчанию существует три способа защиты от удаления вашей системы:
- Разрешения: обычные пользователи не смогут удалять важные файлы. Вы обошли это с помощью sudo
- Каталоги — по умолчанию rm не удаляет каталоги. Вы обошли это с помощью флага -r
- Запись файлов, защищенных от записи — по умолчанию rm будет запрашивать подтверждение перед удалением защищенного от записи файла (это не предотвратило бы все повреждения, но могло предоставить подсказку до того, как система станет невосстановимой). Вы обошли эту защиту с помощью флага -f
Чтобы удалить все содержимое папки, вместо запуска rm /path/to/folder/* выполните rm -rf /path/to/folder , затем mkdir /path/to/folder, так как это вызовет - -preserve-root защиту, а также удаление любых файлов точек в папке
"ожидается, что rm будет иметь хорошо известное поведение", и на самом деле это один из инструментов, указанных в стандарте POSIX. «he * wildcard расширяется оболочкой перед передачей в rm» Именно так, поэтому добавление проверок для всех типов параметров, которые могут быть символическими ссылками на фактические каталоги и файлы в /, потребует много комбинаций и соображений, поэтому это не практично . И возвращаясь к идее стандартов, добавление таких проверок нарушило бы согласованное поведение
Именно поэтому safe-rm является оболочкой rm : таким образом он может проверять каждый отдельный аргумент (а не всю случайную командную строку), проверять, что его нет в настраиваемом черном списке, и только затем вызывать rm с проверенными аргументами. Это не очень сложно и не подвержено ошибкам.
Работа без резервных копий означает, что вы должны быть предельно осторожны, чтобы не допустить ошибок. И надеюсь, что ваше оборудование никогда не выйдет из строя. (Даже RAID не может спасти вас от повреждения файловой системы, вызванного неисправной оперативной памятью.) Итак, это ваша первая проблема. (Я предполагаю, что вы это уже поняли и будете делать резервные копии в будущем.)
Но есть вещи, которые вы можете сделать, чтобы уменьшить вероятность подобных ошибок:
- псевдоним rm='rm -I' для запроса при удалении более 3 элементов.
- псевдоним mv и cp на mv -i и cp -i (многие обычные варианты их использования не предполагают перезапись целевого файла).
- alias sudo='sudo ' для расширения псевдонима в первом аргументе sudo
Я считаю, что rm -I намного полезнее, чем rm -i . Обычно он не запрашивает во время обычного использования, поэтому получение запроса, когда вы этого не ожидали, является гораздо более заметным / лучшим предупреждением. С -i (до того, как я обнаружил -I ), я привык набирать \rm для отключения расширения псевдонима, предварительно убедившись, что ввел команду правильно.
Вы не хотите привыкать полагаться на псевдонимы rm -i или -I, чтобы спасти себя. Это ваша линия безопасности, которой, как вы надеетесь, никогда не воспользуются. Если я действительно хочу в интерактивном режиме выбрать, какие совпадения удалить, или я не уверен, что мой глобус может соответствовать некоторым дополнительным файлам, я вручную набираю rm -i . /*что бы ни* . (Также хорошая привычка на случай, если вы когда-нибудь окажетесь в среде без псевдонимов).
Защититесь от жирных пальцев Enter, набрав сначала ls -d /*foo*, затем стрелку вверх и измените это на rm -r после того, как вы закончите печатать. Таким образом, командная строка никогда не содержит rm -rf ~/ или подобных опасных команд. Вы только «вооружите» его, изменив ls на rm с помощью control-a, alt-d, чтобы перейти к началу строки, и добавив -r или -f после того, как вы закончили вводить ~/some/sub/dir / часть команды.
В зависимости от того, что вы удаляете, на самом деле сначала запустите ls -d или нет, если это ничего не добавит к тому, что вы видите с завершением табуляции. Вы можете начать с rm (без -r или -rf ), поэтому это просто control-a / control-right (или alt+f) / space / -r .
(Привыкайте к мощным сочетаниям клавиш редактирования bash/readline для быстрого перемещения, таким как стрелки управления или alt+f/b для перемещения по словам, и уничтожайте целые слова с помощью alt+backspace или alt+d или control-w , И Ctrl-u, чтобы убить до начала строки.И Ctrl-/, чтобы отменить редактирование, если вы зашли слишком далеко.И, конечно же, стрелка вверх в истории, которую вы можете искать с помощью Ctrl-r/control-s. )
Избегайте использования -rf, если вам действительно не необходимо отключить запросы об удалении файлов, доступных только для чтения.
Потратьте дополнительное время, чтобы подумать, прежде чем нажимать клавишу возврата в команде sudo. Особенно, если у вас нет полных резервных копий, или сейчас неподходящее время для восстановления из них.
Иногда по какой-либо причине Windows убеждается, что данный файл используется программой, и предотвращает его удаление, перемещение или переименование. Эта блокировка файлов невероятно расстраивает, особенно когда вы знаете, что файл на самом деле не используется. Вот два способа обойти эту проблему.
1. Принудительное удаление с помощью Windows
Сначала откройте командную строку. Для этого начните с открытия меню «Пуск» (клавиша Windows), введите run и нажмите Enter. В появившемся диалоговом окне введите cmd и снова нажмите Enter.
Открыв командную строку, введите del /f имя_файла , где имя_файла — это имя файла или файлов (можно указать несколько файлов с помощью запятых), которые вы хотите удалить. В документации Microsoft более подробно описаны расширенные методы удаления с помощью этой команды.
Обратите внимание, что для удаления файла вам нужно либо указать полный путь к файлу, где вы заменили имя файла, либо перейти к папке, в которой он содержится, с помощью cd folderpath, а затем выполнить команду del. На изображении ниже показан пример последнего метода.
2. Использовать разблокировщик
Unlocker — бесплатная программа, упрощающая удаление заблокированных файлов. Он добавляет элемент контекстного меню в проводник Windows и может быть активирован щелчком правой кнопкой мыши. Это также позволяет пользователю переименовывать или перемещать заблокированный файл.
Читайте также: