Est-ce que 'rm -rf' supprime simplement des fichiers?

16

J'ai récemment couru rm -rf, non rm -rf /, mais il ne s'est rien passé. J'obtiens juste un résultat comme celui-ci:

Terminal

J'avais peur parce que je craignais que cela n'ait pu supprimer certains fichiers, mais ce n'est pas le cas. Assurez-vous simplement que cela aurait pu supprimer des fichiers de mon répertoire?

user3439894
la source
36
Si vous n'êtes pas sûr (certain à 100%), n'exécutez pas de commande.
Solar Mike
5
Ne tapez jamais de commandes que vous ne comprenez pas. Tout ce dont vous aviez besoin était un. ou un / et vous allez supprimer BEAUCOUP de choses.
Nelson
18
Si vous souhaitez expérimenter avec des commandes potentiellement dangereuses, envisagez d'installer une machine virtuelle.
musicman523
6
Expérimentez tout ce que vous voulez (tant que vos données sont sauvegardées en toute sécurité). Ce n'est qu'un logiciel et vous pouvez toujours le réinstaller en cas de problème. Ne laissez personne vous entraîner à avoir peur de l'ordinateur.
hobbs
3
Exécutez absolument une commande si vous n'êtes pas certain à 100%. Il n'y a que de nombreuses façons d'apprendre, et en fait, les exécuter en fait partie. Caveat emptor et ont des sauvegardes, évidemment, et utilisent des machines virtuelles et tout ça. Mais ne rien faire par peur ne fera pas grand-chose pour vous aider à grandir. Il devrait être évident de faire très attention (c.-à-d. rm), Mais pour de nombreuses / la plupart des autres commandes, par exemple toutes les commandes de manipulation de texte basées sur des canaux, les essayer souvent est la plus simple / simple que vous puissiez faire. Avec l'étude de la page de manuel, évidemment.
AnoE

Réponses:

49

Non, rm -rfne supprimera aucun fichier car vous n'avez pas fourni d'argument à la commande.

fd0
la source
5
Et à cause de -f, ce n'est pas une erreur de l'exécuter sans arguments. rm -rse plaindra de "l'opérande manquant", mais -fsupprime cela et supprime également les erreurs pour les fichiers qui n'existent pas. (Ainsi, par exemple, un script pourrait utiliser rm -rf /foo/bar/*pour vider un répertoire qui pourrait déjà être vide, sans avoir 2>/dev/nullà écraser les erreurs.)
Peter Cordes
34

Depuis la page de manuel :

rm supprime chaque fichier spécifié.

Cela signifie que vous pouvez l'utiliser pour supprimer une liste de fichiers à la fois, par exemple avec

rm -rf test1.txt test2.txt

Heureusement, tout ce que vous avez fait était de passer une liste de fichiers vide , donc elle n'a rien supprimé. Aussi, ce que dit @SolarMike : si vous ne savez pas ce que fait une commande, ne l'exécutez pas . macOS est conçu pour «cacher» toutes les opérations Unix dangereuses (mais potentiellement puissantes) à l'utilisateur final.

Glorfindel
la source
7
Pour info, l' -rindicateur n'est pas nécessaire, sauf si vous supprimez les répertoires de manière récursive. S'il ne s'agit que de fichiers, cela rmsuffit - le -ffor for do ne vous demande pas "êtes-vous sûr" pour chaque fichier.
Tim S.
9
En outre, le -f conduit à ce que le message d'utilisation ne s'affiche pas lorsque vous l'utilisez mal. C'est pourquoi il n'y avait pas de sortie du tout lors de l'exécution de l'OP rm -rf. S'ils avaient exécuté 'rm -r' sans les fichiers / répertoires spécifiés, ils auraient reçu ce message d'utilisation: JanNash ~ $ usage: rm [-f | -i] [-dPRrvW] file ... unlink file
Jan Nash
2
@barrycarter Ce n'est absolument pas vrai - il essaiera toujours de supprimer /, il sautera simplement le fichier inexistant xyz*(qui ne se développera tout simplement pas en raison de l'absence de correspondance).
duveteux
3
@barrycarter Ce comportement dépend de la configuration de globbing de votre shell. Au moins dans la valeur par défaut de bash sur macOS, il supprime en fait aet bpour moi - même sans préciser -f. Exécutez les mêmes commandes à la echo rm -f a b c*place pour voir le comportement réel.
moelleux
2
@barrycarter et moelleux: ce qui se passe dépend du fait que la variable shell nonomatch soit définie ou non.
Thomas Padron-McCarthy
13

Pour le débutant profane / Linux / Unix:

rm seul ne fait rien parce que vous ne lui avez pas dit de quoi vous débarrasser.

man rm peut expliquer la plupart de cela, si vous le comprenez.

-r signifie récursif, comme dans "tout inclure dans les sous-dossiers"

-f signifie forcer, mode "ne me demandez pas de confirmer"

rm -rf(NE FAITES PAS CECI)/ dirait supprimer tout sous /(le dossier racine) sans vérifier (sur les versions récentes de macOS, SIP vous empêchera de supprimer macOS lui-même, mais beaucoup d'autres choses seront supprimées)

rm [some file name] supprimerait simplement ce fichier.

rm -rf /home/myuser/bookssupprimerait tout dans myuserle booksdossier de, ainsi que le dossier.

s1ns3nt
la source
6
De nos jours, vous devez faire rm -rf / --no-preserve-rootpour tirer correctement votre jambe.
Gallifreyan
1
@Gallifreyan Existe-t-il un moyen de vous tirer correctement sur la jambe?
PascalVKooten
1
On dit que celui-ci fonctionne bien. Je n'en connais pas d'autre :)
Gallifreyan
1
@Gallifreyan sur macOS? pastebin.com/aVAsNcKC indique le contraire
nohillside
@Gallifreyan: find / -deletedevrait "fonctionner" (c'est-à-dire réellement supprimer des choses, alors ne l'exécutez pas.)
Peter Cordes
4

Non mais si vous souhaitez supprimer Voici un exemple:

Après avoir lancé Terminal (dans votre dossier / Applications / Utilitaires), tapez cd ~ / Desktop pour accéder au répertoire Desktop. Si vous aviez ici un fichier nommé MyFile.rtf que vous n'avez jamais, jamais voulu revoir, vous pouvez exécuter cette commande:

rm MyFile.rtf

Lorsque vous appuyez sur Retour, le fichier disparaîtra! Ce sera parti, toast, histoire. Vous ne pouvez pas le récupérer.

alvaro
la source
En fait, rm supprime toutes les références du fichier, ne nettoie pas le disque dur du fichier en écrasant chaque octet, si je comprends bien la documentation.
NoBugs
@NoBugs Mais en toute honnêteté, c'est ainsi que fonctionnent toutes les «suppressions» modernes, Windows inclus. Si la fonction de suppression écrase chaque octet, elle sera annoncée comme telle (principalement parce qu'elle prend plus de temps et n'est pas nécessaire la plupart du temps).
Insane