Que fait rm -rf?

25

Que fait rm -rflorsqu'il est utilisé pour supprimer des fichiers ou des répertoires?

Comment les options -ret -ffonctionnent-elles ensemble?

Dis moi pourquoi
la source
6
Pourquoi cela n'a-t-il pas été demandé auparavant ?
Dan Dascalescu
16
@DanDascalescu Parce qu'il est trivialement répondu en lisant la page de manuel, qui devrait être le premier port d'escale de quiconque pour répondre à une question comme celle-ci.
David Richerby
9
Essayez-le et voyez. (Spoiler: ne le faites pas.)
imallett
3
Par Golly! Cette question doit être une farce de DevRobot! Comment pourriez-vous atteindre votre niveau de karma sans jamais consulter les pages de manuel. Maintenant ... êtes-vous humain?!
Cbhihe
2
Se lit comme une farce en effet. Comme si quelqu'un essayait de demander, "la pluie est-elle faite de H2O?" (Une bonne réponse serait: normalement oui, mais à l'avenir, une fois que l'homme aura détruit la moitié de la flore de la Terre, 50% de celle-ci se sera transformée en acide (comme dans les pluies acides))
syntaxerror

Réponses:

52

La commande rm -rfest la même que rm -r -f.

À partir de rmla page de manuel de (tapez man rmun terminal pour le voir) -r:

remove directories and their contents recursively

Et -ffait:

ignore nonexistent files and arguments, never prompt

Donc, en combinaison, ils font les deux.

En fait, c'est une commande très dangereuse car elle supprimera récursivement tout ce qui se trouve dans le répertoire que vous choisissez (ou supprimera simplement le fichier que vous choisissez), et elle le fera sans jamais vous le demander.

Veuillez utiliser cette commande avec précaution!

Fabby
la source
@Paul, que ferait la barre oblique? J'utilise cette commande pour supprimer souvent les répertoires et sans barre oblique.
Octopus
1
@Octopus, la barre oblique indique à elle seule le répertoire racine. rm -rf /supprimera théoriquement tous les fichiers de votre ordinateur qui résident dans un répertoire pour lequel vous disposez d'une autorisation d'écriture. Si vous êtes root, cela signifie anéantir tout le système. (En pratique, cela ne fonctionne pas parce que GNU rma un cas spécial qui refuse d'autoriser à rm -r /moins que vous ne le disiez également --no-preserve-root.)
cjm
10
Tout de même, je ne recommande pas d'essayer rm -rf /de voir s'il est correctement pris.
cjm
2
@mattburnett C'est aussi dangereux dans une VM: vous pouvez avoir des montages qui ne sont pas locaux sur la VM. En particulier, je pense qu'il est assez courant de monter l'un des répertoires de la machine hôte sur la machine virtuelle pour partager des fichiers entre l'hôte et la machine virtuelle.
hvd
1
@mattburnett J'ai des machines virtuelles. Je n'ai pas de machine virtuelle en quarantaine. Je ne lance simplement pas d'exécutables inconnus. :)
hvd
22

En plus de la bonne réponse précédente, je voudrais vous apprendre à pêcher:

Lorsque vous n'êtes pas sûr du fonctionnement d'une commande, de ses options et de ses fonctions, ouvrez un terminal et tapez

man <command>

Par exemple:

man rm

Une fois sur place, vous pouvez rechercher l'option. Une page de manuel peut être très longue à lire, donc dans le type de terminal:

/<pattern>

Ainsi, par exemple, faire:

/-f

Vous pouvez facilement atterrir sur:

-f, --force
              ignore nonexistent files and arguments, never prompt

Pour -r do:

-r, -R, --recursive
              remove directories and their contents recursively

Vous pouvez vous déplacer entre les résultats de la recherche en utilisant n(suivant) et N(précédent).

Prime:

Si vous devez faire quelque chose mais que vous ne connaissez pas le nom de la commande, utilisez apropospour rechercher dans les pages de manuel:

apropos <pattern>

Par exemple:

apropos directory listing
Federico Ponzi
la source
8

rmest l'abréviation de remove. L' rindicateur consiste à supprimer les répertoires et leur contenu de manière récursive et à fforcer les moyens, et il remplace toutes les invites de confirmation.

Chris
la source
3
Strictement parlant, ce r flag is to remove directories n'est pas juste ... il supprime les répertoires avec son contenu, c'est une opération récursive ... selon vos mots, cela ne supprimerait que les répertoires, qu'en est-il des sous-répertoires, des fichiers en dessous? comme l'entrée de répertoire contient uniquement le mappage nom-inode, cela n'a aucun sens ..
heemayl
Vous avez raison, je vais modifier ma réponse.
Chris
1
-r supprime les répertoires et leur contenu de manière récursive.
Jim Balter du
3

Comme cela a déjà été mentionné, rm -rf <ARG>est destiné à supprimer de force les fichiers de manière récursive, où se <ARG>trouve un répertoire (bien qu'il puisse être un fichier très bien).

L'intérêt de -r(suppression récursive) est de rmne pas pouvoir supprimer les répertoires s'ils ne sont pas vides, simplement parce que l'appel système sous-jacent qui rmutilise ( unlink ) ne fonctionne que sur les répertoires vides. Ainsi, ce que fait l' -rindicateur, c'est la recherche en profondeur d'abord descendant dans les répertoires et supprimant les fichiers en premier, et seulement ensuite lorsque le répertoire est vide - il le supprimera. Ce même effet est obtenu via une findcommande avec -deleteindicateur (lorsque vous ne spécifiez pas le filtrage par-type , mais c'est une autre histoire).

Quant à -f, il fait deux choses - l'une empêche de demander si vous souhaitez supprimer le fichier ou non (comme lorsque vous supprimez un fichier appartenant à un autre utilisateur de votre répertoire, il n'affichera pas d' rm: remove write-protected regular empty file 'f1'?invite de confirmation) et ignore fichiers inexistants. Ainsi, par exemple, avec un nom de fichier inexistant, vous devriez obtenir une rm: cannot remove 'nonexistent': No such file or directoryerreur.

Voir également:

Sergiy Kolodyazhnyy
la source