tamaño - ver las ultimas lineas de un archivo linux
¿Existe un comando para escribir bytes de basura al azar en un archivo? (3)
Ahora estoy haciendo algunas pruebas de mi aplicación de nuevo archivos corruptos. Pero encontré que es difícil encontrar archivos de prueba.
Así que me pregunto si hay algunas herramientas existentes, que pueden escribir bytes aleatorios / basura en un archivo de algún formato.
Básicamente, necesito esta herramienta para:
- Escribe bytes de basura al azar en el archivo.
- No necesita saber el formato del archivo, solo escribir bytes aleatorios está bien para mí.
- Lo mejor es escribir en posiciones aleatorias del archivo de destino.
- El procesamiento por lotes también es una ventaja.
Gracias.
Para completar, esta es otra forma de hacerlo:
shred -s 10 - > my-file
Escribe 10 bytes aleatorios para stdout y lo redirige a un archivo. shred
se usa generalmente para destruir datos (sobrescribir de manera segura), pero también se puede usar para crear nuevos archivos aleatorios. Entonces, si ya tiene un archivo que desea llenar con datos aleatorios, use esto:
shred my-existing-file
Podrías leer de /dev/random
:
# generate a 50MB file named `random.stuff` filled with random stuff ...
dd if=/dev/random of=random.stuff bs=1000000 count=50
Usted puede especificar el tamaño también de una manera legible para los humanos:
# generate just 2MB ...
dd if=/dev/random of=random.stuff bs=1M count=2
El pseudodispositivo /dev/urandom
, junto con dd
, puede hacer esto por usted:
dd if=/dev/urandom of=newfile bs=1M count=10
Esto creará un archivo newfile
de tamaño 10M.
El dispositivo /dev/random
a menudo bloqueará si no hay suficiente aleatoriedad acumulada, urandom
no bloqueará. Si usa la aleatoriedad para las cosas de grado criptográfico, puede alejarse de urandom
. Para cualquier otra cosa, debería ser suficiente y muy probablemente más rápido.
Si desea corromper solo partes de su archivo (no el archivo completo), simplemente puede usar las funciones aleatorias de estilo C. Simplemente use rnd()
para calcular un desplazamiento y longitud n
, luego úselo n
veces para tomar bytes aleatorios para sobrescribir su archivo.
El siguiente script de Perl muestra cómo se puede hacer esto (sin tener que preocuparse por compilar el código C):
use strict;
use warnings;
sub corrupt ($$$$) {
# Get parameters, names should be self-explanatory.
my $filespec = shift;
my $mincount = shift;
my $maxcount = shift;
my $charset = shift;
# Work out position and size of corruption.
my @fstat = stat ($filespec);
my $size = $fstat[7];
my $count = $mincount + int (rand ($maxcount + 1 - $mincount));
my $pos = 0;
if ($count >= $size) {
$count = $size;
} else {
$pos = int (rand ($size - $count));
}
# Output for debugging purposes.
my $last = $pos + $count - 1;
print "''$filespec'', $size bytes, corrupting $pos through $last/n";
# Open file, seek to position, corrupt and close.
open (my $fh, "+<$filespec") || die "Can''t open $filespec: $!";
seek ($fh, $pos, 0);
while ($count-- > 0) {
my $newval = substr ($charset, int (rand (length ($charset) + 1)), 1);
print $fh $newval;
}
close ($fh);
}
# Test harness.
system ("echo =========="); #DEBUG
system ("cp base-testfile testfile"); #DEBUG
system ("cat testfile"); #DEBUG
system ("echo =========="); #DEBUG
corrupt ("testfile", 8, 16, "ABCDEFGHIJKLMNOPQRSTUVWXYZ ");
system ("echo =========="); #DEBUG
system ("cat testfile"); #DEBUG
system ("echo =========="); #DEBUG
Consiste en la función corrupt
que llama con un nombre de archivo, tamaño mínimo y máximo de corrupción y un conjunto de caracteres para extraer la corrupción. El bit en la parte inferior es solo un código de prueba de unidad. A continuación se muestra un ejemplo de salida donde puede ver que una sección del archivo se ha dañado:
==========
this is a file with nothing in it except for lowercase
letters (and spaces and punctuation and newlines).
that will make it easy to detect corruptions from the
test program since the character range there is from
uppercase a through z.
i have to make it big enough so that the random stuff
will work nicely, which is why i am waffling on a bit.
==========
''testfile'', 344 bytes, corrupting 122 through 135
==========
this is a file with nothing in it except for lowercase
letters (and spaces and punctuation and newlines).
that will make iFHCGZF VJ GZDYct corruptions from the
test program since the character range there is from
uppercase a through z.
i have to make it big enough so that the random stuff
will work nicely, which is why i am waffling on a bit.
==========
Se ha probado en un nivel básico, pero es posible que haya casos de error de borde que deben ser atendidos. Haz con él lo que quieras.