GNU/Linux >> Tutoriales Linux >  >> Linux

Dd Vs Cat:¿Dd sigue siendo relevante en estos días?

Recientemente me di cuenta de que podemos usar cat tanto como dd , y en realidad es más rápido que dd

Sé que dd fue útil en el manejo de cintas donde el tamaño del bloque realmente importaba en la corrección, no solo en el rendimiento. En estos días, sin embargo, hay situaciones en las que dd puede hacer algo cat ¿no puedo? (Aquí consideraría irrelevante una diferencia de rendimiento de menos del 20 %).

¡Ejemplos concretos estaría bien!

Respuesta aceptada:

En apariencia, dd es una herramienta de un sistema operativo de IBM que ha conservado su aspecto extraño (su paso de parámetros), que realiza algunas funciones muy poco utilizadas (como conversiones de EBCDIC a ASCII o inversión de endianness... no es una necesidad común hoy en día).

Solía ​​pensar que dd era más rápido para copiar grandes bloques de datos en el mismo disco (debido al uso más eficiente del almacenamiento en búfer), pero esto no es cierto, al menos en los sistemas Linux actuales.

Creo que algo de dd Las opciones de son útiles cuando se trata de cintas, donde la lectura se realiza realmente en bloques (los controladores de cinta no ocultan los bloques en el medio de almacenamiento como lo hacen los controladores de disco). Pero no sé los detalles.

Una cosa dd puede hacer eso no puede (fácilmente) ser hecho por ninguna otra herramienta POSIX es tomar los primeros N bytes de un arroyo Muchos sistemas pueden hacerlo con head -c 42 , pero head -c , aunque común, no está en POSIX (y no está disponible hoy, por ejemplo, en OpenBSD). (tail -c es POSIX). Además, incluso donde head -c existe, es posible que lea demasiados bytes de la fuente (porque usa el almacenamiento en búfer de stdio internamente), lo cual es un problema si está leyendo desde un archivo especial donde solo leer tiene un efecto. (Los coreutils actuales de GNU leen el recuento exacto con head -c , pero FreeBSD y NetBSD usan stdio.)

Más generalmente, dd proporciona una interfaz a la API del archivo subyacente que es única entre las herramientas de Unix:solo dd puede sobrescribir o truncar un archivo en cualquier momento o buscar en un archivo. (Este es dd Es una habilidad única, y es grande; curiosamente dd es mejor conocido por cosas que otras herramientas pueden hacer).

  • La mayoría de las herramientas de Unix sobrescriben su archivo de salida, es decir, borran su contenido y lo vuelven a iniciar desde cero. Esto es lo que sucede cuando usas > redirección en el shell también.
  • Puede anexar el contenido de un archivo con >> redirección en el shell, o con tee -a .
  • Si desea acortar un archivo eliminando todos los datos después de cierto punto , esto es compatible con el kernel subyacente y la API C a través de truncate función, pero no expuesta por ninguna herramienta de línea de comando excepto dd :

    dd if=/dev/null of=/file/to/truncate seek=1 bs=123456  # truncate file to 123456 bytes
    
  • Si desea sobrescribir datos en medio de un archivo, de nuevo, esto es posible en la API subyacente abriendo el archivo para escribir sin truncar (y llamando a lseek para moverse a la posición deseada si es necesario), pero solo dd puede abrir un archivo sin truncar o agregar, o buscar desde el shell (ejemplo más complejo).

    # zero out the second kB block in the file (i.e. bytes 1024 to 2047)
    dd if=/dev/zero of=/path/to/file bs=1024 seek=1 count=1 conv=notrunc
    

Entonces... Como herramienta del sistema, dd es bastante inútil. Como herramienta de procesamiento de texto (o archivo binario), ¡es bastante valiosa!

Relacionado:¿Calcular número de días para el pago?
Linux
  1. 10 ejemplos de comandos Cat para administrar archivos en Linux / UNIX

  2. 14 ejemplos útiles de comandos "cat" en Linux

  3. ¿Cómo cat <<EOF>> un archivo que contiene código?

  4. Ventajas de cat'ing file y piping a grep

  5. Eliminación elegante de archivos con más de 30 días de antigüedad

16 ejemplos de comandos Quick Cat en Linux

Comando Cat en Linux

10 ejemplos de comandos Cat de Linux para principiantes

Uso de Cat Command en Linux con ejemplos

Ejemplos de comandos cat de Linux

Comando de Linux para concatenar un archivo consigo mismo n veces