Рейтинг:3

Что произойдет, если мы сделаем rm -rf ../**? Можем ли мы восстановить данные?

флаг us
xxz

Я сделал что-то вроде:

$ cd /A/B/
$ rm -rf ./*
$ rm -rf ../**

Из-за проблем с сетью моя система отключилась от Ubuntu. Когда я вернулся, в папке не было ни файлов, ни папок. папка.

user535733 avatar
флаг cn
Использование rm для экспериментов с локациями `.` и `..` кажется глупым способом выяснить, что это за локации и как их использовать. Существует много лучших, неразрушающих способов узнать о них.
флаг jp
Второй `*` в `../**` избыточен. `*` означает все файлы и папки, соответствующие любому шаблону. например. `a*b` может быть чем угодно, начинающимся с a и заканчивающимся на b. Когда вы говорите `**`, вы говорите "соответствует 0 или более любых символов и соответствует 0 или более любым символам". Хотя `**` соответствует всем подкаталогам, это уже было обработано `rm -r`.
code_dredd avatar
флаг cn
Если не считать использования программного обеспечения для цифровой криминалистики для восстановления данных, нет, вы ничего не можете сделать для восстановления поврежденных данных. Это похоже на нажатие Shift+Del в Windows — корзины нет. Как правило, полезно проверить документацию команды, прежде чем приступать к экспериментам, в которых речь идет о ваших данных. **TL;DR:** Ты облажался :(
marcelm avatar
флаг cn
В заголовке вопроса говорится о `./*`, но именно `../**` вызвало проблемы с OP. Название вопроса следует отредактировать, чтобы оно лучше отражало это. (Я бы отредактировал, но пост уже некоторое время находится в ожидании редактирования)
флаг ng
Кажется, я припоминаю явные предупреждения в самых ранних книгах по Unix о том, что нельзя делать подобные вещи, особенно `sudo rm -rf /*` . «Все старое снова новое»
флаг us
@AdamOutler Ваш анализ glob `**` недействителен для большинства современных оболочек. Взгляните [здесь] (https://stackoverflow.com/questions/28176590/what-do-double-asterisk-wildcards-mean).
флаг jp
@doneal24, если вы `rm -rf ../*` или `rm -rf ../**`, он удалит все файлы и папки в каталоге над вашим текущим каталогом. Не уверен, о чем ты говоришь.
флаг us
@AdamOutler Подстановочные знаки `./*` и './**` расширяются по-разному. `**` означает не то, что вы думаете. Практический эффект в примере `rm -rf` нулевой, но ваше объяснение неверно.
Рейтинг:22
флаг ng

г.м. удаляет файлы. Он не помещает их в корзину, поэтому их нельзя восстановить обычными методами.

Так же -рф тег делает две вещи:

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

-f тег означает сила, что означает, что операция завершится без дальнейших запросов.

Чтобы ответить на ваш вопрос о синтаксисе, помните, что ./ это путь к текущему каталогу и ../ - это путь к «родительскому» каталогу (путь над текущим каталогом).

Итак, если вы запустите рм -рф ../* находясь под /А/Б/, то вы удаляете все под /А/.

Если вы собираетесь использовать рм -рф, имейте в виду, что это очень мощная команда, которая без разбора и навсегда удалит все по указанному вами пути.

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

Лучший путь — восстановление из резервных копий.

xxz avatar
флаг us
xxz
спасибо, я хочу сказать, я сделал rm в месте B. но как файлы ушли в место А. я не понял. вы видите мой вопрос для того же
Nmath avatar
флаг ng
Отредактировано, чтобы включить более подробную информацию о синтаксисе пути. См.: https://superuser.com/a/54030.
флаг cn
Однажды я хотел ввести `rm var -rf`, но случайно набрал `rm /var -rf`, поэтому я удалил большой системный каталог вместо подкаталога веб-сайта. Эта команда может быть очень разрушительной при малейшей ошибке. Кроме того, если бы я не был root, команда не удалась, так что есть еще один урок. К счастью, это была всего лишь виртуальная машина.
флаг us
@xxz У вас был `/A/B` в качестве рабочего каталога, но вы сказали rm удалить `../**`, например, файлы и каталоги на один уровень выше.
Akbarkhon Variskhanov avatar
флаг mx
@Rodney, это именно то, что всегда полезно сначала запустить что-то вроде `ls -1` для аргументов.
Рейтинг:10
флаг vn

Когда вы бежите рм -рф ../** в каталоге /А/Б, он возвращается в каталог и удаляет все там, так как .. является родительским каталогом.

Если вы хотите иметь возможность «восстанавливать» данные, вам следует рассмотреть возможность запуска файловой системы с включенными активными моментальными снимками.

Обе ЗФС и БТРФС реализованы моментальные снимки, и можно настроить автоматические моментальные снимки.

Если вы, например, настроили ежечасные снимки за последние 24 часа и ежедневные снимки за последние 14 дней, вы можете в любое время вернуться к любому из этих снимков для данной файловой системы.

Точная конфигурация автоматических моментальных снимков зависит от выбранной файловой системы.

Причина, по которой это «просто работает», заключается в том, что обе файловые системы реализуют «копирование при записи», когда каждое изменение в файловой системе записывается в новое место, поэтому никакие данные не удаляются до тех пор, пока не истечет срок действия снимков и указателей на старые данные.

Рейтинг:0
флаг cn

Что вы на самом деле сделали, так это (../**).

как вы можете видеть, вы ставите двойную точку в данной команде, которая удаляет все, что идет до вашего рабочего DIR.

Теперь давайте посмотрим, как это работает. Просто представьте, что у нас есть каталог местоположений с именем XYZ,

# пароль
/
# мкдир XYZ

# компакт-диск XYZ

# пароль
/XYZ

В соответствии с приведенной выше командой я создал каталог. который можно рассматривать как -> /A/B

теперь, когда вы запустите указанную ниже команду, она удалит все только в рабочем каталоге /XYZ

рм -рф ./**

Но когда вы запускаете ту же команду со значком с двойной точкой, сама команда изменит свое местоположение в рабочем каталоге и удалит все, что идет до / XYZ, только оттуда, но поскольку пользователь работает в папке, которая существует в этом каталоге, который получает удалите в это время только эту папку, и все будет удалено.

Довольно сложно сказать, можете ли вы восстановить свои данные или нет, но вы можете использовать photorec, который поможет вам восстановить ваши данные, но он случайным образом изменит имя файлов восстановления, поэтому, если вы знаете, что там было, вы можете иначе, я так не думаю Вы можете восстановить свои данные.

надеюсь, что это ответ на ваш вопрос.

Рейтинг:0
флаг in

Вы рекурсивно удаляете файлы и папки из папки. В одном случае родительская папка.

Было бы немного лучше, если бы вы сказали нам, где вы были, но если это важно, то вы, вероятно, находитесь где-то в /home, /opt или /var, поскольку в других местах есть стандартные имена, которыми вы не должны бояться делиться.

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

В этом случае вы можете подключить диск к другой машине для восстановления.

Я ожидаю, что у вас есть резервные копии основных деревьев. В облаке (и даже локально) вы можете вернуться к недавнему образу всего диска и просто восстановить /home, /var и все, что вы зарезервировали, как относительно изменчивое.

NB. - восстановление дерева с помощью cp или rsync может быть фактически дефрагментацией.

Ответить или комментировать

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