Com utilitzar l'ordre cp amb eficàcia a Linux [14 exemples]


Breu: en aquesta guia fàcil de seguir, parlarem d'alguns exemples pràctics de l'ordre cp. Després de seguir aquesta guia, els usuaris podran copiar fitxers i directoris fàcilment a Linux mitjançant la interfície de línia d'ordres.

Com a usuaris de Linux, interactuem amb els fitxers i directoris que copiem. Certament, podem utilitzar un gestor de fitxers gràfic per realitzar l'operació de còpia. Tanmateix, la majoria dels usuaris de Linux prefereixen utilitzar l'ordre cp a causa de la seva senzillesa i funcionalitat rica.

En aquesta guia amigable per a principiants, aprendrem sobre l'ordre cp. Com el seu nom indica, l'ordre cp s'utilitza per copiar fitxers i directoris en una ruta determinada.

Al llarg d'aquesta guia, entendrem l'ús de l'ordre cp utilitzant exemples pràctics que es poden utilitzar diàriament.

Així que comencem.

Taula de continguts

Sintaxi d'ordres Cp

La sintaxi de l'ordre cp és idèntica a la d'altres ordres de Linux. A un alt nivell, es divideix en dues parts: opcions i arguments:

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

A la sintaxi anterior, els claudàtors ([]) representen els arguments opcionals mentre que els claudàtors (<>) representen els arguments obligatoris.

1. Com copiar un fitxer a Linux

Un dels ús bàsics de l'ordre cp és copiar un fitxer al directori actual. La majoria de les vegades els usuaris fan aquesta operació per fer una còpia de seguretat de la configuració important.

Per exemple, sovint creem una còpia de seguretat del fitxer /etc/ssh/sshd_config abans d'actualitzar la configuració SSH.

Per entendre l'ús, creem un fitxer senzill:

$ touch file-1.txt

A continuació, creeu una còpia del fitxer amb l'ordre següent:

$ cp file-1.txt file-2.txt

2. Mostra el progrés de l'ordre de còpia

A l'exemple anterior, vam utilitzar l'ordre ls per verificar si l'operació de còpia de fitxers va tenir èxit o no. Tanmateix, no té sentit utilitzar una ordre més només per verificar el resultat de les ordres anteriors.

En aquests casos, podem habilitar el mode detallat mitjançant l'opció -v, que proporciona diagnòstics per a cada fitxer processat.

Fem una còpia del fitxer file-1.txt amb l'ordre següent:

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

A la sortida anterior, la fletxa representa el fitxer que s'està copiant. L'argument del costat esquerre és el fitxer font mentre que l'argument del costat dret és el fitxer de destinació.

3. Com copiar diversos fitxers al directori

Fins ara hem treballat amb un sol fitxer i només amb el directori de treball actual. Tanmateix, en l'entorn de producció real, hem de treballar amb un gran nombre de fitxers. Un dels casos d'ús habituals en aquests entorns és copiar diversos fitxers en un sol directori.

Òbviament, podem executar l'ordre cp diverses vegades per aconseguir-ho, però aquesta no serà la manera més eficaç. Per realitzar aquesta operació de manera eficaç, podem utilitzar una sintaxi alternativa de l'ordre cp.

Per tant, primer, creeu un directori nou amb el nom dir-1:

$ mkdir dir-1

Ara, copiem els tres fitxers al directori dir-1 mitjançant l'única ordre:

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

La sortida anterior mostra que tots els fitxers s'han copiat al directori dir-1. A més, és important tenir en compte que, per utilitzar aquesta sintaxi alternativa, el directori ja ha d'estar present i ha de ser l'últim argument de l'ordre.

4. Com evitar sobreescriure el fitxer

Per defecte, l'ordre cp substitueix el fitxer de destinació, la qual cosa significa que sobreescriurà el fitxer si existeix a la destinació amb el mateix nom. Tanmateix, podem desactivar aquest comportament per defecte mitjançant l'opció -n.

Per entendre-ho, intentem sobreescriure el fitxer existent:

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

En aquest exemple, hem utilitzat l'opció -v per il·lustrar que el fitxer file-2.txt no s'ha sobreescrit.

5. Com sobreescriure el fitxer amb confirmació

A l'exemple anterior, vam veure com evitar la sobreescritura del fitxer de destinació. Tanmateix, de vegades volem sobreescriure la destinació del fitxer d'una manera més segura.

En aquests casos, podem utilitzar l'opció -i de l'ordre per fer que l'operació de còpia sigui interactiva. Aquesta opció mostra el missatge d'advertència i espera la confirmació de l'usuari abans de sobreescriure el fitxer.

Per il·lustrar-ho, intentem sobreescriure el fitxer existent:

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

cp: overwrite 'file-2.txt'?

Com podem veure, l'ordre està esperant la confirmació. Igual que altres ordres de Linux, podem utilitzar y per continuar o n per avortar l'operació.

Aquest comportament no interactiu per defecte de l'ordre cp no és gaire segur. Hi ha possibilitats que l'usuari sobreescrigui una configuració important per error. Per tant, algunes de les distribucions de Linux imposen el comportament interactiu de manera predeterminada mitjançant l'ordre d'àlies:

$ alias cp='cp -i'

6. Sobreescriu el fitxer només si la font és més recent

A l'exemple anterior, vam veure com utilitzar el mode interactiu. Tanmateix, de vegades, un usuari pot sobreescriure el fitxer més nou sense voler.

Per evitar aquests casos propensos a errors, podem utilitzar l'opció -u, que intenta l'operació de còpia només si la font és més recent que la destinació o si el fitxer no està present a la destinació.

Primer, actualitzeu la marca de temps del fitxer font:

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

A l'exemple anterior, hem utilitzat l'opció -t de l'ordre tàctil per establir la marca de temps del fitxer al 10 d'octubre de 2010.

A continuació, actualitzem la marca de temps del fitxer de destinació a l'hora actual:

$ touch file-2.txt

Ara, intentem realitzar una operació de còpia utilitzant l'opció -u:

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

Aquí, podem veure que l'operació de còpia no s'ha intentat perquè el fitxer de destinació és més nou que l'origen.

Finalment, intercanviem els arguments d'origen i de destinació i realitzem l'operació de còpia:

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

A la sortida anterior, podem observar que l'operació de còpia té èxit perquè el fitxer d'origen és més nou que el de destinació.

7. Com fer una còpia de seguretat del fitxer abans de sobreescriure

Podem indicar a l'ordre cp que faci una còpia de seguretat del fitxer de destinació abans de sobreescriure-lo. Per aconseguir-ho podem utilitzar l'opció --backup, que realitza còpies de seguretat automatitzades.

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

En aquest exemple, hem utilitzat la política de còpia de seguretat numerada. Aquesta política utilitza números incrementals als noms dels fitxers de còpia de seguretat.

Per entendre-ho, executem la mateixa comanda diverses vegades i observem la sortida:

$ 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. Com forçar la còpia per sobreescriure el fitxer

En els exemples anteriors, vam veure com sobreescriure el fitxer d'una manera més segura. Tanmateix, en alguns casos rars, el requisit és sobreescriure el fitxer. Tanmateix, no hi ha cap garantia que l'operació tingui èxit cada vegada.

Per exemple, l'operació de còpia fallarà si el fitxer de destinació no té els permisos d'escriptura. Il·lustrem-ho amb un exemple.

Primer, canvieu els permisos del fitxer de destinació:

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

Ara, intentem sobreescriure el fitxer file-2.txt:

$ cp file-1.txt file-2.txt

A la sortida anterior, podem veure que l'ordre ha fallat amb l'error de permís denegat.

Per superar aquesta limitació, podem utilitzar l'opció -f, que elimina els fitxers de destinació i intenta l'operació de còpia si no es pot obrir el fitxer de destinació.

Ara, utilitzem l'opció -f per sobreescriure el fitxer amb força:

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

9. Com eliminar el fitxer de destinació abans de copiar

A l'exemple anterior, vam veure com eliminar el fitxer de destinació si hi ha un error en fer-lo funcionar. Tanmateix, de vegades el requisit és eliminar primer el fitxer de destinació i després realitzar l'operació de còpia.

Per complir aquest requisit, podem utilitzar l'opció --remove-destination.

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

A la sortida anterior, podem veure que l'ordre cp primer elimina el fitxer de destinació i després realitza l'operació de còpia.

10. Com crear un fitxer d'enllaç dur en lloc de copiar

Podem crear un enllaç dur en lloc de crear una còpia nova del fitxer font. Aquesta opció juga un paper important quan hi ha escassetat d'espai al disc.

Per tant, utilitzem l'opció -l per crear un enllaç dur:

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

Ara, comprovem els números d'inode dels dos fitxers per verificar els enllaços durs:

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

A la sortida anterior, els números de la primera columna representen els números d'inode.

11. Com crear un fitxer d'enllaç suau en lloc de copiar

De la mateixa manera, podem crear un enllaç suau en lloc de crear una còpia nova utilitzant l'opció -s com es mostra a continuació:

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

Ara, comprovem que l'enllaç simbòlic s'ha creat correctament:

$ ls -l file-5.txt

A la sortida anterior, les darreres columnes representen la relació d'enllaç simbòlic.

12. Com conservar els atributs del fitxer mentre es copien

Hi ha diversos atributs associats al fitxer, com ara el seu temps d'accés, temps de modificació, permisos, etc. Per defecte, aquests atributs no es conserven durant la còpia del fitxer. Per anul·lar aquest comportament predeterminat podem utilitzar l'opció -p.

Per entendre-ho, primer, actualitzeu la marca de temps del fitxer-1.txt:

$ touch -t 10101010 file-1.txt

Ara, creem una còpia d'aquest fitxer conservant tots els seus atributs:

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

Finalment, verifiqueu la marca de temps del fitxer file-6.txt:

$ ls -l file-6.txt

13. Com realitzar l'operació de còpia de manera recursiva

Fins ara hem vist com copiar un sol fitxer. Tanmateix, moltes vegades hem de copiar tots els fitxers i subdirectoris d'un directori concret.

En aquests casos, podem utilitzar el mode recursiu amb l'opció -r o -R.

Per tant, creem un directori i afegim uns quants fitxers i subdirectoris sota ell:

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

A continuació, comproveu que l'estructura de directoris s'ha creat correctament:

$ tree dir-1

Ara, copiem el directori dir-1 de manera recursiva amb l'ordre següent:

$ cp -r -v dir-1 dir-3

Finalment, comproveu que tots els fitxers i subdirectoris s'han copiat correctament:

$ tree dir-3

14. Com copiar diversos directoris

De manera similar als fitxers, podem copiar diversos directoris recursius amb una sola ordre. Tanmateix, per aconseguir-ho, el directori de destinació ja ha d'estar present i ha de ser l'últim argument de l'ordre. Entenem-ho amb un exemple.

Primer, creeu un directori un directori nou:

$ mkdir dir-4

Ara, copiem els directoris dir-1 i dir-3 al directori dir-4 mitjançant l'ordre següent:

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

De manera similar, podem utilitzar l'opció -t de l'ordre per aconseguir el mateix resultat. Aquesta opció ens permet especificar el directori de destinació. Així que també podem utilitzar-lo com a primer argument:

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

En aquest article, vam parlar de com copiar fitxers i directoris mitjançant l'ordre cp. Els principiants poden fer referència a aquests exemples en el dia a dia mentre treballen amb sistemes Linux.

Potser també t'agrada:

  • Progrés: mostra el percentatge de dades copiades per a les ordres (cp, mv, dd, tar)
  • Superviseu el progrés de les dades (còpia/còpia de seguretat/compressió) mitjançant l'ordre pv
  • Ordre de còpia avançada: mostra la barra de progrés mentre es copien fitxers/carpetes grans a Linux

Coneixeu algun altre millor exemple de l'ordre cp a Linux? Feu-nos saber les vostres opinions als comentaris a continuació.