web-dev-qa-db-fra.com

`rm -rf` et `rm -r` ont les mêmes résultats

Gardez à l'esprit que je viens d'apprendre bash alors expliquez-moi en termes modérés.

rm -rf et rm -r semblent faire la même chose. Le tutoriel ( https://help.ubuntu.com/community/Beginners/BashScripting ) indique que -f est forcé et que l'ordinateur ne demandera pas l'autorisation de supprimer un fichier.

Pour tester cela, j'ai créé un fichier verrouillé mais -r et -rf obtiennent les mêmes résultats que NOT ne supprimant pas le fichier (autorisation refusée).

Pourquoi est-ce?

5
Starfox64

Dans Ubuntu , la commande rm se comporte comme prévu en supprimant les fichiers que nous possédons sans nous avertir lors de l'exécution avec l'option -f.

Exemple pour un fichier protégé en écriture:

:~/Test$ rm test.txt
rm: remove write-protected regular empty file ‘test.txt’? n
:~/Test$ rm -f test.txt
:~/Test$

Root sera capable de supprimer tous les fichiers indépendamment des autorisations. C'est pourquoi nous ne verrons peut-être pas de différence avec l'option -f lors de l'exécution de Sudo rm.

Nous devrions être conscients que le comportement des commandes Unix peut être différent sur un système d'exploitation différent.

Veillez également à vérifier votre commande lors de l'exécution récurrente de rm (-r). Cette commande, lorsqu'elle est émise par inadvertance sur le mauvais chemin, purgera de manière irréversible tous les fichiers qui s'y trouvent. Cela peut être dangereux pour la santé de votre système, et plus encore lorsque vous l'exécutez sans demander d'erreur (-f).

5
Takkat

Voici une explication de ce que font les deux options.

- f Supprime tous les fichiers (protégés en écriture ou non) dans un répertoire sans demander à l'utilisateur. Dans un répertoire protégé en écriture, toutefois, les fichiers ne sont jamais supprimés (quelles que soient leurs autorisations), mais aucun message ne s'affiche. Si vous tentez de supprimer un répertoire protégé en écriture, cette option ne supprimera pas un message d'erreur.

- r Supprimez récursivement les répertoires et les sous-répertoires de la liste des arguments. Le répertoire sera vidé de fichiers et supprimé. L'utilisateur est normalement invité à supprimer tous les fichiers protégés en écriture contenus dans le répertoire. Les fichiers protégés en écriture sont supprimés sans invite, toutefois, si l'option -f est utilisée ou si l'entrée standard n'est pas un terminal et l'option -i n'est pas utilisée. Les liens symboliques rencontrés avec cette option ne seront pas traversés. Si vous tentez de supprimer un répertoire non vide protégé en écriture, l'utilitaire échouera toujours (même si l'option -f est utilisée), ce qui génère un message d'erreur.à propos de rm

Voir aussi Référence des commandes

4
Mitch

Soyons clairs:

  • rm -rf directory signifie force (ne posez pas de questions, faites-le simplement) la suppression récursive du répertoire .
  • rm -r directory signifie une tentative de suppression du répertoire récursif .

C'est ce que man rm dit:

-f, --force
       ignore nonexistent files and arguments, never Prompt
[...]
-r, -R, --recursive
       remove directories and their contents recursively

Une autre bonne information de la page de manuel:

[...] si un fichier est non inscriptible, l’entrée standard est un terminal et 
 , l’option -f ou --force n’est pas donnée , ou l'option -i ou 
 - interactive = toujours est donnée,  rm  invite l'utilisateur à indiquer si 
 pour supprimer le fichier. Si la réponse n'est pas affirmative, le fichier est ignoré.

Bien sûr, si vous n’avez pas l’autorisation de supprimer/supprimer un fichier, vous obtiendrez une erreur rm: cannot remove ‘file_name’: Permission denied. L'option -f ne reste pas pour supprimer les fichiers pour lesquels vous ne disposez d'aucune permission!

2
Radu Rădeanu

On dirait que vous n'avez pas les privilèges pour supprimer ce fichier, peut-être que le compte administrateur n'est pas root. Le problème ne devrait pas être résolu.

Activer la racine: http://support.Apple.com/kb/ht1528

De toute façon, OSX n'est pas Ubuntu et ce n'est pas Linux, donc les choses peuvent être différentes là-bas, mieux vaut demander dans certains forums OSX ...

1
innerand