Où vont les files lorsque la command rm est émise?

Récemment, j'ai accidentellement fait rm sur un set de files et cela m'a fait penser où exactement ces files finissent?

C'est-à-dire, lorsque vous travaillez avec une interface graphique, les files supprimés vont à la corbeille. Quel est l'équivalent de rm et y a-t-il un moyen de défaire une command rm ?

Nulle part, disparu. Eh bien, plus précisément, le file est dissocié. Les données sont toujours là sur le disque, mais le lien est supprimé. Il était possible de récupérer datatables, mais aujourd'hui les métadonnées sont effacées et rien n'est récupérable. Il n'y a pas de poubelle pour rm , et il ne devrait pas y en avoir. Si vous avez besoin d'une poubelle, vous devriez utiliser une interface de niveau supérieur. Il y a un utilitaire de command line dans trash-cli sur Ubuntu, mais la plupart du time les gestionnaires de files GUI comme Nautilus ou Dolphin sont utilisés pour fournir une poubelle standard. La poubelle est standard elle-même. Les files placés dans Dolphin seront visibles dans la Corbeille de Nautilus. Les files sont généralement déplacés vers quelque part comme ~/.local/share/Trash/files/ lorsqu'ils sont supprimés. La command rm sous UNIX / Linux est comparable à del sous DOS / Windows, qui supprime également et ne transfère pas les files dans la corbeille. Une autre chose à réaliser est que déplacer un file à travers des filesystems comme votre disque USB à partir de votre disque dur est vraiment une copy des données du file suivie par la dissociation du file original. Vous ne voudriez pas que votre corbeille soit remplie avec ces copys supplémentaires.

Pour ext3 / ext4, vous pouvez essayer de récupérer des files à l'aide d'outils comme extundelete ou ext3grep , ou même décaler manuellement les structures de bas niveau (pas pour les pusillanimes); pour de nombreux filesystems, vous pouvez essayer de searchr les blocs non encore écrasés par certains templates (par exemple, magicrescue peut searchr des en-têtes JPEG, entre autres). Notez que ceux-ci utilisent des heuristiques pour récupérer les files à partir des métadonnées laissées derrière, de sorte que la récupération complète n'est pas garantie – il s'agit plutôt d'un pari de la dernière chance (car ils nécessitent que certaines traces des files restnt dans le journal et que les blocs n'ont pas encore été écrasés).

Donc, à tous égards, les files supprimés avec rm ont disparu – vous pouvez essayer une telle nécromancie que ces outils offrent, mais n'en dépendent pas: ce sont les outils à essayer quand tout le rest échoue. Mieux creuser vos dernières sauvegardes (vous avez fait des sauvegardes, n'est-ce pas? Et bien, en direct et apprenez …).

En ce qui concerne la défaite des effets de rm :

Étant donné que la plupart des filesystems ne suppriment que la reference aux données et indiquent que les blocs sont gratuits, vous pouvez essayer de localiser vos données directement depuis le périphérique. Avec un peu de chance, les blocs contenant vos files n'ont pas été revendiqués pour autre chose.

Cela suppose que vous ayez quelque chose d'assez particulier à searchr, que vous ayez une root sur le système et que je devine que tout ce qui recouvre plus d'un bloc de système de files (probablement 4k) pourrait s'avérer laborieux si le système de files ne fonctionnait pas réussir à mettre le (s) file (s) dans des blocs contigus.

J'ai récupéré avec succès le contenu de quelques files text en lançant des strings sur le périphérique sur lequel le système de files était grep et en utilisant grep recherchant quelque chose de ces files avec un grand context ( -C ). (Et peu de time après cet incident, l'entreprise a décidé de consacrer des ressources à la mise en place de sauvegardes)

Chaque fois que vous supprimez un file en utilisant la command rm , datatables du file ne sont jamais supprimées. En d'autres termes, les blocs du système de files contenant des données sont toujours là.

Ce qui se produit est lorsque vous exécutez la command rm , le système marque l'inode appartenant à ce file comme inutilisé et les blocs de données de ce file aussi inutilisés (mais non effacés). Cependant ext3 zéro la plupart des champs de l'inode, lorsqu'un file est supprimé.

Ce marquage normal de non utilisé est fait pour la vitesse … Sinon pour la suppression il faudra plus de time. C'est pourquoi vous avez peut-être remarqué que la suppression de files volumineux est plus rapide (vous pouvez récupérer datatables si ces blocs de données ne sont pas écrasés).

Plus d'info: Structure Inode , Comment fonctionne la suppression de files

Dans les filesystems de style Unix (y compris sous Linux), les files ne sont pas vraiment "à" un endroit particulier. Au lieu de cela, le système utilise des liens durs pour pointer en morceaux de ce qui équivaut à une grosse goutte de données. Ainsi, lorsque vous créez un file, vous créez également son premier lien: celui qui réside réellement à l'endroit où vous avez «sauvegardé» le file. Si vous faites plus de liens physiques, le file existe dans plusieurs endroits à la fois, pour autant que le système le sache.

Lorsque vous «supprimez» un file, vous ne supprimez en fait que le lien qui existait à l'endroit que vous avez spécifié. C'est pourquoi l'appel système pour supprimer des files s'appelle unlink() . Le système ne supprimera pas réellement le file tant qu'il ne restra plus de liens. Mais une fois que le dernier lien dur est détruit, datatables le sont aussi.

Alors, où les files que vous supprimez vont-ils? S'il y a encore des liens, ils sont partout où les liens durs que vous n'avez pas supprimés sont. S'il n'y a plus de liens, les files ont disparu.

Regardez aussi dans ~ / .snapshot si le file a été récemment supprimé.