Нещодавно я випадково зробив rm
набір файлів, і це змусило мене задуматися, де саме ці файли потрапляють?
Тобто при роботі з графічним інтерфейсом видалені файли переходять у кошик. Що таке еквівалент rm
і чи існує спосіб скасування rm
команди?
Нещодавно я випадково зробив rm
набір файлів, і це змусило мене задуматися, де саме ці файли потрапляють?
Тобто при роботі з графічним інтерфейсом видалені файли переходять у кошик. Що таке еквівалент rm
і чи існує спосіб скасування rm
команди?
Відповіді:
Нікуди, пішла, не зникала. Ну, точніше, файл від’єднується. Дані все ще сидять там на диску, але посилання на нього видалено. Раніше можна було отримати дані, але в даний час метадані очищаються і нічого не підлягає відновленню.
Немає для сміття rm
, а також не має бути. Якщо вам потрібен контейнер для сміття, вам слід використовувати інтерфейс більш високого рівня. У trash-cli
Ubuntu є утиліта командного рядка , але більшість часу файлові файли GUI, такі як Nautilus або Dolphin, використовуються для надання стандартної кошика для сміття. Кошик для сміття є самим стандартним. Файли, пошкоджені в Дельфіні, будуть видні у Кошику з Наутілуса.
Файли зазвичай переміщуються кудись, як ~/.local/share/Trash/files/
коли вони потрапляють у кошик. rm
Команда на UNIX / Linux порівнянна del
з DOS / Windows , який також видаляє і не НЕ переміщати файли в корзину. Інша річ, яку потрібно усвідомити, - це те, що переміщення файлу через файлові системи, наприклад, на ваш USB-диск з вашого жорсткого диска, - це дійсно 1) копія файлових даних, а потім 2) від’єднання вихідного файлу. Ви не хочете, щоб ваш смітник заповнювався цими додатковими копіями.
libtrash
щоб змінити поведінку rm. Багато сценаріїв використовується rm
для очищення файлів, і ви не хочете, щоб ті відображалися в кошику. Я рекомендую використовувати спеціальну команду, як trash
з trash-cli
пакета. @pedro Мені слід додати, що я колись створив файл * у своєму домашньому каталозі. Я випадково цитував * коли я не повинен створювати його, тому вирішив видалити його за допомогою rm * практично. Коли я зрозумів, що я зробив, я швидко вбив команду, але вона вже видалила ряд файлів з мого домашнього каталогу.
cp
, і mv
до cp -i
та mv -i
при запуску як root. Це змінює поведінку за замовчуванням, тому ці команди завжди запитуватимуть перед тим, як перезаписати наявні файли. Деякі системні адміністратори рекомендують спеціально видалити ці псевдоніми, щоб ви не сподівалися на те, що поведінка, яка може виявитися смертельною в іншій системі, яка дотримується поведінки за замовчуванням.
Для ext3 / ext4 ви можете спробувати відновити файли за допомогою таких інструментів, як extundelete або ext3grep , або навіть піти возитися зі структурами низького рівня вручну (не для слабкого серця); для багатьох файлових систем ви можете спробувати шукати ще не перезаписані блоки за певними шаблонами (наприклад, за допомогою Magicrescue , серед іншого, можна шукати заголовки JPEG). Зауважте, що вони використовують евристику для відновлення файлів із залишених метаданих, тому повне відновлення не гарантується - це скоріше ставка останнього шансу (оскільки ті вимагають, щоб деякі сліди файлів залишалися в журналі та щоб блоки були ще не були перезаписані).
Отже, для всіх намірів і цілей файли, вилучені з допомогою rm
, зникли - ви можете спробувати таку некромантичність, яку пропонують ці інструменти, але від цього не залежати: це інструменти, щоб спробувати, коли все інше не вдасться. Краще розкопайте свої останні резервні копії (ви робили резервні копії, правда? О, добре, живіть і вчіться ...).
Що стосується скасування ефектів rm
:
Зважаючи на те, що більшість файлових систем видаляють лише посилання на дані і вказують, що блоки є вільними, ви можете спробувати знайти свої дані для читання безпосередньо з пристрою. За трохи удачі на блоки, що містять ваш файл (и), не було заявлено про щось інше.
Це передбачає, що у вас є щось досить унікальне для пошуку, що у вас є root
в системі, і я здогадуюсь, зібрати разом все, що охоплює більше одного блоку файлової системи (можливо, 4 к), може закінчитися досить трудомістким, якщо файлова система не керувала розмістити файл (и) у суміжних блоках.
Я успішно відновив вміст пари простих текстових файлів, запустивши рядки на пристрої, на якому була файлова система, і за допомогою grep
пошуку чогось із цих файлів з великим контекстом ( -C
). (І незабаром після цього випадку компанія вирішила витратити деякі ресурси на реалізацію резервних копій)
magicrescue
які намагаються знайти зображення чи звуки за їх характерними шаблонами.
Кожного разу, коли ви видаляєте файл за допомогою rm
команди, його дані ніколи не видаляються. Іншими словами, блоки файлової системи, що містять дані, все ще є.
Що відбувається, коли ви запускаєте rm
команду, система позначає inode, що належить цьому файлу, як невикористаний, а блоки даних цього файлу також як невикористані (але не викреслені). Однак ext3
нулі більшості полів у inode, коли файл видаляється.
Це звичайне маркування невикористаного робиться для швидкості ... Інакше для видалення знадобиться ще трохи часу. Ось чому, можливо, ви зазначили, що видалення навіть великих файлів відбувається швидше (ви можете відновити дані, якщо ці блоки даних не будуть перезаписані).
Детальніше: Структура Inode , Як працює видалення файлів
chattr +s
атрибутом ("shred"). Це повідомляє файловій системі спеціально перезаписати цей файл з нулями при видаленні. Лише деякі файлові системи підтримують цей атрибут.
У файлових системах у стилі Unix (у тому числі в Linux) файли насправді не знаходяться в будь-якому конкретному місці. Натомість система використовує жорсткі посилання, щоб вказати на фрагменти того, що становить велику кількість даних. Отже, коли ви створюєте файл, ви також створюєте його перше жорстке посилання: той, який фактично знаходиться в місці, де ви "зберегли" файл. Якщо ви робите більше жорстких посилань, то, наскільки система знає, файл насправді існує відразу в декількох місцях.
Коли ви "видаляєте" файл, зазвичай ви видаляєте лише тверде посилання, яке існувало у вказаному вами місці. Ось чому викликається системний виклик для видалення файлів unlink()
. Система фактично не видалить файл, доки не залишиться жорстких посилань. Але як тільки це останнє жорстке посилання знищено, так це і дані.
Отже, куди йдуть файли, які ви видаляєте? Якщо є ще жорсткі посилання, вони містять файли, де б не були видалені жорсткі посилання. Якщо жодних жорстких посилань не залишилося, файли не будуть.