Как безопасно удалить файлы в Linux (чтобы они точно исчезли)
Вы удалили файл. Но действительно ли он исчез?
В Linux нажатие клавиши Delete или запуск программы rmне удаляет ваши данные. Это просто удаляет указатель на них. Сами байты остаются на диске, иногда на несколько дней, иногда навсегда, пока что-нибудь другое их не перезапишет.
Это важно, если вы пытаетесь удалить конфиденциальную фотографию, личный документ, файл с паролем или что-либо еще, что вы не хотите, чтобы кто-либо восстановил.
В этой статье мы объясним, как работает удаление файлов в Linux и почему «удалено» не всегда означает «исчезло». Затем вы узнаете о различных способах безопасного удаления файлов как с жестких дисков (HDD), так и с твердотельных накопителей (SSD) в Linux.
Краткое резюме
- Для окончательного удаления файлов с жесткого диска, использующего файловые системы ext4 или xfs, используйте
shred -uzn 3 /path/to/fileинструментарийsecure-delete(srm,sfill,sswap,smem) для более тщательной очистки. - Удаление файлов на SSD (любой файловой системе) безвозвратно: используйте
rmкоманду для удаления, затем запустите командуsudo fstrim -av, чтобы дать указание диску стереть освобожденные блоки. - В файловой системе btrfs: используйте команду
rm, затем удалите все снимки Snapper или Timeshift, которые захватили этот файл, после чего выполните командуsudo fstrim -av. - Для всего: очистите кэш миниатюр, проверьте синхронизацию с облаком и удалите файл подкачки, если ваша система использовала его во время открытия файла.
- Для максимальной защиты: перед сохранением конфиденциальных данных настройте полное шифрование диска с помощью LUKS.
Не уверены, какой из способов подходит вам? Запустите команду lsblk -f, чтобы посмотреть вашу файловую систему и cat /sys/block/sda/queue/rotational проверить тип вашего жесткого диска (0 = SSD, 1 = HDD). Полное руководство ниже пошагово объясняет каждый метод.
1. Почему простого «удаления» файла недостаточно.
Большинство людей считают, что после удаления файл исчезает навсегда. В Linux это просто не так, по крайней мере, не сразу.
Представьте свой жесткий диск как библиотеку. Когда вы «удаляете» книгу, библиотека просто удаляет ее запись из каталога. Книга остается на полке. Любой, кто знает, где искать, все еще может ее прочитать.
Такие инструменты rm, как корзина в GNOME или KDE, и даже код unlink() — все они делают одно и то же. Они удаляют запись в каталоге, указывающую на inode файла, но оставляют исходные данные на диске до тех пор, пока операционная система не решит записать туда что-нибудь еще.
Для обычных файлов это нормально. Но для конфиденциальных данных это серьезная проблема.
2. Что на самом деле происходит при удалении файла?
Вот что делает Linux шаг за шагом при запуске rm:
- Это удаляет запись в каталоге, которая связывает имя файла с его inode.
- Это уменьшает количество ссылок в inode на единицу.
- Если счетчик ссылок достигает нуля и ни один процесс не открыл файл, inode помечается как свободный.
- Блоки данных, занимаемые файлом, возвращаются в пул свободных блоков, но не удаляются.
Таким образом, данные остаются нетронутыми, ожидая перезаписи. В системе, используемой нечасто, это ожидание может быть очень долгим.
Простая программа для восстановления данных, например testdisk, photorecможет извлечь эти данные за считанные минуты.
3. Ознакомьтесь со своей конфигурацией, прежде чем начать.
Правильный метод удаления зависит от двух факторов: вашей файловой системы и типа вашего накопителя. Неправильный метод может создать ложное впечатление, что данные удалены, хотя это не так. Поэтому, прежде чем запускать какие-либо команды, уделите немного времени, чтобы понять, как ваше оборудование на самом деле хранит данные.
Традиционные жесткие диски (HDD)
Механические жесткие диски записывают данные на вращающиеся магнитные пластины. При обычном удалении файла Linux просто удаляет запись в каталоге, указывающую на данные этого файла, подобно тому, как если бы вы сорвали этикетку с коробки, не опустошив ее.
Фактические данные остаются на диске до тех пор, пока что-то новое их не перезапишет. Это означает, что безопасное удаление данных с жесткого диска довольно простое: вы перезаписываете данные случайным мусором, и они исчезают.
Современные твердотельные накопители (SSD)
В твердотельных накопителях (SSD) используются микросхемы флэш-памяти вместо вращающихся пластин. Из-за способа распределения записи по ячейкам контроллерами SSD для управления износом — процесса, называемого выравниванием износа , — невозможно надежно выбрать и перезаписать один конкретный файл.
Контроллер определяет, куда физически попадают данные, и вы не можете повлиять на это на уровне операционной системы.
Стандартные инструменты для уничтожения файлов не работают на SSD-накопителях, а их многократный запуск может даже сократить срок службы диска из-за лишних циклов записи.
Вместо этого правильный подход — это аппаратная команда TRIM , которая дает SSD-накопителю сигнал об удалении блоков, помеченных операционной системой как свободные.
Это различие лежит в основе каждого метода, описанного в данном руководстве. Теперь давайте выясним, с чем именно вы работаете.
Сначала определите тип вашей файловой системы :
df -T /home
# или
lsblk -f
Затем проверьте тип вашего жесткого диска :
cat /sys/block/sda/queue/rotational
Замените «sda» на название вашего устройства (nvme0n1, sdb и т. д.).
Если приведенная выше команда возвращает 0, это SSD. Если вывод равен 1, то это HDD.
Вот таблица для быстрого принятия решений:
| Файловая система | Хранилище | Лучший метод |
|---|---|---|
| ext4, xfs | HDD | набор инструментов shredили secure-delete |
| ext4, xfs | SSD | rm+fstrim |
| btrfs | SSD или HDD | rm+ очистка снимков +fstrim |
| Любой | Любой | Полное шифрование диска (наилучший вариант в долгосрочной перспективе) |
Достаточно сказано. Теперь давайте рассмотрим методы, которые можно использовать для безопасного удаления файлов в Linux и сделать их практически невосстановимыми.
4. Метод 1: Жесткие диски с файловой системой ext4 — Использование shredилиsecure-delete
Если у вас жесткий диск с файловой системой ext4 или xfs, у вас есть два надежных варианта: встроенная shredкоманда или более функциональный набор инструментов secure-delete. Оба варианта перезаписывают блоки данных файла несколько раз, прежде чем удалить их, что значительно затрудняет восстановление.
Важное примечание: эти инструменты надежно работают только на файловых системах, в которых данные записываются на месте. На файловых системах с копированием при записи, таких как btrfs, оба инструмента shred и secure-deleteнеэффективны. Перейдите к методу 3, если вы используете btrfs. А на SSD-накопителях перейдите к методу 2, там ни один из инструментов не работает должным образом.
Вариант А: shred(Встраиваемый, установка не требуется)
Пакет shred входит в состав каждого дистрибутива Linux как часть GNU coreutils. Вам ничего устанавливать не нужно.
Удалить один файл:
shred -uzn 3 /path/to/file
Вот что делает каждый флаг:
-u. Удалите файл после перезаписи (например,rm)-z. Добавьте заключительный проход нулей, чтобы скрыть процесс измельчения.-n 3. Перезапись 3 раз (3 — значение по умолчанию; вы можете уменьшить его,-n 1поскольку одного прохода достаточно для большинства современных жестких дисков).
Внимание пользователям ext4: если ваш раздел ext4 смонтирован в data=journalрежиме shred, shredэто менее эффективно, поскольку журнал записывает данные о записи файлов. Большинство систем используют режим по умолчанию data=ordered, в котором shred работает нормально. Чтобы проверить режим монтирования, запустите команду findmnt -o TARGET,OPTIONS /и найдите data=значение в столбце options.
Удалите целую директорию:
find /path/to/folder -type f -exec shred -uzn 3 {} \;
rmdir /path/to/folder
Вариант B: Набор инструментов secure-delete (более подробный, включает в себя свободное пространство и функцию обмена).
secure-delete — специализированный пакет, предоставляющий четыре отдельных инструмента: один для файлов, один для свободного места на диске, один для файла подкачки и один для оперативной памяти. Вместе они охватывают все области, где могут храниться ваши данные.
Сначала установите secure-delete:
# Debian, Ubuntu, Linux Mint, Pop!_OS sudo apt install secure-delete # Fedora sudo dnf install secure-delete
srm — Безопасное удаление файлов и папок
srm работает аналогично rm, но перезаписывает данные перед их удалением.
Применение:
# Удаление одного файла sudo srm /path/to/file
# Удаление папки и всего содержимого в ней sudo srm -r /path/to/folder
Полезные флаги:
-r: Рекурсивный (для каталогов)-v: Подробный (показывает прогресс)-z: Финальный проход с нулями вместо случайных данных.-l: Более быстрый, но менее безопасный режим (используйте только в том случае, если скорость важнее тщательности).
sfill— Очистите свободное место на вашем диске
Этот шаг shredпросто невозможен. После обычного удаления файлов их блоки данных остаются в пуле свободного пространства, ожидая перезаписи. Программа sfillзаполняет всё это свободное пространство случайными данными, стирая все следы ранее удалённых файлов.
Применение:
# Очистить свободное место на разделе, содержащем /home sudo sfill /home # Или указать любую точку монтирования sudo sfill /
Примечание: sfill на больших дисках это может занять много времени. Запустите программу на ночь, если вам нужно очистить большой раздел. Избегайте запуска на активно используемом разделе, так как это повлияет на производительность системы.
sswap— Надежно очистите раздел подкачки
Если Linux подкачал части конфиденциального файла на диск, пока система испытывала нехватку памяти, эти данные останутся в разделе подкачки даже после удаления файла. Программа sswapкорректно удалит их.
Сначала найдите свой раздел подкачки:
cat /proc/swaps
Пример вывода указанной выше команды в моей системе:
Имя файла Тип Размер Использовано Приоритет /dev/sda3 раздел 2097148 25144 -1
Как вы видите выше, мой раздел подкачки — это /dev/sda3 .
Затем отключите файл подкачки, очистите его и снова включите:
sudo swapoff /dev/sda3 # замените на ваш раздел подкачки sudo sswap /dev/sda3 sudo swapon /dev/sda3
smem — Очистить конфиденциальные данные из оперативной памяти
smemПерезаписывает неиспользуемые участки оперативной памяти, которые могут содержать фрагменты недавно открытых файлов или расшифрованные данные.
По умолчанию выполняется 38 проходов, поэтому на системах с большим объемом оперативной памяти это может занять несколько минут и временно снизит производительность системы во время работы. Запускайте программу, когда ваша система не используется.
sudo smem
После использования любого из этих вариантов также очистите Корзину:
rm -rf ~/.local/share/Trash/files/* rm -rf ~/.local/share/Trash/info/*
5. Метод 2: SSD-накопители — почему shredони выходят из строя и что делать вместо них.
На твердотельных накопителях (SSD) shredэто работает не так, как заявлено. Потому что в SSD используется технология, называемая выравниванием износа. Контроллер SSD намеренно распределяет операции записи по множеству ячеек, чтобы продлить срок службы накопителя.
При shredпопытке перезаписать блок контроллер часто записывает «перезапись» в совершенно другую физическую ячейку, оставляя исходные данные нетронутыми.
Таким образом, вместо уничтожения файлов на SSD-накопителях вы можете безопасно и навсегда удалить их следующим образом:
Шаг 1: Удалите файл и очистите корзину.
rm /path/to/file rm -rf ~/.local/share/Trash/files/* rm -rf ~/.local/share/Trash/info/*
Шаг 2: Убедитесь, что ни один процесс больше не удерживает файл открытым:
sudo lsof | grep deleted
Если какой-либо процесс отобразится, запишите его PID и закройте приложение. Затем выполните:
sudo kill <PID>
Шаг 3: Запустите TRIM, чтобы дать указание SSD удалить освобожденные блоки:
sudo fstrim -av
Для тех, кто интересуется, команда TRIM сообщает SSD-накопителю: «Эти блоки теперь свободны, вы можете их удалить».
Большинство современных SSD-накопителей автоматически запускают функцию TRIM по еженедельному расписанию fstrim.timer, но запуск вручную гарантирует её немедленное выполнение.
Шаг 4: Убедитесь, что функция TRIM включена в вашей системе:
sudo systemctl status fstrim.timer
Если эта функция неактивна, включите её:
sudo systemctl enable --now fstrim.timer
6. Метод 3: BTRFS (копирование при записи) — самый сложный случай
BTRFS — это современная, многофункциональная файловая система, которую предпочитают многие пользователи Arch Linux и Fedora. Однако она использует механизм копирования при записи (CoW) , что делает безопасное удаление более сложным, чем в ext4.
Вот в чем основная проблема: btrfs никогда не перезаписывает данные на месте. Каждый раз, когда вы изменяете файл, btrfs записывает новую версию в новое место и помечает старые блоки как свободные, но не удаляет их.
Когда shredсистема пытается перезаписать файл, механизм CoW снова срабатывает и записывает проходы shred в новые места, оставляя исходные блоки данных совершенно нетронутыми в пуле свободных блоков.
Именно поэтому shredон неэффективен на файловой системе btrfs. Он никогда не затрагивает исходные данные, независимо от количества проходов.
Если вы используете btrfs, выполните следующие действия:
Шаг 1: Удалите файл и корзину:
rm /path/to/file rm -rf ~/.local/share/Trash/files/* rm -rf ~/.local/share/Trash/info/*
Шаг 2: Проверьте и удалите снимки состояния (это критически важный шаг, который большинство людей пропускают):
Если вы используете Snapper или Timeshift , ваш файл может всё ещё существовать в старом снимке. Эти снимки представляют собой независимые копии вашего подтома на определённый момент времени.
# Вывод списка всех снимков (Snapper) sudo snapper list # Удаление конкретного снимка sudo snapper delete <номер снимка> # Или вывод списка подтомов btrfs вручную sudo btrfs subvolume list / # Удаление снимка конкретного подтома sudo btrfs subvolume delete /.snapshots/<номер>/snapshot
Удалите все снимки, сделанные после создания файла. Любые снимки, сделанные до появления файла, можно сохранить.
Шаг 3: Убедитесь, что ни один процесс не удерживает файл:
sudo lsof | grep deleted
Шаг 4: Запустите TRIM:
sudo fstrim -av
7. Не забудьте очистить снимки, миниатюры и облачное хранилище.
Даже после удаления файла с основного хранилища, его копии могут скрываться в неожиданных местах. Вот наиболее распространенные места, которые следует проверить.
Кэш миниатюр
Ваш файловый менеджер или программа для просмотра изображений, вероятно, создали небольшую миниатюру файла и сохранили её отдельно. Удалите эти кэш-файлы:
# GNOME / большинство рабочих столов rm -rf ~/.cache/thumbnails/ # Shotwell rm -rf ~/.cache/shotwell/ # gThumb rm -rf ~/.cache/gthumb/
Сервисы облачной синхронизации
Если вы используете Nextcloud, Syncthing , rclone или любой другой инструмент синхронизации, файл, возможно, уже был загружен. Войдите в эти сервисы напрямую и удалите файл там же. Проверьте также корзину или историю версий.
Кэши приложений
Некоторые приложения, такие как GIMP, Darktable и Shotwell, хранят собственные копии или историю редактирования изображений. Проверьте папку кэша каждого приложения в соответствующих ~/.cache/<appname>/разделах ~/.local/share/<appname>/.
Пространство обмена
Если в момент открытия файла в вашей системе наблюдалась нехватка памяти, возможно, Linux выгрузил часть файла на диск. Самый быстрый способ это исправить:
# Сначала проверьте, достаточно ли у вас свободной оперативной памяти free -h # Затем отключите и снова включите файл подкачки, чтобы очистить его sudo swapoff -a && sudo swapon -a
Если вы используете жесткий диск и уже установили secure-deleteпрограмму, воспользуйтесь sswapдругой. Она обеспечивает более тщательное удаление. Точные шаги описаны в разделе «Безопасное удаление» выше.
8. Как проверить, удален ли файл.
После выполнения описанных выше шагов проверьте правильность своей работы. Не стоит просто предполагать, что всё получилось.
Убедитесь, что файл больше не существует:
ls -la /path/to/file # Ожидалось: "Такого файла или каталога не существует"
Проверьте, не удерживает ли процесс его открытым:
sudo lsof | grep deleted # Ожидалось: нет вывода
Убедитесь, что ни один снимок его не содержит:
sudo btrfs subvolume list / # Ожидалось: не осталось соответствующих записей моментальных снимков
Подтвердите, что функция TRIM успешно выполнилась:
sudo journalctl -u fstrim --since "1 hour ago" # Ожидается: записи, показывающие успешную обрезку вашего устройства
Попробуйте восстановить файл самостоятельно:
# Debian, Ubuntu, Linux Mint, Pop!_OS sudo apt install testdisk # Fedora sudo dnf install testdisk # Arch Linux sudo pacman -S testdisk # openSUSE sudo zypper install testdisk sudo photorec
Укажите путь photorecк вашему разделу и запустите сканирование. Если программа не сможет найти файл, то и обычный злоумышленник со стандартными инструментами его найти не сможет. Это лучшее практическое подтверждение.
9. Полное шифрование диска
На SSD-накопителях и в файловых системах CoW безопасное удаление всегда является попыткой, но не гарантией. Контроллер SSD полностью контролирует физическое местоположение ваших данных, и вы не можете изменить это на уровне операционной системы.
Единственный способ обеспечить по-настоящему надежную защиту данных — это зашифровать диск с самого начала с помощью LUKS (Linux Unified Key Setup). Когда весь диск зашифрован:
- Даже если кто-то извлечет физический накопитель, он увидит только зашифрованный шум.
- «Удаление» файла означает потерю ключа для его расшифровки. Восстановление становится вычислительно нецелесообразным при использовании современных технологий.
Чтобы настроить шифрование LUKS на новом разделе:
sudo cryptsetup luksFormat /dev/sdX sudo cryptsetup open /dev/sdX my_encrypted_drive sudo mkfs.ext4 /dev/mapper/my_encrypted_drive
Это сложная конфигурация, и она лучше всего работает, если её планировать с момента установки Linux, а не добавлять позже. Однако, если вы регулярно работаете с конфиденциальными данными, это стоит сделать.
10. Краткий справочник: Безопасное удаление файлов в Linux
HDD + ext4 (используя shred)
shred -uzn 3 /path/to/file
rm -rf ~/.local/share/Trash/{files,info}/*
rm -rf ~/.cache/thumbnails/
HDD + ext4 (используется secure-delete— более тщательный обзор)
sudo srm /path/to/file # безопасное удаление одного файла
sudo srm -r /path/to/folder # или папки
sudo sfill /home # удаление оставшихся следов в свободном пространстве
sudo swapoff /dev/sdaX && sudo sswap /dev/sdaX && sudo swapon /dev/sdaX
sudo smem # очистка фрагментов ОЗУ (выполняется, когда система простаивает)
rm -rf ~/.local/share/Trash/{files,info}/*
rm -rf ~/.cache/thumbnails/
SSD (любая файловая система, кроме btrfs)
rm /path/to/file
rm -rf ~/.local/share/Trash/{files,info}/*
rm -rf ~/.cache/thumbnails/
sudo lsof | grep deleted
sudo fstrim -av
SSD + btrfs (Arch, Fedora, openSUSE, Ubuntu 24.04+)
rm /path/to/file
rm -rf ~/.local/share/Trash/{files,info}/*
rm -rf ~/.cache/thumbnails/
sudo snapper list # проверить наличие снимков
sudo snapper delete <number> # удалить соответствующие
sudo lsof | grep deleted
sudo fstrim -av
Проверьте, всё ли работает.
ls -la /path/to/file # не должен существовать sudo lsof | grep deleted # не должен ничего вернуть sudo photorec # попытка восстановления — ничего не найти
Выводы
Удаление файла в Linux — это не то же самое, что его уничтожение. Однако, следуя правильному методу для вашего устройства хранения и файловой системы, вы можете сделать удаленные данные настолько сложными для восстановления, насколько это позволяет современное оборудование.
Современные системы Linux также требуют иного подхода, чем старые системы. Ранее распространенные рекомендации shredбольше не подходят для многих реальных конфигураций. SSD-накопители, Btrfs и другие файловые системы с механизмом копирования при записи обрабатывают данные совершенно иначе, чем традиционные жесткие диски.
Вместо того чтобы пытаться перезаписать файл, сосредоточьтесь на удалении всех его копий. Удалите исходный файл, очистите корзину, удалите снимки, проверьте резервные копии, закройте все открытые файловые дескрипторы и запустите TRIM на SSD-накопителях.
Самое важное — позаботьтесь о конфиденциальности заранее. Если вы регулярно работаете с конфиденциальными файлами, включите полное шифрование диска при установке Linux. Это обеспечит гораздо более надежную защиту, чем попытка безопасно удалить отдельные файлы после установки.
Основные выводы:
- На жестких дисках используйте программу
shredдля быстрых задач или полныйsecure-deleteнабор инструментов для тщательной очистки, включая свободное пространство, файл подкачки и оперативную память. - На SSD-накопителях используйте
rmи затем выполните командуfstrim. - В файловой системе btrfs всегда проверяйте и удаляйте снимки. Это самая большая ловушка.
- Для всего остального очистите кэш миниатюр и проверьте синхронизацию с облаком.
- Для обеспечения максимальной безопасности начните с полного шифрования диска с использованием LUKS.
Для правильного выполнения этой задачи вам не нужно быть экспертом по безопасности. Вам просто нужно знать, какие шаги применимы к вашей системе.
Редактор: AndreyEx