13 votos

¿Es seguro utilizar la entrada y salida estándar con datos binarios?

Necesito dividir un archivo binario en dos. Me preguntaba si podría usarse la cabeza y / o la cola, pero luego me pregunté ... ¿es seguro usar redirección, tuberías, etc. con datos binarios? ¿Se entremezclan con las nuevas líneas o se ignoran los nulos, o se puede retroceder o eliminar haciendo algo especial? (bash, kubuntu 18.04 LTS)

18voto

Eric Mintz Puntos 21

Sí, es seguro si lo canaliza a otro proceso o lo guarda en un archivo. Existe una "rareza" potencial si deja que la salida estándar de datos binarios se imprima en un terminal, ya que puede contener secuencias de escape (al azar) que pueden desordenar temporalmente la pantalla del terminal.

0voto

Joe Puntos 758

El principal problema con el uso de comandos como, por ejemplo head o tail es que están orientadas a líneas y los archivos binarios no son. Si no tiene el carácter de nueva línea en ellos, a menudo no se utiliza para representar el final de una línea y si lo son, pueden ser simplemente ser parte de cadenas como los mensajes de un programa o campos de datos.

Si los datos se estructuran de alguna manera, entonces usted tiene que tomar en cuenta en la elección de puntos de separación para no romper estructuras en el medio.

Si se conoce la estructura del archivo, puede utilizar un comando como

dd -if input-file -of output-file ...

con opciones para copiar sólo tantos bloques de datos de un tamaño específico partida a un particular (incrementa) desplazamiento en el archivo.

Parece que el split comando como se ha mencionado por @egmont automatizar este proceso para usted, pero parece ser una línea orientada por defecto, por lo que tendrás que especificar opciones adicionales tales como --bytes count a decirle lo grande que sea cada pieza del archivo debe ser.


Como una nota de lado, si usted no sabe lo que está en un archivo, pero sospecho que contiene al menos algunos significativos datos textuales, strings comando es una gran manera de tomar un primer vistazo para ver lo que se está tratando.

strings -n 6 file | less

encontrará todas las carreras de caracteres imprimibles al menos seis caracteres de longitud y mostrarlos en un localizador para que no se volar por en el terminal. El uso de un número un poco mayor que el valor predeterminado de 4 caracteres ayuda a eliminar pequeños fragmentos de datos que acaba de pasar a ser imprimible, pero no se utiliza de esa manera en el archivo.

Si más tarde tienes que explorar el archivo en más detalle con el editor binario como hexedit, vas a tener algunos puntos de referencia que señale el lugar donde algo interesante podría ser encontrado.

strings tiene una opción -t x que preceden a cada uno de los impresos de cadena con su desplazamiento en el archivo en hexadecimal (o para octal/d para decimal) para que usted sepa dónde encontrarlo más tarde. Incluso muy corto archivos son mucho para afrontar con cuando usted tiene que mirar a ellos, carácter por carácter.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: