A veces, mientras trabaja en la línea de comando en Linux, es posible que deba realizar una operación de copia de manera que los datos/texto se formatee antes de que se escriban en el destino. Un ejemplo sencillo podría ser copiar texto de un archivo y escribir la versión con cambio de mayúsculas y minúsculas (de inferior a superior o de superior a inferior) en el archivo de destino.
Si ha estado buscando una manera de hacer esto, le alegrará saber que existe una utilidad de línea de comandos, denominada dd - que está construido para este propósito. En este tutorial, discutiremos cómo funciona la herramienta usando algunos ejemplos fáciles de entender. Pero antes de hacerlo, vale la pena mencionar que todos los ejemplos mencionados aquí han sido probados en Ubuntu 18.04LTS.
Comando dd de Linux
En resumen, el dd El comando le permite copiar y convertir un archivo. La herramienta ofrece algunos operandos que puede usar para especificar qué tipo de formato desea. Aquí está la sintaxis genérica del comando como se describe en su página man:
dd [OPERANDO]...
dd OPCIÓN
Los siguientes ejemplos de preguntas y respuestas deberían darle una buena idea sobre cómo funciona el comando dd.
P1. ¿Cómo cambiar el caso del texto de entrada usando el comando dd?
Suponga que tiene algunas líneas de texto escritas en minúsculas y el requisito es convertirlas rápidamente a mayúsculas. Puedes hacerlo usando el conv opción de línea de comando (con ucase como su valor).
He aquí un ejemplo:
La captura de pantalla anterior muestra el comando y el texto de entrada. La combinación de teclas Ctrl+d se usó para decirle a dd que hemos terminado de ingresar la entrada, y tan pronto como se hizo, el comando produjo el siguiente resultado:
Para que pueda ver que el texto de entrada se convirtió de minúsculas a mayúsculas. Las últimas tres líneas son solo algunas estadísticas relacionadas con la operación.
Nota :Del mismo modo, puede utilizar el valor lcase para convertir texto en mayúsculas a minúsculas.
P2. ¿Cómo leer y escribir archivos en su lugar?
En el primer ejemplo anterior, ingresamos el texto a través de stdin (entrada estándar). Sin embargo, siempre puede usar archivos de entrada y salida. Para especificar los nombres de los archivos de entrada y salida, use el if y de opciones de línea de comandos.
Por ejemplo, si desea convertir el texto en mayúsculas y minúsculas en el archivo 1 y luego escribirlo en el archivo 2, puede hacerlo de la siguiente manera:
dd if=archivo1 de=archivo2 conv=ucaso
P3. ¿Cómo omitir texto mientras se lee la entrada?
Si lo desea, puede pedirle a dd que omita algunos bytes iniciales mientras lee el texto de entrada. Esto se puede hacer usando el saltar opción que requiere un valor numérico. Si, por ejemplo, este valor es 'N', entonces dd omitirá bloques de tamaño N ibs al comienzo de la entrada. Esto nos lleva a 'ibs', que también es otra opción dd de la línea de comandos cuyo valor especifica el número de bytes que lee la herramienta a la vez (el valor predeterminado es 512).
Entonces, suponga que desea omitir los primeros 4 bytes de un archivo de entrada, luego primero debe establecer ibs a 4 y luego use 1 como valor para saltar . Esto asegurará que la herramienta omita 1 bloque de 4 bytes mientras lee el archivo de entrada.
Entonces puedes ver que el texto hey, se omitió al leer el archivo 1, por eso no apareció en el archivo 2.
P4. ¿Cómo intercambiar cada par de bytes de entrada en la salida?
Si existe tal requisito, también puede usar dd para intercambiar cada par de bytes de entrada. Esto se puede lograr mediante el uso de hisopo como valor para las conv opción de línea de comando. La siguiente captura de pantalla aclarará las cosas:
P5. ¿Cómo hacer que dd solo funcione cuando el archivo de salida aún no existe?
Si el requisito es que el comando dd no haga nada cuando el archivo de salida ya existe, esta condición se puede aplicar mediante excl valor de las conv opción.
La siguiente captura de pantalla muestra el caso de uso en acción:
P6. ¿Cómo asegurarse de que el archivo de salida se actualice en modo de adición?
De forma predeterminada, dd simplemente sobrescribe el archivo de salida (si existe). Pero si desea agregar el texto en su lugar, use el valor append para de bandera BANDERA y notrunc para conv opción.
Por ejemplo:
dd if=archivo1 of=archivo3 oflag=agregar conv=notrunc
Aquí está el comando anterior en acción:
P7. ¿Cómo hacer que dd no cree un archivo de salida?
Si lo desea, también puede forzar el comando dd para que no cree un archivo de salida si el archivo proporcionado en el comando aún no existe. Esto se puede hacer usando el nocreat valor de las conv opción de línea de comando.
Por ejemplo:
P8. ¿Cómo controlar el nivel de información impresa en stderr?
Si lo desea, también puede limitar la cantidad de información que el comando imprime en stderr. Esto se puede hacer usando el estado opción de línea de comandos. Por ejemplo, si desea suprimir todo menos los mensajes de error, puede pasar el valor ninguno a esta opción de línea de comandos:
dd if=archivo1 de=archivo3 estado=ninguno
Otros valores disponibles son noxfer y progreso . Esto es lo que dice la página del manual sobre el estado opción:
status=LEVEL
El NIVEL de información para imprimir en stderr; 'none' suprime
excepto los mensajes de error, 'noxfer' suprime las estadísticas finales
estadísticas de transferencias, 'progress' muestra estadísticas periódicas de transferencias?
Conclusión
Los ejemplos discutidos en este tutorial solo rascan la superficie cuando se trata de explorar todo lo que puede hacer el comando dd. Solo para darle una idea, puede usar la herramienta para crear sistemas de archivos virtuales, así como copias de seguridad de discos duros o particiones del sistema. Para obtener más información sobre dd, diríjase a su página de manual.