Cours Linux / Créer, copier, déplacer et supprimer des fichiers

Sous Linux, mkdir crée des répertoires, touch peut préparer un fichier vide, cp copie et mv déplace ou renomme. rm retire des fichiers et rmdir enlève des répertoires vides. Pour apprendre leurs différences, utilisez un espace neuf réservé à l’exercice et contrôlez les noms et contenus après chaque opération.

Les exemples utilisent Bash et les outils GNU avec un compte ordinaire. Ils travaillent uniquement sur de nouveaux fichiers de démonstration. Le cours se repérer et se déplacer dans les répertoires explique comment vérifier le contexte avant d’agir.

Préparer un répertoire neuf et deux sous-répertoires

Ouvrez le terminal de votre Linux de pratique. Le dossier linux-course-07-practice doit être nouveau. S’il existe, ne le videz pas pour recommencer : choisissez un autre nom à la ligne candidat et reprenez la préparation. La commande mkdir sans -p refuse de réutiliser un nom existant.

espace=
candidat="$HOME/linux-course-07-practice"
if mkdir -- "$candidat"; then
  espace=$candidat
  ls -ld -- "$espace"
else
  printf '%s\n' 'Création impossible : ne pas poursuivre dans un dossier existant.' >&2
fi

En cas de réussite, ls affiche les informations du nouveau répertoire. La variable espace reçoit son chemin. En cas d’échec, espace reste vide et le message demande de s’arrêter. La documentation GNU de mkdir distingue ce comportement de -p, qui accepte des répertoires déjà présents.

Gardez le même terminal pour toutes les étapes. Les blocs suivants commencent par test -n "$espace", qui vérifie que cette variable n’est pas vide. Les && ne lancent la suite que si la commande précédente réussit. Cette vérification suppose que vous conservez la variable créée ci-dessus sans lui attribuer un autre dossier.

test -n "$espace" &&
mkdir -- "$espace/drafts" "$espace/archive" &&
ls -1 -- "$espace"

Le résultat attendu contient deux noms, archive et drafts. Les guillemets conservent chaque chemin en un argument, même si le dossier personnel contient des espaces. Si une étape signale une erreur, vérifiez l’état obtenu avant de poursuivre : une commande portant sur plusieurs objets peut avoir réalisé seulement une partie de son travail.

Créer un fichier vide, puis y écrire une note

touch crée un fichier vide si le nom n’existe pas, dans son utilisation ordinaire. Sur un fichier existant, il met à jour des horodatages sans en remplacer le contenu. Il ne faut donc pas l’interpréter comme une commande qui garantit toujours la création d’un nouvel objet.

test -n "$espace" &&
touch -- "$espace/drafts/notes.txt" &&
ls -l -- "$espace/drafts/notes.txt"

Le nouveau fichier doit avoir une taille de 0 octet ; propriétaire, permissions et date dépendent de votre système. Le manuel GNU de touch explique sa fonction de gestion des horodatages.

Pour que la copie soit plus facile à observer, écrivons maintenant une courte note dans ce fichier neuf :

test -n "$espace" &&
printf '%s\n' 'Première note' > "$espace/drafts/notes.txt" &&
cat -- "$espace/drafts/notes.txt"

cat affiche Première note. Le symbole > ouvre la destination pour en remplacer le contenu : utilisez ce bloc uniquement à l’étape prévue, sur le fichier neuf de l’exercice. touch n’avait pas écrit cette phrase ; c’est printf avec la redirection qui vient de le faire.

Copier et vérifier l’indépendance de la copie

cp conserve la source et écrit une copie à la destination. Dans la forme à deux chemins ci-dessous, le premier désigne la source et le second le fichier voulu dans archive :

test -n "$espace" &&
cp -i -- "$espace/drafts/notes.txt" "$espace/archive/notes.txt" &&
ls -1 -- "$espace/drafts" &&
ls -1 -- "$espace/archive"

Chaque liste contient notes.txt : il existe une entrée dans drafts et une autre dans archive. L’option -i de GNU cp demande confirmation avant d’écraser un fichier de destination existant. Dans un espace réellement neuf à cette étape, cette destination n’existe pas et aucune question d’écrasement n’est attendue.

Si une question apparaît, relisez la source et la destination au lieu d’approuver machinalement. Après un refus ou une erreur, vérifiez les fichiers ; ne déduisez pas leur contenu de la seule apparition d’une nouvelle invite. Les détails de cette option figurent dans le manuel GNU de cp.

Une copie ordinaire ne se synchronise pas automatiquement avec sa source. Ajoutez une ligne uniquement à l’original, puis lisez les deux fichiers :

test -n "$espace" &&
printf '%s\n' 'Ajout dans l’original' >> "$espace/drafts/notes.txt" &&
cat -- "$espace/drafts/notes.txt" &&
cat -- "$espace/archive/notes.txt"

>> ajoute à la fin au lieu de remplacer le contenu. Le premier cat affiche deux lignes, Première note puis Ajout dans l’original. Le second affiche seulement Première note. Vous avez ainsi vérifié une différence de contenu, en plus de la présence de deux noms.

Renommer ou déplacer avec mv

mv change le nom ou l’emplacement de l’objet visé. Ici, source et destination restent dans drafts : l’opération renomme l’original, tandis que le fichier copié dans archive conserve son nom.

test -n "$espace" &&
mv -i -- "$espace/drafts/notes.txt" "$espace/drafts/notes-old.txt" &&
ls -1 -- "$espace/drafts" &&
ls -1 -- "$espace/archive"

La première liste contient notes-old.txt et la seconde notes.txt. Le fichier renommé conserve ici ses deux lignes ; la copie conserve sa première ligne. -i demande confirmation avant le remplacement d’une destination existante. Le manuel GNU de mv décrit aussi le cas d’un déplacement entre systèmes de fichiers, qui peut nécessiter une copie suivie du retrait de la source.

Opération de l’exercice Source après réussite Destination après réussite
cp drafts/notes.txt vers archive/notes.txt Reste présente Contient la copie au moment de l’opération
Ajout dans drafts/notes.txt Contient une ligne supplémentaire La copie archive/notes.txt ne change pas
mv drafts/notes.txt vers drafts/notes-old.txt L’ancien nom notes.txt n’est plus présent dans drafts notes-old.txt porte le contenu de l’original

Le type de la destination compte : si le dernier argument de cp ou mv est un répertoire existant, le programme peut placer la source à l’intérieur sous son nom d’origine. Examinez donc la destination avec ls -ld avant de supposer qu’elle représente un nouveau nom de fichier. Une sauvegarde utile doit également être conservée avant une opération qui pourrait remplacer des données importantes.

Retirer le fichier de démonstration et le répertoire vide

rm retire le nom de fichier demandé et n’utilise pas normalement la corbeille du bureau. Vérifiez d’abord le chemin de ce fichier de démonstration, puis demandez une confirmation avec -i :

test -n "$espace" &&
ls -l -- "$espace/drafts/notes-old.txt" &&
rm -i -- "$espace/drafts/notes-old.txt"

La question doit viser exactement notes-old.txt dans drafts de votre espace d’exercice. Répondez affirmativement uniquement si vous souhaitez retirer ce fichier jetable ; la forme de la réponse dépend de la langue de l’invite. Une réponse négative conserve le fichier. Le manuel GNU de rm explique notamment le comportement interactif.

Si vous avez accepté le retrait, drafts est maintenant vide. rmdir peut alors enlever ce répertoire :

test -n "$espace" &&
rmdir -- "$espace/drafts" &&
ls -1 -- "$espace"

La dernière liste doit contenir archive. Si vous avez refusé le retrait du fichier, rmdir échoue parce que drafts contient encore notes-old.txt ; c’est une protection utile, pas une raison d’utiliser une suppression récursive.

archive contient encore notes.txt. Pour observer explicitement le refus d’un répertoire non vide, cette commande doit échouer dans l’état attendu :

test -n "$espace" && rmdir -- "$espace/archive"

Le message doit indiquer que le répertoire n’est pas vide. La documentation GNU de rmdir précise cette condition. Conservez archive/notes.txt pour revoir l’exercice ; aucune suppression globale du dossier de pratique n’est nécessaire.

Contrôler ce qui a changé avant de continuer

  • Création : le dossier de départ était neuf et les sous-répertoires ont les noms attendus.
  • Copie : la source existe encore et le contenu de la destination a été contrôlé.
  • Déplacement : le nom ou l’emplacement attendu a changé, sans supposer une synchronisation avec une autre copie.
  • Retrait : la confirmation vise un fichier jetable précisément identifié ; un répertoire non vide n’est pas supprimé par rmdir.

Les commandes ne fournissent pas toutes une annulation et plusieurs opérations successives ne forment pas une transaction unique. Après un message d’erreur, contrôlez l’état réel avant de relancer tout le bloc. N’ajoutez pas sudo ou une option de suppression forcée pour contourner un résultat que vous n’avez pas encore compris.

Les guides détaillés de touch, mkdir, cp, mv, rm, rmdir sont également disponibles, actuellement en anglais. Ils développent les options propres à chaque commande ; l’exercice ci-dessus permet déjà de réaliser et de vérifier les opérations de base.