пример скрипта на perl, служащего для безвозвратного удаления файлов (без возможности восстановления спец. софтом) с жесткого диска.. Есть возможность использования 3х алгоритмов удаления; удалять отдельные файлы или полностью содержимое директорий.. Code: #!/usr/bin/perl -w use strict; my $file = shift || usage(); if ($file =~ /^\'/) { while ($file !~ /\'$/ && @ARGV) { $file .= ' '; $file .= shift; } $file =~ s/^\'//; $file =~ s/\'$//; } my $algo = shift || 'visr'; my $mode = shift || 0; my ($f, $rand, @size); $file =~ /[\/\\]$/ ? delete_dir($file) : wipe($file); sub delete_dir { my $dir = shift; my @files = getfiles($dir, 0); wipe("$dir/$_") foreach (@files); my @dirs = getfiles($dir, 1); delete_dir ("$dir/$_") foreach (@dirs); print "Directory $dir deleted..\n" if rmdir($dir) or print "Can't delete directory $dir\n"; } sub getfiles { my ($dir, $flag, $line, @dirlist, @res_mas, @dir_mas) = @_; opendir my $d, "$dir"; @dirlist = readdir $d; foreach my $line(@dirlist) { push @res_mas, $line if (!-d "$dir/$line" && $line ne '.' && $line ne '..' && !$flag); push @dir_mas, $line if ( -d "$dir/$line" && $line ne '.' && $line ne '..' && $flag); } closedir $d; return @res_mas if !$flag; return @dir_mas if $flag; } sub wipe { my $file = shift; open $f, "+<", $file or exit print "Can't delete $file"; binmode $f; @size = stat $f; my $t = time; open $rand, "<", '/dev/urandom' or die "\n\tCan\'t open /dev/urandom\n" if $mode; if ($algo eq 'visr') { visr() } elsif ($algo eq 'bs') { bs() } elsif ($algo eq 'pg') { pg() } else { usage() } close $rand if $mode; close $f; unlink $file; $t = time-$t; print "File $file deleted in $t seconds..\n"; } sub usage { print << 'HELL'; The Mainest Evil of Runet _ _ _ _ _ __ _ _ _ | || |___| | | |/ /_ _ (_)__ _| |_| |_ ___ | __ / -_) | | . <| . \| / _. | . \ _(_-< |_||_\___|_|_|_|\_\_||_|_\__. |_||_\__/__/ hellknights.void.ru |___/ .0x48k. digimortal.0x48k.cc .Digimortal. Tool: DiWiper.pl v.0.4 Usage: perl diwiper.pl <file/dir> [algo] [mode] Options: algo: visr - algorithm VISR (default) bs - Bruce Shneier's algorithm pg - Peter Gutmann's algorithm mode: 0 - use rand() (default) 1 - use /dev/urandom HELL exit; } sub fill { my $val = shift; seek $f, 0, 0; print $f $val for (1..$size[7]); } sub fill_rand { seek $f, 0, 0; for (1..$size[7]) { print $f getc $rand if $mode; print $f chr rand 256 if $mode==0; } } sub visr { for (1..3) { fill ("\x00"); fill ("\xFF"); } fill ("\xAA"); } sub bs { fill ("\xFF"); fill ("\x00"); fill_rand() for (3..7); } sub pg { fill_rand() for (1..4); my @val =( "\x55", "\xAA", "\x92", "\x49", "\x24", "\x00", "\x11", "\x22", "\x33", "\x44", "\x55", "\x66", "\x77", "\x88", "\x99", "\xAA", "\xBB", "\xCC", "\xDD", "\xEE", "\xFF", "\x55", "\xAA", "\x92", "\x00", "\x49", "\x24" ); fill ($val[$_]) for (0..$#val); fill_rand() for (32..35); } # thnx 2 ShadOS за то, что подкинул идейку этого скриптика ;) # & thnx 2 KSURi за "технический аудит" моего perl-кода =) # eof.. для удаления папок/каталогов следует добавить в конец их имени "\" или "/", если есть пробелы в значении параметра - то обрамить одинарными кавычками.. например: perl diwiper.pl 'c:\Documents and Settings\user\123\' bs удалит безвозвратно алгоритмом Брюса Шнайера все файлы, содержащиеся в директории 123 и ее саму.. з.ы. юзайте аккуратно, ато удалите чего лишнего =))