Куди йдуть файли, коли видається команда rm?


98

Нещодавно я випадково зробив rmнабір файлів, і це змусило мене задуматися, де саме ці файли потрапляють?

Тобто при роботі з графічним інтерфейсом видалені файли переходять у кошик. Що таке еквівалент rmі чи існує спосіб скасування rmкоманди?


3
ось можливий дублікат. скасувати на Linux . Але я не дуже впевнений, що так, куди йдуть файли, зовсім інше, ніж є спосіб скасування.
ксенотерацид

Відповіді:


120

Нікуди, пішла, не зникала. Ну, точніше, файл від’єднується. Дані все ще сидять там на диску, але посилання на нього видалено. Раніше можна було отримати дані, але в даний час метадані очищаються і нічого не підлягає відновленню.

Немає для сміття rm, а також не має бути. Якщо вам потрібен контейнер для сміття, вам слід використовувати інтерфейс більш високого рівня. У trash-cliUbuntu є утиліта командного рядка , але більшість часу файлові файли GUI, такі як Nautilus або Dolphin, використовуються для надання стандартної кошика для сміття. Кошик для сміття є самим стандартним. Файли, пошкоджені в Дельфіні, будуть видні у Кошику з Наутілуса.

Файли зазвичай переміщуються кудись, як ~/.local/share/Trash/files/коли вони потрапляють у кошик. rmКоманда на UNIX / Linux порівнянна delз DOS / Windows , який також видаляє і не НЕ переміщати файли в корзину. Інша річ, яку потрібно усвідомити, - це те, що переміщення файлу через файлові системи, наприклад, на ваш USB-диск з вашого жорсткого диска, - це дійсно 1) копія файлових даних, а потім 2) від’єднання вихідного файлу. Ви не хочете, щоб ваш смітник заповнювався цими додатковими копіями.


4
Дуже дякую за чітке пояснення. Я не проти використовувати CLI, мені потрібно бути трохи обережнішими при використанні марок. :)
boehj

16
Я б з обережністю використовував щось подібне, libtrashщоб змінити поведінку rm. Багато сценаріїв використовується rmдля очищення файлів, і ви не хочете, щоб ті відображалися в кошику. Я рекомендую використовувати спеціальну команду, як trashз trash-cliпакета. @pedro Мені слід додати, що я колись створив файл * у своєму домашньому каталозі. Я випадково цитував * коли я не повинен створювати його, тому вирішив видалити його за допомогою rm * практично. Коли я зрозумів, що я зробив, я швидко вбив команду, але вона вже видалила ряд файлів з мого домашнього каталогу.
penguin359

4
Дуже рідко є щось подібне до смітника в оболонці, тому якщо ви додасте його на локальній машині і звикнете до нього або навіть залежатимете від цього у своїй щоденній роботі. Ви можете потрапити в проблеми, коли використовуєте деякі інші 99% unix: s без одного ...
Йохан

3
Я думаю, що повідомлення про те, що я приймаю додому, полягає в тому, що мені потрібно припинити CLI'ing у вихідні години та приділити більше уваги.
boehj

2
У тому ж рядку, що і те, що сказав @Johan, RedHat раніше (все-таки робить?) Встановлював псевдоніми для команд, таких як cp, і mvдо cp -iта mv -iпри запуску як root. Це змінює поведінку за замовчуванням, тому ці команди завжди запитуватимуть перед тим, як перезаписати наявні файли. Деякі системні адміністратори рекомендують спеціально видалити ці псевдоніми, щоб ви не сподівалися на те, що поведінка, яка може виявитися смертельною в іншій системі, яка дотримується поведінки за замовчуванням.
penguin359

11

Для ext3 / ext4 ви можете спробувати відновити файли за допомогою таких інструментів, як extundelete або ext3grep , або навіть піти возитися зі структурами низького рівня вручну (не для слабкого серця); для багатьох файлових систем ви можете спробувати шукати ще не перезаписані блоки за певними шаблонами (наприклад, за допомогою Magicrescue , серед іншого, можна шукати заголовки JPEG). Зауважте, що вони використовують евристику для відновлення файлів із залишених метаданих, тому повне відновлення не гарантується - це скоріше ставка останнього шансу (оскільки ті вимагають, щоб деякі сліди файлів залишалися в журналі та щоб блоки були ще не були перезаписані).

Отже, для всіх намірів і цілей файли, вилучені з допомогою rm, зникли - ви можете спробувати таку некромантичність, яку пропонують ці інструменти, але від цього не залежати: це інструменти, щоб спробувати, коли все інше не вдасться. Краще розкопайте свої останні резервні копії (ви робили резервні копії, правда? О, добре, живіть і вчіться ...).


2
Для текстових даних з високою цінністю ви завжди можете використовувати будь-який надійний інструмент загального призначення (навіть emacs або perl), щоб подивитися на "необроблений пристрій" для диска, що містив видалений файл, і шукати відомі рядки; Я таким чином відновив документи Word для людей; вони втрачають націнку, але можуть відновити більшу частину тексту. Очевидно, це відновлення після аварій, а не "Скасувати".
alexis

Правильне посилання "вручну": web.archive.org/web/20131221183925/http://…
sjas

8

Що стосується скасування ефектів rm:

Зважаючи на те, що більшість файлових систем видаляють лише посилання на дані і вказують, що блоки є вільними, ви можете спробувати знайти свої дані для читання безпосередньо з пристрою. За трохи удачі на блоки, що містять ваш файл (и), не було заявлено про щось інше.

Це передбачає, що у вас є щось досить унікальне для пошуку, що у вас є rootв системі, і я здогадуюсь, зібрати разом все, що охоплює більше одного блоку файлової системи (можливо, 4 к), може закінчитися досить трудомістким, якщо файлова система не керувала розмістити файл (и) у суміжних блоках.

Я успішно відновив вміст пари простих текстових файлів, запустивши рядки на пристрої, на якому була файлова система, і за допомогою grepпошуку чогось із цих файлів з великим контекстом ( -C). (І незабаром після цього випадку компанія вирішила витратити деякі ресурси на реалізацію резервних копій)


Це дещо складніше, наприклад, шляхом ext3 обнулення блокових покажчиків у inode, але так, пошук файлів безпосередньо може спрацювати - якщо вони достатньо малі або виділені у суміжний блок. Іноді це називається різьбленням файлів, і є такі інструменти, magicrescueякі намагаються знайти зображення чи звуки за їх характерними шаблонами.
Пісквор

6

Кожного разу, коли ви видаляєте файл за допомогою rmкоманди, його дані ніколи не видаляються. Іншими словами, блоки файлової системи, що містять дані, все ще є.

Що відбувається, коли ви запускаєте rmкоманду, система позначає inode, що належить цьому файлу, як невикористаний, а блоки даних цього файлу також як невикористані (але не викреслені). Однак ext3нулі більшості полів у inode, коли файл видаляється.

Це звичайне маркування невикористаного робиться для швидкості ... Інакше для видалення знадобиться ще трохи часу. Ось чому, можливо, ви зазначили, що видалення навіть великих файлів відбувається швидше (ви можете відновити дані, якщо ці блоки даних не будуть перезаписані).

Детальніше: Структура Inode , Як працює видалення файлів


... якщо файл явно не позначений chattr +sатрибутом ("shred"). Це повідомляє файловій системі спеціально перезаписати цей файл з нулями при видаленні. Лише деякі файлові системи підтримують цей атрибут.
telcoM

3

У файлових системах у стилі Unix (у тому числі в Linux) файли насправді не знаходяться в будь-якому конкретному місці. Натомість система використовує жорсткі посилання, щоб вказати на фрагменти того, що становить велику кількість даних. Отже, коли ви створюєте файл, ви також створюєте його перше жорстке посилання: той, який фактично знаходиться в місці, де ви "зберегли" файл. Якщо ви робите більше жорстких посилань, то, наскільки система знає, файл насправді існує відразу в декількох місцях.

Коли ви "видаляєте" файл, зазвичай ви видаляєте лише тверде посилання, яке існувало у вказаному вами місці. Ось чому викликається системний виклик для видалення файлів unlink(). Система фактично не видалить файл, доки не залишиться жорстких посилань. Але як тільки це останнє жорстке посилання знищено, так це і дані.

Отже, куди йдуть файли, які ви видаляєте? Якщо є ще жорсткі посилання, вони містять файли, де б не були видалені жорсткі посилання. Якщо жодних жорстких посилань не залишилося, файли не будуть.


0

Перегляньте також ~ / .snapshot, якщо файл нещодавно видалено.


4
Це буде працювати лише в тому випадку, якщо у вас є якась магічна файлова система, яка забезпечує цю функцію (наприклад, NetApp) або якщо ви використовуєте спеціальну версію rm.
mattdm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.