Книга: Искусство программирования на языке сценариев командной оболочки
Пример 12-42. Надежное удаление файла
Пример 12-42. Надежное удаление файла
#!/bin/bash
# blotout.sh: Надежно удаляет файл.
# Этот суенарий записывает случайные данные в заданный файл,
#+ затем записывает туда нули и наконец удаляет файл.
# После такого удаления даже анализ дисковых секторов
#+ не даст ровным счетом ничего.
PASSES=7 # Количество проходов по файлу.
BLOCKSIZE=1 # операции ввода/вывода в/из /dev/urandom требуют указания размера блока,
#+ иначе вы не получите желаемого результата.
E_BADARGS=70
E_NOT_FOUND=71
E_CHANGED_MIND=72
if [ -z "$1" ] # Имя файла не указано.
then
echo "Порядок использования: `basename $0` filename"
exit $E_BADARGS
fi
file=$1
if [ ! -e "$file" ]
then
echo "Файл "$file" не найден."
exit $E_NOT_FOUND
fi
echo; echo -n "Вы совершенно уверены в том, что желаете уничтожить "$file" (y/n)? "
read answer
case "$answer" in
[nN]) echo "Передумали? Операция отменена."
exit $E_CHANGED_MIND
*) echo "Уничтожается файл "$file".";;
esac
flength=$(ls -l "$file" | awk '{print $5}') # Поле с номером 5 -- это длина файла.
pass_count=1
echo
while [ "$pass_count" -le "$PASSES" ]
do
echo "Проход #$pass_count"
sync # Вытолкнуть буферы.
dd if=/dev/urandom of=$file bs=$BLOCKSIZE count=$flength
# Заполнить файл случайными данными.
sync # Снова вытолкнуть буферы.
dd if=/dev/zero of=$file bs=$BLOCKSIZE count=$flength
# Заполнить файл нулями.
sync # Снова вытолкнуть буферы.
let "pass_count += 1"
echo
done
rm -f $file # Наконец удалить изрядно "подпорченный" файл.
sync # Вытолкнуть буферы в последний раз.
echo "Файл "$file" уничтожен."; echo
# Это довольно надежный, хотя и достаточно медленный способ уничтожения файлов.
#+ Более эффективно это делает команда "shred",
#+ входящая в состав пакета GNU "fileutils".
# Уничтоженный таким образом файл, не сможет быть восстановлен обычными методами.
# Однако...
#+ эта метода вероятно НЕ сможет противостоять аналитическим службам
#+ из СООТВЕТСТВУЮЩИХ ОРГАНОВ
# Tom Vier разработал пакет "wipe", который более надежно стирает файлы
#+ чем этот простой сценарий.
# http://www.ibiblio.org/pub/Linux/utils/file/wipe-2.0.0.tar.bz2
# Для более глубоко изучения проблемы надежного удаления файлов,
#+ рекомендую обратиться к cnfnmt Peter Gutmann,
#+ "Secure Deletion of Data From Magnetic and Solid-State Memory".
# http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html
exit 0
od
Команда od (octal dump) производит преобразование ввода (или файла) в один или несколько форматов, в соответствии с указанными опциями. При отсутствии опций используется восьмеричный формат (опция -o). Эта команда полезна при просмотре или обработке файлов с двоичными данными, например /dev/urandom. См. Пример 9-26 и Пример 12-10.
hexdump
Выводит дамп двоичных данных из файла в восьмеричном, шестнадцатиричном, десятичном виде или в виде ASCII. Эту команду, с массой оговорок, можно назвать эквивалентом команды of od.
objdump
Отображает содержимое исполняемого или объектного файла либо в шестнадцатиричной форме, либо в виде дизассемблерного листинга (с ключом -d).
bash$ objdump -d /bin/ls
/bin/ls: file format elf32-i386
Disassembly of section .init:
080490bc <.init>:
80490bc: 55 push %ebp
80490bd: 89 e5 mov %esp,%ebp
. . .
mcookie
Эта команда создает псевдослучайные шестнадцатиричные 128-битные числа, так называемые "magic cookie", обычно используется X-сервером в качестве "сигнатуры" авторизации. В сценариях может использоваться как малоэффективный генератор случайных чисел.
random000=`mcookie | sed -e '2p'`
# 'sed' удаляет посторонние символы.
Конечно, для тех же целей, сценарий может использовать md5.
# Сценарий вычисляет контрольную сумму для самого себя.
random001=`md5sum $0 | awk '{print $1}'`
# 'awk' удаляет имя файла.
С помощью mcookie можно создавать "уникальные" имена файлов.
- Пример 12-39. Использование seq для генерации списка аргументов цикла for
- Пример 12-40. Использование getopt для разбора аргументов командной строки
- Пример 12-41. Захват нажатых клавиш
- Пример 12-42. Надежное удаление файла
- Пример 12-43. Генератор имен файлов
- Пример 12-44. Преобразование метров в мили
- Пример 12-45. Пример работы с m4
- 5.1.5. Удаление файла
- Пример установочного скрипта
- Пример из практики
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Эффективная работа с временными файлами сортировки
- Примеры получения статистики
- Пример применения метода «пять почему»
- Единое имя файла параметров InterBase
- Параметры конфигурационного файла InterBase
- Пример 12-8. Частота встречаемости отдельных слов
- 1.2.5. Пример программы
- Пример 17-10. Блочный комментарий