Récemment, j'ai accidentellement fait rm
sur un ensemble de fichiers et cela m'a fait penser où exactement ces fichiers finissent?
Autrement dit, lorsque vous travaillez avec une interface graphique, les fichiers supprimés vont dans la corbeille. Quel est l'équivalent de rm
et existe-t-il un moyen d'annuler une commande rm
?
Nulle part, disparu, disparu. Eh bien, plus précisément, le fichier est dissocié. Les données sont toujours présentes sur le disque, mais le lien vers celles-ci est supprimé. Auparavant, il était possible de récupérer les données, mais de nos jours les métadonnées sont effacées et rien n'est récupérable.
Il n'y a pas de corbeille pour rm
, et il ne devrait pas y en avoir. Si vous avez besoin d'une corbeille, vous devez utiliser une interface de niveau supérieur. Il existe un utilitaire de ligne de commande dans trash-cli
sur Ubuntu, mais la plupart du temps, les gestionnaires de fichiers GUI comme Nautilus ou Dolphin sont utilisés pour fournir une poubelle standard. La poubelle est elle-même standard. Les fichiers mis à la poubelle dans Dolphin seront visibles dans la corbeille de Nautilus.
Les fichiers sont généralement déplacés vers un endroit comme ~/.local/share/Trash/files/
lorsqu'il est mis à la poubelle. La commande rm
sous UNIX/Linux est comparable à del
sous DOS/Windows qui supprime également et ne pas se déplace fichiers dans la Corbeille. Une autre chose à réaliser est que le déplacement d'un fichier à travers des systèmes de fichiers comme sur votre disque USB depuis votre disque dur est en réalité 1) une copie des données du fichier suivi de 2) la dissociation du fichier d'origine. Vous ne voudriez pas que votre corbeille soit remplie de ces copies supplémentaires.
Pour ext3/ext4, vous pouvez essayer de récupérer des fichiers en utilisant des outils comme extundelete ou ext3grep , ou même aller messing avec les structures de bas niveau - manuellement (pas pour les faibles de cœur); pour de nombreux systèmes de fichiers, vous pouvez essayer de rechercher les blocs non encore écrasés par certains modèles (par exemple magicrescue peut rechercher des en-têtes JPEG, entre autres). Notez que ceux-ci utilisent des heuristiques pour récupérer les fichiers à partir des métadonnées laissées derrière, donc la récupération complète n'est pas garantie - c'est plus un pari de dernière chance (car ceux-ci nécessitent que certaines traces des fichiers restent dans le journal et que les blocs n'ont pas encore été écrasés).
Donc, à toutes fins utiles, les fichiers supprimés avec rm
ont disparu - vous pouvez essayer la nécromancie offerte par ces outils, mais ne n'en dépendent pas: ce sont les outils à essayer quand tout le reste échoue. Mieux vaut creuser vos dernières sauvegardes (vous avez fait des sauvegardes, non? Eh bien, vivez et apprenez ...).
Concernant l'annulation des effets de rm
:
Étant donné que la plupart des systèmes de fichiers suppriment uniquement la référence aux données et indiquent que les blocs sont libres, vous pouvez essayer de localiser vos données en lecture directement depuis l'appareil. Avec un peu de chance, les blocs contenant vos fichiers n'ont pas été réclamés pour autre chose.
Cela suppose que vous avez quelque chose d'assez unique à rechercher, que vous avez root
sur le système et je suppose que l'assemblage de tout ce qui s'étend sur plus d'un bloc de système de fichiers (probablement 4k) pourrait se révéler assez laborieux si le le système de fichiers n'a pas réussi à placer le (s) fichier (s) dans des blocs contigus.
J'ai réussi à récupérer le contenu de quelques fichiers en texte brut en exécutant des chaînes sur le périphérique sur lequel se trouvait le système de fichiers et en utilisant grep
en recherchant quelque chose dans ces fichiers avec un contexte large (-C
). (Et peu de temps après cet incident, la société a décidé de consacrer des ressources à la mise en œuvre des sauvegardes)
Chaque fois que vous supprimez un fichier à l'aide de la commande rm
, les données du fichier ne sont jamais supprimées. En d'autres termes, les blocs du système de fichiers contenant des données sont toujours là.
Ce qui se produit, c'est lorsque vous exécutez la commande rm
, le système marque l'inode appartenant à ce fichier comme inutilisé et les blocs de données de ce fichier également comme inutilisés (mais pas effacés). Cependant ext3
met à zéro la plupart des champs de l'inode, lorsqu'un fichier est supprimé.
Ce marquage normal des inutilisés se fait pour la vitesse ... Sinon pour la suppression cela prendra un peu plus de temps. C'est pourquoi vous avez peut-être remarqué que la suppression de fichiers même volumineux est plus rapide (vous pouvez récupérer les données si ces blocs de données ne sont pas remplacés).
Plus d'informations: Inode Structure , Comment fonctionne la suppression de fichiers
Dans les systèmes de fichiers de style Unix (y compris sous Linux), les fichiers ne sont pas vraiment "à" un endroit particulier. Au lieu de cela, le système utilise des liens physiques pour pointer en morceaux de ce qui équivaut à une grosse masse de données. Ainsi, lorsque vous créez un fichier, vous créez également son premier lien physique: celui qui réside réellement à l'endroit où vous avez "enregistré" le fichier. Si vous créez plus de liens physiques, pour autant que le système le sache, le fichier existe en fait à plusieurs endroits à la fois.
Lorsque vous "supprimez" un fichier, vous ne supprimez normalement que le lien fixe qui existait à l'endroit que vous avez spécifié. C'est pourquoi l'appel système pour supprimer des fichiers s'appelle unlink()
. Le système ne supprimera pas réellement le fichier tant qu'il n'y aura plus de liens durs dessus. Mais une fois que le dernier lien dur est détruit, les données le sont aussi.
Alors, où vont les fichiers que vous supprimez? S'il existe encore des liens physiques, ces fichiers se trouvent là où se trouvent les liens physiques que vous n'avez pas supprimés. S'il n'y a plus de liens physiques, les fichiers ont disparu.
Regardez également dans ~/.snapshot si le fichier a été récemment supprimé.