L’une des tâches de base de l’administration d’un système de fichiers consiste à créer, modifier et supprimer différents types de fichiers et de répertoires. Connaître quelques outils et concepts de base pour la suppression de fichiers peut s’avérer utile et vous faire gagner du temps.

Linux offre plusieurs outils qui peuvent nous aider à accomplir des tâches de suppression de fichiers. Souvent, nous devons supprimer non pas un seul, mais plusieurs fichiers et répertoires, en fonction de certains critères. Il est utile de connaître quelques commandes courantes et leurs combinaisons pour mener à bien notre tâche.

  • Utilisez les commandes ci-dessous avec prudence, en particulier celles qui utilisent des expressions régulières ou des modèles de recherche avec la commande find. Une expression ou un modèle incorrect peut supprimer des données essentielles/fichiers système ou simplement des fichiers non souhaités.
  • Conservez toujours la dernière sauvegarde des données importantes et des fichiers système.
  • Soyez prudent avant d’exécuter de telles commandes, en particulier lorsque vous les exécutez avec Sudo ou en tant que superutilisateur (root).

Cette commande n’est pas très populaire. Pour supprimer définitivement un seul fichier, vous pouvez utiliser la commande unlink.

$ unlink {nom-de-fichier}

Supprimez un seul fichier

Il existe une commande plus couramment utilisée pour supprimer des fichiers, à savoir la commande rm, qui permet de supprimer un ou plusieurs fichiers simultanément.

$ rm {nom-de-fichier}

rm vous demande de confirmer la suppression des fichiers protégés en écriture, sinon il procède à la suppression directe du fichier. Pour que rm vous demande toujours de confirmer la suppression d’un fichier, utilisez l’option -i:

$ rm -i {nom-du-fichier}

la commanderm supprime les fichiers sans afficher de message à l’écran. Pour obtenir la liste de ce que la commande rm est en train de faire, utilisez rm avec l’option -v.

$ rm -v {nom-du-fichier}

Pour supprimer des fichiers protégés en écriture sans demander de confirmation, utilisez l’option -f.

$ rm -f {nom-du-fichier}

Suppression de plusieurs fichiers

Plusieurs fichiers peuvent être supprimés en spécifiant plusieurs noms de fichiers à rm en tant qu’arguments.

$ rm {nom-fichier-1} {nom-fichier-2} {nom-fichier-3} ... {nom-de-fichier-N}

rm prend également en charge les expressions régulières. Si vous souhaitez supprimer tous les fichiers nommés nom-fichier-*, vous pouvez utiliser :

$ rm nom-de-fichier-*

Vous pouvez également spécifier plusieurs fichiers à l’aide d’expressions régulières. Si vous souhaitez supprimer trois fichiers correspondant à nom-de-fichier-1, nom-de-fichier-2 et nom-de-fichier-3, vous pouvez utiliser quelque chose comme : $ rm nom-de-fichier-[nom-de-fichier-[nom-de-fichier] :

$ rm nom-de-fichier-[123]

Supprimez le répertoire

Un répertoire vide peut être supprimé à l’aide de la commande rm avec l’option -d.

$ rm -d {nom-de-répertoire}

Les options prises en charge pour la suppression de fichiers peuvent également être combinées avec la suppression de répertoires à l’aide de l’option -d. Par exemple :

$ rm -idv {nom-du-répertoire}

Pour supprimer un répertoire qui n’est pas vide, utilisez l’option -r.

$ rm -r {nom-du-répertoire}

Si vous ne souhaitez pas être invité à supprimer le répertoire et son contenu, utilisez l’option -rf. Cela effacera tout ce qui se trouve dans le répertoire, y compris le répertoire lui-même, sans aucune confirmation. Soyez prudent lorsque vous l’utilisez, en particulier en tant que root.

$ rm -rf {nom-du-répertoire}

Recherche et suppression de fichiers

Pour des besoins plus complexes, nous pouvons utiliser la commande find avec différentes options. Pour supprimer tous les fichiers correspondant au motif {motif} dans un chemin donné par {répertoire-à-rechercher}

$ find {dir-to-search} -type f -name {pattern} -exec rm -f {} \ ;

Exemple : $ find /var/tmp -type f

$ find /var/tmp -type f -nom "*.tmp" -exec rm -f {} \ ;

Si nous voulons supprimer tout ce qui correspond à un motif {motif}, y compris les répertoires à l’intérieur de {dir-à-rechercher}, nous pouvons modifier légèrement la commande ci-dessus comme suit :

$ find {dir-to-search} -name {modèle} -exec rm -rf {} \ ;

Les versions modernes de la commande find prennent en charge la fonction de suppression en interne. Ici, le drapeau -delete remplace la commande rm tandis que -depth demande à la commande find de traiter d’abord le contenu du répertoire avant le répertoire lui-même :

$ find {répertoire-à-rechercher} -type f -name {file-name-pattern} -depth -delete

L’exemple ci-dessus est plus efficace lorsque vous travaillez avec un grand nombre de fichiers, car il ne crée pas de nouveau processus externe pour la commande rm pour chaque fichier correspondant. Cependant, toutes les versions de la commande find ne prennent pas (encore) en charge l’option -delete. En guise d’alternative, nous avons la possibilité d’utiliser la commande xargs avec find, comme le montre l’exemple ci-dessous :

$ find {dir-to-search} -type f -name {pattern} -print0 | xargs -0 rm

Vous pouvez également utiliser le terminateur de la commande exec pour enchaîner tous les éléments trouvés par la commande find comme xargs :

$ find {dir-to-search} -nom {modèle} -exec rm -rf {} 

Par défaut, la commande find utilise le drapeau -print que nous n’écrivons généralement pas. Avec xargs, nous avons besoin d’éviter le caractère de nouvelle ligne entre chaque nom de fichier. C’est pourquoi l’option -print0 demande à find d’imprimer le caractère null après chaque nom de fichier trouvé.

De la même manière, nous spécifions -0 avec xargs pour que les deux commandes s’associent. La commande rm supprime le fichier transmis par l’entrée pipée de find. Par exemple, la commande ci-dessous recherchera et supprimera tous les fichiers *.tmp du répertoire personnel de l’utilisateur actuel (indiqué par le symbole ~ ).

$ find ~ -name "*.tmp" -print0 | xargs -0 rm

la commandefind offre plusieurs moyens de rechercher des fichiers et des répertoires, notamment la propriété, l’autorisation, l’horodatage, etc. Nous allons aborder quelques-unes de ces méthodes qui peuvent nous aider dans des tâches spécifiques de suppression de fichiers.

Recherche et suppression de fichiers par un utilisateur

Pour supprimer tout ce qui se trouve dans un répertoire donné appartenant à un utilisateur spécifique, utilisez :

$ find {répertoire-à-rechercher} -mindepth 1 -user {nom-utilisateur} -delete

Dans l’exemple ci-dessus, l’indicateur -mindepth avec la valeur 1 empêche la suppression du répertoire indiqué par {dir-to-search} s’il correspond au modèle et aux critères de recherche. Ou pour supprimer tout ce qui se trouve dans un répertoire donné appartenant à un groupe particulier, utilisez :

$ find {dir-to-search} -mindepth 1 -group {nom-groupe} -delete

Si vous ne souhaitez pas parcourir les sous-répertoires situés sous le chemin de recherche, vous avez également la possibilité d’utiliser -maxdepth avec la valeur de profondeur de répertoire appropriée.

Voici un exemple d’exécution :

$ find tempdir/ -mindepth 1 -maxdepth 1 -user abhisheknair -group abhisheknair -delete

Si vous souhaitez spécifier l’identifiant de l'utilisateur et l’identifiant du groupe à la place, vous pouvez essayer quelque chose comme :

$ find {dir-to-search} -mindepth 1 -uid {user-id} -gid {group-id} -delete

Recherche et suppression de répertoires vides

Pour supprimer tous les répertoires vides à l’intérieur d’un chemin donné {dir-to-search}, vous pouvez utiliser :

$ find {dir-to-search} -type d -empty -delete

En revanche, pour supprimer tous les fichiers vides à l’intérieur d’un chemin donné {dir-à-rechercher}, vous pouvez utiliser : $ find {dir-à-rechercher} type d -empty -delete

$ find {dir-to-search} -type f -empty -delete

Recherche et suppression de fichiers plus anciens que X

Il peut arriver que vous ayez besoin de supprimer des fichiers datant de plus de x jours. find dispose d’options permettant de lire les heures de création(ctime), d’accès(atime) et de modification(mtime) des fichiers. Nous pouvons utiliser l’option mtime avec find pour trouver et supprimer les fichiers modifiés il y a plus de x jours.

$ find {dir-to-search} -type f -mtime {X} -delete

Par exemple, pour supprimer tous les fichiers avec l’extension log dans /var/tmp avec une date de modification de 30 jours ou plus, nous pouvons utiliser :

$ find /var/tmp -name "*.log" -type f -mtime 30 -delete

Recherche et suppression de fichiers par permission

Désormais, nous pouvons également supprimer des fichiers en fonction d’une autorisation spécifique, comme par exemple : $ find {dir-to-search} -type f -mtime 30 -delete

$ find {dir-to-search} -name {pattern} -perm {NNN} -delete

Exemple : $ find /var/tmp -name -pattern} -delete

$ find /var/tmp -name "temp*" -perm 755 -delete

Ou si vous voulez utiliser une forme symbolique pour la permission, utilisez :

$ find {répertoire-à-rechercher} -name {pattern} -perm u={rwx},g={rwx},o={rwx} -supprimer

Exemple :

$ find /var/tmp -name "temp*" -perm u=rwx,g=rw,o=rw -delete

Récapitulation

Linux propose des commandes unlink, rm et rmdir qui sont simples et peuvent être facilement étendues à l’aide d’expressions régulières. Pour des besoins plus avancés, vous avez la possibilité d’utiliser une combinaison d’outils tels que find et xargs pour obtenir ce dont vous avez besoin. Outre les exemples présentés dans cet article, vous avez la possibilité d’utiliser find avec l’un des drapeaux disponibles pour personnaliser votre recherche. Consultez les pages de manuel des commandes respectives pour en savoir plus.

Exécutez toujours les commandes find sans les drapeaux rm ou -delete et analysez leur sortie pour savoir quels fichiers ou répertoires seront affectés par l’exécution d’une commande réelle. Une configuration et une politique de sauvegarde adéquates sont utiles non seulement en cas de suppression accidentelle, mais aussi en cas de défaillance du matériel et de cyber-attaques.