Ricerca nel sito web

Come utilizzare il comando cp in modo efficace in Linux [14 esempi]


Breve: in questa guida facile da seguire, discuteremo alcuni esempi pratici del comando cp. Dopo aver seguito questa guida, gli utenti saranno in grado di copiare facilmente file e directory in Linux utilizzando l'interfaccia della riga di comando.

Come utenti Linux, interagiamo di tanto in tanto con i file e le directory. Un'operazione comune eseguita dagli utenti è la copia di file e directory. Certamente possiamo utilizzare un file manager grafico per eseguire l'operazione di copia. Tuttavia, la maggior parte degli utenti Linux preferisce utilizzare il comando cp per la sua semplicità e la sua ricca funzionalità.

In questa guida per principianti impareremo a conoscere il comando cp. Come suggerisce il nome, il comando cp viene utilizzato per copiare file e directory in un determinato percorso.

In questa guida comprenderemo l'utilizzo del comando cp utilizzando esempi pratici che possono essere utilizzati quotidianamente.

Allora cominciamo.

Sintassi del comando Cp

La sintassi del comando cp è identica a quella degli altri comandi Linux. Ad alto livello, è diviso in due parti: opzioni e argomenti:

cp [OPTIONS] <SOURCE> <DEST>
cp [OPTIONS] <SOURCE-1> <SOURCE-2> ... <DIRECTORY>

Nella sintassi precedente, le parentesi quadre ([]) rappresentano gli argomenti facoltativi mentre le parentesi angolari (<>) rappresentano gli argomenti obbligatori.

1. Come copiare un file in Linux

Uno degli usi di base del comando cp è copiare un file in una directory corrente. La maggior parte delle volte gli utenti eseguono questa operazione per eseguire un backup della configurazione importante.

Ad esempio, spesso creiamo una copia di backup del file /etc/ssh/sshd_config prima di aggiornare la configurazione SSH.

Per comprenderne l'utilizzo, creiamo un semplice file:

touch file-1.txt

Successivamente, crea una copia del file utilizzando il seguente comando:

cp file-1.txt file-2.txt

2. Mostra l'avanzamento del comando di copia

Nell'esempio precedente, abbiamo utilizzato il comando ls per verificare se l'operazione di copia del file è riuscita o meno. Tuttavia, non ha senso utilizzare un comando in più solo per verificare il risultato dei comandi precedenti.

In questi casi, possiamo abilitare la modalità dettagliata utilizzando l'opzione -v, che fornisce la diagnostica per ogni file elaborato.

Facciamo una copia del file file-1.txt utilizzando il seguente comando:

cp -v file-1.txt file-3.txt

Nell'output precedente, la freccia rappresenta il file che viene copiato. L'argomento del lato sinistro è il file di origine mentre l'argomento del lato destro è il file di destinazione.

3. Come copiare più file nella directory

Finora abbiamo lavorato con un singolo file e solo con la directory di lavoro corrente. Tuttavia, nell'ambiente di produzione reale, dobbiamo lavorare con un gran numero di file. Uno dei casi d'uso comuni in tali ambienti è copiare più file in un'unica directory.

Ovviamente, possiamo eseguire il comando cp più volte per ottenerlo, ma non sarà il modo più efficace. Per eseguire tale operazione in modo efficace, possiamo utilizzare una sintassi alternativa del comando cp.

Quindi, per prima cosa, crea una nuova directory con il nome dir-1:

mkdir dir-1

Ora copiamo tutti e tre i file nella directory dir-1 utilizzando il singolo comando:

cp -v file-1.txt file-2.txt file-3.txt dir-1

L'output sopra mostra che tutti i file sono stati copiati nella directory dir-1. Inoltre, è importante notare che, per utilizzare questa sintassi alternativa, la directory deve essere già presente e deve essere l'ultimo argomento del comando.

4. Come evitare di sovrascrivere il file

Per impostazione predefinita, il comando cp sostituisce il file di destinazione, il che significa che sovrascriverà il file se esiste nella destinazione con lo stesso nome. Tuttavia, possiamo disabilitare questo comportamento predefinito utilizzando l'opzione -n.

Per capirlo, proviamo a sovrascrivere il file esistente:

cp -n -v file-1.txt file-2.txt

In questo esempio, abbiamo utilizzato l'opzione -v per illustrare che il file file-2.txt non è stato sovrascritto.

5. Come sovrascrivere il file con conferma

Nell'esempio precedente abbiamo visto come evitare la sovrascrittura del file di destinazione. Tuttavia, a volte vogliamo sovrascrivere la destinazione del file in modo più sicuro.

In questi casi, possiamo usare l'opzione -i del comando per rendere interattiva l'operazione di copia. Questa opzione mostra il messaggio di avviso e attende la conferma dell'utente prima di sovrascrivere il file.

Per illustrare ciò, proviamo a sovrascrivere il file esistente:

cp -i file-1.txt file-2.txt

cp: overwrite 'file-2.txt'?

Come possiamo vedere, il comando è in attesa di conferma. Proprio come gli altri comandi Linux, possiamo usare 'y' per continuare o 'n' per interrompere l'operazione.

Questo comportamento non interattivo predefinito del comando cp non è molto sicuro. È possibile che l'utente sovrascriva per errore una configurazione importante. Pertanto alcune distribuzioni Linux applicano il comportamento interattivo per impostazione predefinita utilizzando il comando alias:

alias cp='cp -i'

6. Sovrascrivi il file solo se l'origine è più recente

Nell'esempio precedente abbiamo visto come utilizzare la modalità interattiva. Tuttavia, a volte, un utente potrebbe sovrascrivere inavvertitamente il file più recente.

Per evitare tali casi soggetti a errori, possiamo utilizzare l'opzione -u, che tenta l'operazione di copia solo se l'origine è più recente della destinazione o se il file non è presente nella destinazione.

Innanzitutto, aggiorna il timestamp del file sorgente:

touch -t 10101010 file-1.txt
ls -l file-1.txt

Nell'esempio precedente, abbiamo utilizzato l'opzione -t del comando touch per impostare il timestamp del file su 10-ott-2010.

Successivamente, aggiorniamo il timestamp del file di destinazione all'ora corrente:

touch file-2.txt

Ora proviamo a eseguire l'operazione di copia utilizzando l'opzione -u:

cp -u -v file-1.txt file-2.txt

Qui possiamo vedere che l'operazione di copia non è stata tentata perché il file di destinazione è più recente di quello di origine.

Infine, scambiamo gli argomenti di origine e di destinazione ed eseguiamo l'operazione di copia:

cp -u -v file-2.txt file-1.txt

Nell'output precedente, possiamo osservare che l'operazione di copia ha esito positivo perché il file di origine è più recente di quello di destinazione.

7. Come eseguire il backup del file prima della sovrascrittura

Possiamo istruire il comando cp a fare un backup del file di destinazione prima di sovrascriverlo. Per raggiungere questo obiettivo possiamo utilizzare l'opzione --backup, che esegue backup automatizzati.

cp --backup=numbered -v file-1.txt file-2.txt

In questo esempio, abbiamo utilizzato la policy di backup numerata. Questa policy utilizza numeri incrementali nei nomi dei file di backup.

Per capirlo, eseguiamo lo stesso comando più volte e osserviamo l'output:

cp --backup=numbered -v file-1.txt file-2.txt
cp --backup=numbered -v file-1.txt file-2.txt
cp --backup=numbered -v file-1.txt file-2.txt

8. Come forzare la copia per sovrascrivere il file

Negli esempi precedenti abbiamo visto come sovrascrivere il file in modo più sicuro. Tuttavia, in alcuni rari casi, è necessario sovrascrivere il file. Tuttavia, non vi è alcuna garanzia che l’operazione abbia successo ogni volta.

Ad esempio, l'operazione di copia fallirà se il file di destinazione non dispone delle autorizzazioni di scrittura. Illustriamolo con un esempio.

Innanzitutto, modifica i permessi del file di destinazione:

chmod 444 file-2.txt
ls -l file-2.txt

Ora proviamo a sovrascrivere il file file-2.txt:

cp file-1.txt file-2.txt

Nell'output sopra, possiamo vedere che il comando non è riuscito con l'errore di autorizzazione negata.

Per superare questa limitazione possiamo utilizzare l'opzione -f, che cancella i file di destinazione e tenta l'operazione di copia se il file di destinazione non può essere aperto.

Ora utilizziamo l'opzione -f per sovrascrivere forzatamente il file:

cp -f -v file-1.txt file-2.txt

9. Come rimuovere il file di destinazione prima della copia

Nell'esempio precedente abbiamo visto come rimuovere il file di destinazione se si verifica un errore durante il funzionamento. Tuttavia, a volte è necessario rimuovere prima il file di destinazione e quindi eseguire l'operazione di copia.

Per soddisfare tale requisito, possiamo utilizzare l'opzione --remove-destination.

cp --remove-destination -v file-1.txt file-2.txt

Nell'output sopra, possiamo vedere che il comando cp rimuove prima il file di destinazione e poi esegue l'operazione di copia.

10. Come creare un file con collegamento reale invece di copiarlo

Possiamo creare un collegamento reale invece di creare una nuova copia del file sorgente. Questa opzione gioca un ruolo importante quando c'è scarsità di spazio su disco.

Quindi, utilizziamo l'opzione -l per creare un collegamento fisico:

cp -l -v file-1.txt file-4.txt

Ora controlliamo i numeri di inode di entrambi i file per verificare gli hard link:

ls -i1 file-1.txt file-4.txt

Nell'output precedente, i numeri nella prima colonna rappresentano i numeri degli inode.

11. Come creare un file Soft Link invece di copiarlo

In modo simile, possiamo creare un soft link invece di creare una nuova copia utilizzando l'opzione -s come mostrato di seguito:

cp -s -v file-1.txt file-5.txt

Ora verifichiamo che il collegamento simbolico sia stato creato correttamente:

ls -l file-5.txt

Nell'output precedente, le ultime colonne rappresentano la relazione di collegamento simbolico.

12. Come preservare gli attributi del file durante la copia

Esistono vari attributi associati al file, come l'ora di accesso, l'ora di modifica, le autorizzazioni, ecc. Per impostazione predefinita, questi attributi non vengono conservati durante la copia del file. Per sovrascrivere questo comportamento predefinito possiamo utilizzare l'opzione -p.

Per capirlo, aggiorna innanzitutto il timestamp del file-1.txt:

touch -t 10101010 file-1.txt

Ora creiamo una copia di questo file preservandone tutti gli attributi:

cp -p -v file-1.txt file-6.txt

Infine, verifica il timestamp del file file-6.txt:

ls -l file-6.txt

13. Come eseguire l'operazione di copia in modo ricorsivo

Finora abbiamo visto come copiare un singolo file. Tuttavia, spesso dobbiamo copiare tutti i file e le sottodirectory di una particolare directory.

In questi casi, possiamo utilizzare la modalità ricorsiva utilizzando l'opzione -r o -R.

Quindi, creiamo una directory e aggiungiamo alcuni file e sottodirectory sotto di essa:

mkdir -p dir-1/dir-2
touch dir-1/file-1.txt dir-1/dir-2/file-2.txt

Successivamente, verifica che la struttura della directory sia stata creata correttamente:

tree dir-1

Ora copiamo ricorsivamente la directory dir-1 utilizzando il seguente comando:

cp -r -v dir-1 dir-3

Infine, verifica che tutti i file e le sottodirectory siano stati copiati correttamente:

tree dir-3

14. Come copiare più directory

Similmente ai file, possiamo copiare più directory in modo ricorsivo utilizzando un singolo comando. Tuttavia, per ottenere ciò, la directory di destinazione deve essere già presente e deve essere l'ultimo argomento nel comando. Capiamolo con un esempio.

Innanzitutto, crea una directory, una nuova directory:

mkdir dir-4

Ora copiamo le directory dir-1 e dir-3 nella directory dir-4 utilizzando il comando seguente:

cp -r -v dir-1 dir-3 dir-4

In modo simile, possiamo usare l'opzione -t del comando per ottenere lo stesso risultato. Questa opzione ci consente di specificare la directory di destinazione. Quindi possiamo usarlo anche come primo argomento:

cp -t dir-4 -r -v dir-1 dir-3

In questo articolo abbiamo discusso come copiare file e directory utilizzando il comando cp. I principianti possono fare riferimento a questi esempi nella vita di tutti i giorni mentre lavorano con i sistemi Linux.

Conosci qualche altro miglior esempio del comando cp in Linux? Fateci sapere le vostre opinioni nei commenti qui sotto.