Temps de lecture estimé : 7 minutes
Points clés à retenir
- cp [option] source destination copie fichiers et dossiers en local
- -r copie les répertoires, -a préserve permissions et métadonnées
- -i ou -n évitent l’écrasement accidentel de fichiers existants
- rsync pour les gros volumes, scp pour le distant, dd pour les disques
- Toujours vérifier l’espace disque avant une copie récursive volumineuse
Qu’est-ce que la commande cp sous Linux
La commande cp linux sert à copier des fichiers et des répertoires depuis un terminal, sans passer par une interface graphique. On va pas se mentir : c’est l’une des dix commandes que j’utilise le plus, tous les jours, depuis que j’ai commencé à administrer mes propres serveurs pendant l’aventure de mon edtech.
cp fait partie du paquetage GNU Coreutils, installé par défaut sur toutes les distributions Linux. Ce n’est pas un détail : ça veut dire que la commande fonctionne à l’identique sur Ubuntu, Debian, Fedora ou Arch, sans installation supplémentaire.
Sa logique est simple : on lui donne une source et une destination, elle copie. Mais il ne faut pas la confondre avec ses cousines. mv déplace un fichier (il disparaît de l’emplacement d’origine), rm le supprime, et dd copie des blocs de données bruts, souvent des disques entiers.
Différence avec mv, rm et dd
Le vrai sujet, c’est pas la syntaxe, c’est de savoir quand utiliser quel outil. cp duplique et conserve l’original. mv renomme ou déplace sans dupliquer. dd, lui, travaille au niveau du bloc disque, pas du fichier — j’y reviens plus loin, mais retenez déjà que ce ne sont pas des concurrents directs.
Syntaxe de base de la commande cp
La syntaxe générale est cp [option] source destination. Elle exige au minimum deux noms de fichiers en argument : une source qui existe, une destination vers laquelle copier.
Pour copier un fichier vers un autre fichier, on écrit simplement :
| Commande | Effet |
|---|---|
cp rapport.txt rapport_backup.txt | Duplique le fichier sous un nouveau nom, même dossier |
cp rapport.txt /home/raphael/docs/ | Copie le fichier dans un répertoire, nom conservé |
cp fichier1.txt fichier2.txt /home/raphael/docs/ | Copie plusieurs fichiers d’un coup vers un dossier |
Quand j’étais en train de scaler la boîte, on copiait des dizaines de fichiers de config en une seule ligne vers un dossier de déploiement. La règle est constante : dès qu’il y a plusieurs sources, la destination doit être un répertoire, jamais un fichier.
Les options essentielles de cp
IONOS recense plus de 15 options pour la commande cp (-a, -b, -d, -f, -i, -l, -n, -p, -P, -r, -R, -s, -u, -v, –preserve, entre autres). En pratique, voilà ce que j’ai constaté : quatre d’entre elles couvrent 90 % des usages réels.
- -r ou -R : copie récursive, indispensable pour un répertoire
- -i : demande confirmation avant d’écraser un fichier existant
- -v : affichage verbeux, utile pour suivre une copie de masse en direct
- -u : ne copie que les fichiers modifiés depuis la dernière copie
L’option -u est celle que je recommande le plus souvent en synchronisation manuelle : elle évite de retraiter des fichiers déjà à jour, un gain de temps réel dès que le dossier dépasse quelques centaines d’éléments.
Sur un serveur de prod, je ne lance jamais une copie de masse sans -i en premier test. Un écrasement accidentel se répare rarement en deux minutes.
Préserver les permissions et métadonnées avec -a et -p
Ce que personne ne dit (et qui change tout) : une copie simple avec cp ne préserve pas les permissions ni les dates d’origine par défaut. Le fichier copié hérite des droits de l’utilisateur qui exécute la commande, pas de ceux du fichier source.
-p préserve le mode (permissions), le propriétaire et les timestamps. -a va plus loin : c’est l’option archive, équivalente à -dR –preserve=all. Elle conserve les liens symboliques, la récursivité et tous les attributs en une seule option.
Cas d’usage concret
Pour une sauvegarde système ou une migration de serveur, j’utilise systématiquement cp -a. Exemple avec le flag explicite :
| Commande | Ce qu’elle préserve |
|---|---|
cp -p fichier.conf /backup/ | Mode, propriétaire, dates |
cp -a /etc/nginx /backup/nginx-$(date +%F) | Tout : liens, permissions, structure, dates |
cp --preserve=all fichier.conf /backup/ | Équivalent explicite de -p étendu |
J’ai testé, j’ai raté, voilà ce qui fonctionne vraiment : lors d’une migration de serveur pour mon ancienne edtech, une copie sans -a avait remis à zéro les permissions d’exécution de nos scripts cron. Deux heures de debug pour un flag oublié.
Copier des répertoires entiers avec cp
La syntaxe reste cp -r source destination, mais le piège le plus fréquent est simple : oublier le -r. Sans lui, cp refuse de copier un dossier et renvoie une erreur « omitting directory ».
Pour visualiser le fonctionnement de cp et mv sur des cas concrets, cette vidéo de Caleb Curry détaille les commandes pas à pas.
cp -r conserve la structure des sous-répertoires : chaque dossier imbriqué est recréé à l’identique dans la destination. C’est différent d’un simple listing de fichiers à plat — l’arborescence complète suit.
Avant une copie récursive volumineuse, je vérifie toujours l’espace disque disponible avec df -h. Une copie de plusieurs dizaines de gigaoctets qui s’arrête à mi-chemin faute d’espace laisse un dossier de destination corrompu, à moitié rempli.
Utiliser les caractères génériques (wildcards) avec cp
Les wildcards permettent de cibler des groupes de fichiers sans les lister un par un. Le plus courant est *, qui remplace n’importe quelle suite de caractères.
| Commande | Effet |
|---|---|
cp *.jpg /home/raphael/photos/ | Copie tous les fichiers .jpg du dossier courant |
cp rapport_*.pdf /archives/ | Copie tous les PDF commençant par « rapport_ » |
Pour trier des fichiers en masse dans un dossier cible, les wildcards évitent des scripts inutiles. Je m’en sers régulièrement pour extraire toutes les captures d’écran d’un dossier de travail avant un rangement mensuel.
cp face à ses alternatives : mv, rsync, scp, dd
Le vrai sujet, c’est pas de savoir utiliser cp, c’est de savoir quand ne PAS l’utiliser. Aucun guide ne compare ces quatre outils côte à côte avec des cas d’usage tranchés — c’est pourtant la question qu’on devrait se poser en premier.
rsync pour les gros volumes
rsync ne transfère que les différences entre fichiers, contrairement à cp qui recopie l’intégralité à chaque exécution. Sur un dossier de 500 Go où seuls quelques fichiers changent chaque jour, la différence de temps est énorme. L’option -u de rsync fonctionne d’ailleurs sur le même principe que cp -u : ne copier que le plus récent. Et rsync -a équivaut à -rlptgoD, soit permissions, propriétaire, groupe, liens symboliques et horodatage — un niveau de préservation comparable à cp -a, mais avec la synchronisation incrémentale en plus.
scp pour le transfert distant
scp utilise le protocole SSH pour un transfert chiffré entre deux machines, là où cp reste limité au système local. Dès qu’il faut envoyer un fichier vers un serveur distant, cp ne sert à rien : c’est scp ou rsync via SSH qu’il faut invoquer.
dd pour la copie bit à bit
dd copie des blocs de données bruts, sans se soucier du système de fichiers. Utile pour cloner un disque entier ou créer une image ISO bootable, mais totalement inadapté pour copier quelques fichiers texte. Dans mon expérience, dd reste réservé aux opérations disque bas niveau, jamais à la gestion de fichiers courante.
Erreurs courantes et bonnes pratiques avec cp
L’écrasement accidentel de fichiers reste l’erreur la plus fréquente. -i demande confirmation avant chaque remplacement, et -n refuse purement et simplement d’écraser un fichier existant, sans même demander. Sur un script automatisé, je préfère toujours -n à -i, qui bloquerait le script en attendant une réponse interactive.
La perte de permissions lors d’une copie simple sans -a est le deuxième piège classique. Un fichier exécutable copié sans préservation d’attributs peut perdre son droit d’exécution, cassant un script ou un cron sans message d’erreur évident.
Ce que personne ne dit (et qui change tout) : vérifier l’espace disque avant une copie récursive volumineuse évite bien des mauvaises surprises. Une commande df -h /destination avant de lancer un cp -r sur plusieurs gigaoctets prend cinq secondes et évite une copie tronquée.
Le bon sens entrepreneurial, c’est souvent aller à contre-courant des habitudes automatiques : plutôt que de retenir toutes les options par cœur, je garde cp -av source destination comme réflexe par défaut, sauf cas particulier. C’est cette combinaison qui préserve le plus et casse le moins, et c’est elle qu’il faut retenir en sortant de cet article sur la commande cp linux.



