shred

1. Принцип работы команды shred

1.1 Алгоритм перезаписи

Команда shred реализует метод «многократной перезаписи» – каждый байт файла заменяется случайными данными, после чего файл обнуляется. После завершения процесса оставшиеся данные в свободных блоках диска могут быть восстановлены только при наличии резервной копии или специальных инструментов.

1.2 Поддерживаемые файловые системы

  • Ext4, XFS, Btrfs – стандартная поддержка; shred работает с файлами и каталогами без необходимости форматирования.
  • NTFS (через драйверы) – возможна только при монтировании с правом доступа к системному уровню.
  • Файлы в разделах FAT32/ exFAT – работают, но эффективность может быть снижена из‑за отсутствия журналирования.

1.3 Ограничения

  • Файловые системы, использующие сжатие (например, Btrfs с включённым compress), могут сохранять старую версию файла в кэше.
  • Если файл находится на SSD без TRIM‑поддержки, данные могут оставаться на физическом уровне после перезаписи.

2. Параметры команды и их влияние

ПараметрОписаниеПример
-n <число>Количество проходов (по умолчанию 10). Чем больше – тем надёжнее, но дольше.shred -n 5 file.txt
-zПосле перезаписи записывается нуль‑строка для маскирования количества проходов.shred -z file.txt
-vВыводит прогресс и статистику. Полезно при работе с большими файлами.shred -v file.bin
--removeУдаляет файл после перезаписи, не оставляя ссылку в каталоге.shred --remove file.docx
-uПараллельно удаляет файл после перезаписи. Сочетание с --remove.shred -u file.tmp

2.1 Распределение нагрузки на многопроцессорные системы

Команда не использует мультипоточность; каждый проход выполняется последовательно. При работе в скриптах можно параллелить вызовы через xargs -P.


3. Практические сценарии использования

3.1 Удаление конфиденциальных файлов перед переустановкой ОС

Bash
find /home/user/Documents -type f $ -name "*.docx" -o -name "*.xlsx" $ -exec shred --remove -u {} +

Команда удаляет все документы, перезаписывая их и сразу освобождая место.

3.2 Очистка временных файлов в системных логах

Bash
sudo find /var/log -type f -name "*.log" -mtime +30 -exec shred --remove -u {} +

Удаляет логи старше 30 дней, гарантируя, что данные не восстановятся.

3.3 Интеграция в автоматизированные скрипты резервного копирования

Bash
#!/bin/bash
# После завершения бэкапа удаляем исходный файл
shred -n 3 -z --remove "$1"

Таким образом, даже если процесс копирования прервётся, оригинал не останется читаемым.


4. Советы по повышению надёжности

  • TRIM‑поддержка SSD: убедитесь, что ваш диск поддерживает TRIM и включён в настройках ядра (echo 1 > /sys/block/sda/device/trim).
  • Проверка свободного места: перед удалением больших файлов проверяйте наличие достаточного объёма на диске.
  • Регулярные обновления: новые версии coreutils иногда улучшают алгоритмы перезаписи и добавляют новые параметры.