A volte, mentre si lavora sulla riga di comando in Linux, potrebbe essere necessario eseguire un'operazione di copia in modo che i dati/il testo vengano formattati prima di essere scritti nella destinazione. Un semplice esempio potrebbe essere copiare del testo da un file e scrivere la versione modificata tra maiuscole e minuscole (dal basso verso l'alto o dall'alto verso il basso) nel file di destinazione.
Se stavi cercando un modo per farlo, sarai felice di sapere che esiste un'utilità da riga di comando, soprannominata dd - è costruito per questo scopo. In questo tutorial, discuteremo di come funziona lo strumento utilizzando alcuni esempi di facile comprensione. Ma prima di farlo, vale la pena ricordare che tutti gli esempi qui menzionati sono stati testati su Ubuntu 18.04LTS.
Comando Linux dd
In breve, il dd comando ti consente di copiare e convertire un file. Lo strumento offre alcuni operandi che puoi utilizzare per specificare il tipo di formattazione che desideri. Ecco la sintassi generica del comando come descritto nella sua pagina man:
dd [OPERAND]...
dd OPTION
I seguenti esempi di tipo Domande e risposte dovrebbero darti una buona idea di come funziona il comando dd.
Q1. Come cambiare il caso del testo di input usando il comando dd?
Supponiamo di avere alcune righe di testo scritte in minuscolo e il requisito è convertirle rapidamente in maiuscolo. Puoi farlo usando conv opzione della riga di comando (con ucase come suo valore).
Ecco un esempio:
Lo screenshot sopra mostra il comando e il testo di input. La combinazione di tasti Ctrl+d è stato usato per dire a dd che abbiamo finito di inserire l'input e, non appena ciò è stato fatto, il comando ha prodotto il seguente output:
Quindi puoi vedere che il testo di input è stato convertito da minuscolo a maiuscolo. Le ultime tre righe sono solo alcune statistiche relative alle operazioni.
Nota :Allo stesso modo, puoi utilizzare il valore lcase per convertire il testo maiuscolo in minuscolo.
Q2. Come leggere e scrivere su file invece?
Nel primo esempio sopra, abbiamo inserito il testo tramite stdin (standard input). Tuttavia, puoi sempre utilizzare file di input e output. Per specificare i nomi dei file di input e di output, utilizza se e di opzioni della riga di comando.
Ad esempio, se vuoi convertire il caso del testo in file1 e poi scriverlo in file2, puoi farlo nel modo seguente:
dd if=file1 of=file2 conv=ucase
T3. Come saltare il testo durante la lettura dell'input?
Se lo desideri, puoi chiedere a dd di saltare alcuni byte iniziali durante la lettura del testo di input. Questo può essere fatto usando il salta opzione che richiede un valore numerico. Se, ad esempio, questo valore è 'N', allora dd salterà i blocchi di dimensioni N ibs all'inizio dell'input. Questo ci porta a 'ibs', che è anche un'altra opzione dd della riga di comando il cui valore specifica il numero di byte che lo strumento legge alla volta (il valore predefinito è 512).
Quindi supponiamo di voler saltare i primi 4 byte di un file di input, quindi dovresti prima impostare ibs a 4 e quindi utilizzare 1 come valore per salta . Ciò assicurerà che lo strumento salti 1 blocco di 4 byte durante la lettura del file di input.
Quindi puoi vedere che il testo hey, è stato saltato durante la lettura di file1 - ecco perché non è apparso in file2.
Q4. Come scambiare ogni coppia di byte di input in output?
Se c'è un tale requisito, puoi anche usare dd per scambiare ogni coppia di byte di input. Questo può essere ottenuto usando il tampone come valore per conv opzione della riga di comando. Lo screenshot seguente renderà le cose più chiare:
Q5. Come fare in modo che dd funzioni solo quando il file di output non esiste già?
Se il requisito è che il comando dd non dovrebbe fare nulla quando il file di output esiste già, allora questa condizione può essere applicata usando excl valore per le conv opzione.
Lo screenshot seguente mostra il caso d'uso in azione:
Q6. Come assicurarsi che il file di output sia aggiornato in modalità append?
Per impostazione predefinita, dd sovrascrive semplicemente il file di output (se esiste). Ma se invece vuoi che aggiunga il testo, usa il valore append per flag FLAG e notrunc per conv opzione.
Ad esempio:
dd if=file1 of=file3 oflag=append conv=notrunc
Ecco il comando sopra in azione:
Q7. Come fare in modo che dd non crei un file di output?
Se lo desideri, puoi anche forzare il comando dd a non creare un file di output se il file fornito nel comando non esiste già. Questo può essere fatto utilizzando nocreat valore della conv opzione della riga di comando.
Ad esempio:
Q8. Come controllare il livello di informazioni stampate su stderr?
Se lo desideri, puoi anche limitare la quantità di informazioni che il comando stampa su stderr. Questo può essere fatto utilizzando lo stato opzione della riga di comando. Ad esempio, se desideri eliminare tutto tranne i messaggi di errore, puoi passare il valore none a questa opzione della riga di comando:
dd if=file1 of=file3 status=none
Altri valori disponibili sono noxfer e progressi . Ecco cosa dice la pagina man sullo stato opzione:
status=LEVEL
The LEVEL of information to print to stderr; 'none' suppresses
everything but error messages, 'noxfer' suppresses the final
transfer statistics, 'progress' shows periodic transfer statis?
tics
Conclusione
Gli esempi discussi in questo tutorial grattano la superficie quando si tratta di esplorare cosa può fare tutto il comando dd. Solo per darti un'idea, puoi utilizzare lo strumento per creare filesystem virtuali e backup di dischi rigidi o partizioni di sistema. Per ulteriori informazioni su dd, vai alla sua pagina man.