Как удаляют файл начинающие параноики

На модерации Отложенный

Для вас параноики!

Вам очень нужно удалить файл с затруднением восстановления? Тогда вам сюда. По нынешним временам только удалить файл уже недостаточно. Для ленивых пользователей Windows всё уже сделали парни из SysInternals (download.sysinternals.com/files/SDelete.zip). Ну а для тех, кому не для Windows– читаем дальше. Сначала немного отвлечённой теории. В каждом Linuxи даже CygWin есть два прекрасных файла:

  • /dev/random – генератор случайных чисел
  • /dev/urandom– генератор псевдослучайных чисел

Для наших нужд разница между ними несущественна. Использовать их можно следующим образом:

dd if=/dev/random of= bs= count=

Однако я ленив и мне захотелось чтобы всё делалось само, по имени файла. И для этого я использовал следующие заклинания:

  • wc –c - определяет размер файла в байтах
  • awk -- 'BEGIN{printf("%d",ARGV[1]/ARGV[2])}' "$x" – определяет число блоков по размеру файла (размер файла будет уменьшен)
  • awk -- 'BEGIN{printf("%d",ARGV[1]/ARGV[2]+1)}' "$x" – определяет число блоков по размеру файла для тех, кто считает что ни одного байта не должно достаться врагу (размер файла будет увеличен)

Результаты автоматизации можно свести к следующему командному файлу:

#!/bin/sh

if [ -z "$1" ]

then

       # нет входного параметра - пишем, что должен быть

       s=`basename $0`

       echo "usage: $s "

       exit 1

else

     if [ -f "$1" ]

       then

               if [ -w "$1" ]

               then

                       s=`wc -c $1` # размер файла

                       b=512       # размер блока

                       # количество блоков

                      c=`awk -- 'BEGIN{printf("%d",ARGV[1]/ARGV[2])}' "$s" "$b"`

                       # вывод команды перенаправляется в никуда

                       dd if=/dev/random of="$1" bs="$b" count="$c" > /dev/null 2>&1

                       # файл перезаписан - можно удалять

                       #rm -f "$1" # снимите комментарий (#) перед rm, если надо удалить

               else

                       # нет доступа на запись в файл

                       echo "File is not writable:$1"

                       exit 2

               fi

       else

               # переданное имя показывает не на файл

               echo "Not a file:$1"

               exit 3

       fi

fi