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).
Supprimez en utilisant unlink
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.