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иногда улучшают алгоритмы перезаписи и добавляют новые параметры.