web-dev-qa-db-fra.com

Fichiers supprimés récupérés sur Mac par ligne de commande

J'ai accidentellement supprimé un fichier en exécutant:

rm -rf ./Desktop/myScript.sh

Je pense qu'il est possible de récupérer le fichier, car la commande rm est temporairement supprimée. Comment récupérer le fichier supprimé sur Mac OSX?

25
cat_minhv0

MacOS est un OS Unix et rm signifie "au revoir". L'interface graphique vous permet de déplacer un fichier vers la corbeille (que vous pouvez ensuite récupérer) mais ce n'est pas ce que vous avez fait. Si vous avez une sauvegarde (par exemple, vous avez Time Machine en cours d'exécution), vous êtes enregistré.

Clarification

À strictement parler (comme le souligne @ire_and_curses), un rm supprime simplement l'entrée de répertoire du fichier tandis que en laissant les blocs de disque qu'il a utilisés, intacts. Si vous pouviez suspendre le système de fichiers dans lequel se trouvait le fichier, il existe des méthodes avancées par lesquelles vous pouvez essayer de redécouvrir le contenu de ces blocs. Il existe également des outils de récupération qui peuvent être achetés pour récupérer la perte. Le problème central est que rien d'autre ne réutilise les blocs de disque représentés par votre fichier.

Le MacOS possède également une commande de suppression sécurisée (srm) qui écrase un fichier avant qu'il ne soit unlinked, ce qui le rend irrécupérable. J'utilise le terme unlink car il s'agit de l'appel système sous-jacent associé à la commande rm d'un shell. Cela prépare le terrain pour la prochaine partie de cette discussion, ci-dessous.

Sidenote

[Je devrais m'empresser d'ajouter que même si vous écrasez un disque plusieurs fois, il existe des moyens de lire ce qui a été écrit une douzaine de fois auparavant. Pour désinfecter correctement un disque à éliminer, il faut vraiment un bain d'acide, un gros marteau et un broyeur. ]

unlinking un fichier diminue le nombre de liens inode du fichier. Si cette valeur atteint zéro, le fichier est supprimé du répertoire du système de fichiers et ses blocs de disques libérés pour être réutilisés. Cela se produit uniquement lorsque aucun processus n'a ouvert le fichier. Il est souvent déroutant pour les administrateurs de constater qu'un système de fichiers utilise de très grandes quantités d'espace qui ne peuvent pas être prises en compte par la simple somme des blocs de disque (avec quelque chose comme du). Le plus souvent, la raison en est qu'un fichier ouvert a été supprimé, de sorte qu'il n'est plus représenté dans son répertoire. La raison en est que les blocs de disques restent inutilisés jusqu'à la fin du dernier processus utilisant le fichier.

Ouvrir un fichier et immédiatement unlinking est en fait une pratique courante pour créer des fichiers temporaires sécurisés. Des outils comme lsof peuvent exposer ces fichiers autrement invisibles si vous recherchez des fichiers avec un nombre de liens (NLINK) de zéro.

Sous Unix et Linux (dont MacOS est un Unix de marque), un rm suit la philosophie Unix du "do-it" sans fanfare s'il le peut. Autrement dit, si vous avez les autorisations pour supprimer un fichier (c'est-à-dire que votre répertoire autorise l'écriture), rm fait exactement ce que vous demandez. Vous aimerez peut-être créer un alias Shell rm='rm -i' qui vous invite à confirmer avant d'effectuer l'opération. En utilisant le -f basculer avec rm le remplace si nécessaire. Un rm aliasé est plus utile lorsque vous faites glob supprime comme rm *.log. Autrement dit, vous avez la possibilité de sauter un fichier dans la liste.

28
JRFerguson

En fonction de votre contenu, mais vous pouvez utiliser différents logiciels tiers pour ce faire, par exemple:

et beaucoup plus.

Vous pouvez trouver plus d'applications en tapant "récupération de données" dans l'App Store.


Un moyen plus avancé consiste à démarrer votre OSX en mode de récupération (ou à démonter votre partition si vous le pouvez) et à la rechercher manuellement (si vous vous souvenez d'un texte spécifique de votre script).

Un exemple:

diskutil list
Sudo cat /dev/disk0s2 | strings | grep -C20 "my_stuff"
4
kenorb