2 votes

Comment puis-je découvrir quels fichiers ont été supprimés par `rm -rf` ?

J'ai eu un petit problème lors de l'exécution d'un script : ce script lit un fichier de configuration sur $HOME, et il avait ~/Downloads à l'intérieur.

Au lieu de sauvegarder un fichier à l'intérieur de ~/Downloads lorsque j'ai exécuté le script, puisque je l'ai exécuté à l'intérieur de ~/Library, il a créé ~/Library/~/Downloads.

À l'intérieur de ~/Library, j'ai fait rm -rf ~. Après 1-2s, j'ai réalisé mon erreur et ai arrêté en utilisant ˆ-C - cela supprimait mon $HOME.

Je sais que certains fichiers ont été supprimés, mais je ne sais pas lesquels. Certains fichiers cachés (bash_functions, bash_aliases) ont été supprimés et j'avais une sauvegarde, mais certains fichiers sur $HOME ne sont pas sauvegardés.

J'ai fait une vérification rapide de mes fichiers (en regardant les dates de modification du dossier sur $HOME), cela semblait correct, mais je sais que je ne peux pas faire confiance à mes yeux en utilisant cette approche.

Je sais que si je change un fichier à l'intérieur d'un dossier, Mac changera le drapeau "modifié" pour ce dossier, mais seulement si un enfant direct de ce dossier a été modifié. Exemple :

~/Downloads
    - file.txt
    /Mp3
        - music.mp3

Donc, si vous modifiez file.txt, ~/Downloads aura son drapeau modifié, mais si vous modifiez music.mp3, ~/Downloads n'aura pas son drapeau modifié.

Donc voici le problème : je ne sais pas comment rm -rf commence à supprimer mes fichiers. Est-ce séquentiel ? Est-ce dans un ordre arbitraire ? Est-ce que ça a commencé à supprimer ~/Pictures/Wedding et est soudainement allé à ~/Videos ? Je ne sais pas. Je crois qu'il ne supprime pas séquentiellement, donc maintenant je peux avoir un répertoire vraiment profond sans fichiers importants après mon erreur de rm -rf.

Y a-t-il un endroit sur le Mac où tous les fichiers supprimés avec rm -rf sont conservés (juste les noms de fichiers) ? Je n'ai rien trouvé de tel, donc j'ai fait

find ~ -type d -mtime -1 > modified_folders.txt

sur mon terminal puisque j'ai fait la mauvaise rm -rf aujourd'hui. Le résultat de la commande find, les dossiers modifiés (si vous supprimez un fichier, Mac change le drapeau modifié de son dossier parent direct) semble ne pas avoir une structure "arbitraire profonde" comme ~/Pictures/Personal/Birthday/2010/Cake... puis-je alors supposer que rm -rf n'a pas touché les mauvais fichiers et que j'ai pu arrêter l'armageddon juste en arrêtant rm -rf ~ après 1-2s (donc il a juste supprimé quelques fichiers cachés sur $HOME) ?

(J'ai déjà redémarré ma machine, elle fonctionne bien. Je suis sur Snow Leopard, donc tmutil n'est pas une solution je pense...)

(Je connais déjà quelques solutions de récupération comme TestDisk existent, mais j'essaie de l'utiliser comme dernière approche (si je me trompe dans mes suppositions sur le snippet find).

4voto

Brian Stewart Points 4553

Il n'y a aucun moyen de savoir avec certitude exactement quels fichiers ont été supprimés. Il n'y a pas de liste stockée, pas de corbeille, c'est unix (bien BSD) et vous n'avez pas de belles deuxièmes chances avec rm -rf

Comme vous l'avez vu cependant, vous pouvez déduire ce qui a pu être supprimé en observant le comportement de la commande rm.

J'ai créé un dossier avec quelques sous-dossiers, y compris certains avec un point au début du nom et j'ai jeté quelques fichiers dans chaque.

L'ordre est toujours alphabétique avec les répertoires cachés, préfixés par un point, qui sont supprimés en premier.

Si vous comparez une sauvegarde avec la structure de votre répertoire, une fois que vous avez parcouru alphabétiquement et commencé à trouver des fichiers dans la sauvegarde qui sont toujours sur votre disque principal, je pense que vous pouvez être sûr de n'avoir manqué aucun autre fichier.

3voto

Oskar Points 1242

rm supprime la structure d'inode / les entrées de répertoire sans créer de journal. Vous seriez sauvé si vous avez activé l'audit de fichier, mais ce n'est pas une chose par défaut sur Mac OS X.

À mon avis de la situation décrite, vous avez les options suivantes :

  • utiliser un logiciel de récupération de fichiers pour tenter de trouver des fragments de fichiers ou de données qui ressemblent à des entrées de fichiers / inodes et filtrer ces résultats pour des fichiers potentiellement modifiés dans la plage horaire de suppression.
  • comparer la structure du répertoire actuel avec une sauvegarde récente (tmutil compare serait un outil idéal pour Lion, mais vous pouvez utiliser BackupLoupe ou d'autres si votre sauvegarde est TimeMachine).

2voto

shsteimer Points 8749

Y a-t-il un endroit sur le mac où tous les fichiers supprimés avec rm -rf sont conservés (juste les noms de fichiers) ?

Comme d'autres l'ont déjà souligné : un tel endroit n'existe pas à moins que vous n'ayez configuré votre système de fichiers avec des audits et des snapshots.

Cependant, vous pouvez utiliser Time Machine pour savoir ce qui a changé. Vous faisiez une sauvegarde régulière de Time Machine de votre disque qui contenait votre répertoire personnel, n'est-ce pas ?

Si c'est le cas : ouvrez Time Machine pour votre répertoire personnel et revenez en arrière juste avant d'avoir exécuté le rm. Vous devriez pouvoir voir les fichiers qui ont changé ou qui sont manquants. Et même les restaurer. Ce n'est pas une vue exceptionnelle dans le système, mais ça dépanne.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X