Lorsqu'un PC modifie un fichier, supprime-t-il le fichier d'origine?

55

Si code.txt(ou quelque fichier que ce soit) est édité et sauvegardé, j'ai deux idées sur la manière dont un PC gérerait le processus:

  1. Le PC supprime code.txtcomplètement et crée une nouvelle code.txt(version modifiée) à partir de zéro.

  2. Le PC édite une partie de l'hex de code.txt. Donc, aucune suppression ne se produit.

Quelle idée représente le fonctionnement des ordinateurs?

Homme de bureau
la source
Salutations! A partir de l’excellente réponse fournie par l’utilisateur Grawity, voici quelques questions de clarification:
18
@ HaakonDahl quelles questions de clarification? Vous avez posté rien.
Le grand canard
Dangit. Je dois attendre que je revienne sur mon PC. Mais l'essentiel est de savoir quel niveau - matériel, système de fichiers, système d'exploitation ou application? Et quelle application?
Pourquoi cela vous importe-t-il? Même les programmes qui créent un "nouveau" fichier changeront probablement l'heure de la création afin qu'elle corresponde à l'original. La seule différence visible serait le numéro d'inode (ou un concept équivalent) qui pourrait avoir de l'importance (par exemple, si vous avez des liens physiques, ils seront "désynchronisés").
Bakuriu
1
Voter pour fermer cette question car trop large. Tout dépend du système d'exploitation, des logiciels et des capacités du système de fichiers sous-jacent.
JakeGould le

Réponses:

121

Cela pourrait être l'un ou l'autre - cela dépend de l'éditeur de texte utilisé.

Le concept de «fichier texte» n'est pas intégré aux ordinateurs: chaque système d'exploitation peut gérer les fichiers différemment et chaque éditeur de texte peut utiliser ces fichiers différemment.

En pratique, vous trouverez des éditeurs de texte dotés des deux mécanismes. Pratiquement tous les systèmes d'exploitation autorisent l'écrasement direct du contenu d'un fichier existant. Par conséquent, des éditeurs simples tels que Notepad demandent simplement au système d'exploitation d'écrire directement dans le fichier d'origine. Donc, pour des raisons de fiabilité, de nombreux éditeurs sauvegardent délibérément les données mises à jour dans un nouveau fichier et suppriment l'original.

(Je pense que les mises à jour sur place sont plus courantes parmi les éditeurs hexadécimaux, où la plupart des modifications n'insèrent pas / suppriment des octets, mais ne modifient que les emplacements existants. Un fichier de réécriture complet n'est donc pas nécessaire.)

Il existe même un troisième mode de fonctionnement: l’éditeur peut d’abord faire une copie de sauvegarde de l’ancien fichier, puis écrire directement de nouvelles données dans le fichier.


Cela dépend également du système de fichiers qui conserve le fichier. Avec la plupart des systèmes de fichiers traditionnels, si un programme demande d'écrire dans un fichier existant, le système de fichiers écrasera simplement les anciennes données sur place.

Cependant, certains systèmes de fichiers ne fonctionnent en mode « copy-on-write », où de nouvelles données sont toujours écrites dans un autre endroit, si le programme le veuille ou non. Là encore, cela présente l’avantage possible d’être plus fiable car un changement interrompu peut être totalement annulé.

Dans certains systèmes de fichiers (tels que Btrfs ou ext4), il s'agit d'une fonctionnalité facultative. dans d’autres (par exemple, des systèmes de fichiers structurés en journaux), il fait partie de la conception principale.

grawity
la source
30
Ce n'est pas seulement au niveau du système de fichiers. La mémoire flash, par exemple, doit effacer un bloc avant de pouvoir y écrire. Ainsi, dans la pratique, il écrit souvent dans des fichiers en écrivant simplement la nouvelle modification dans un nouveau bloc et en l'invalidant sur l'ancien bloc. En ayant ce genre de choses gérées automatiquement par le périphérique lui-même, le système d'exploitation peut simplement utiliser un système de fichiers de disque dur normal.
Trlkly
7
@trlkly: tous les dispositifs de mémoire flash modernes sont divisés en régions d'effacement qui sont des ordres de grandeur supérieurs à ceux d'un secteur de disque et ne peuvent pas recycler une partie d'une telle région sans tout effacer. Par conséquent, si une région contient 32 secteurs de données obsolètes et 224 secteurs de données utiles, elle devra copier les 224 secteurs de données utiles ailleurs avant de pouvoir libérer de l'espace parmi les secteurs obsolètes. Les systèmes d'exploitation modernes utilisent une commande "trim" pour indiquer les secteurs de disque dont le contenu peut être abandonné si le bloc sur lequel ils se trouvent est recyclé.
Supercat
Certains éditeurs choisissent au moment de l'exécution le comportement à utiliser (par exemple, selon qu'un fichier ne contient qu'une entrée de répertoire, ou plusieurs).
Toby Speight le
2
De nombreux éditeurs liront simplement le fichier en mémoire et y apporteront toutes les modifications. (Peut-être automatiquement enregistrer périodiquement une copie d'un travail en cours sur un autre.) Le fichier d'origine n'est pas modifié du tout tant que vous n'avez pas enregistré les modifications, par exemple avec la commande de vi: w.
jamesqf
4
@jamesqf: La question était de savoir ce qui se passe lorsqu'un fichier est "édité et enregistré " ...
Grawity
6

Puisque vous parlez de "sauvegarder le fichier", le fichier ne sera pas édité sur place sur le disque.

Avec un fichier dans un système de fichiers habituel, il y a deux choses à considérer. Il y a l'entrée de répertoire, puis les données de fichier réelles quelque part sur le disque.

Lorsque vous éditez un fichier dans un éditeur normal, les données du fichier sont chargées dans la RAM et toute édition ne se produit que sur cette copie des données. Ensuite, lorsque vous enregistrez le fichier, il existe essentiellement deux options:

Option 1: le fichier d'origine est renommé , ainsi l'entrée de répertoire d'origine et les données d'origine resteront sur le disque. Le changement de nom peut par exemple remplacer le suffixe de fichier par .bak(en supprimant généralement tout .bakfichier précédent ). Ensuite, un nouveau fichier est créé et les données de la mémoire y sont écrites.

Option 2: l'entrée de répertoire d'origine est modifiée pour que le fichier soit tronqué à une longueur de 0. La zone du disque utilisée pour les données de fichier sera marquée comme étant inutilisée, mais l'ancien contenu du fichier restera sur le disque jusqu'à ce qu'il soit écrasé. Ensuite, de nouvelles données sont écrites. Dans ce cas, l'entrée de répertoire est conservée, seules les données pointées sont modifiées.

Il existe quelques variantes possibles, une commune étant, les données éditées sont d'abord stockées dans un fichier temporaire, donc si votre ordinateur tombe en panne à ce stade, le fichier d'origine ne sera probablement pas endommagé. Ensuite, le fichier d'origine est supprimé et le nouveau fichier renommé avec le nom correct. Ou bien, le fichier original pourrait simplement être supprimé avant d'écrire le nouveau.

Votre théorie 1 est donc proche de ce que font la plupart des éditeurs.


Ensuite, il y a des cas spéciaux. Le plus évident est un éditeur de disque, qui permet de lire et de réécrire des octets directement sur le disque. Un autre peut être un fichier de base de données, où les enregistrements peuvent avoir une taille fixe, il est donc facile d'écraser un enregistrement. Mais les données ne peuvent pas être ajoutées au milieu d'un fichier et, par conséquent, en modifiant des fichiers texte ou tout autre fichier dans lequel la longueur des données au milieu du fichier change généralement, ces astuces ne peuvent pas vraiment être utilisées.

Votre théorie 2 est donc possible dans certains cas, mais les éditeurs de texte normaux et autres ne le font pas.

Hyde
la source
1
"Puisque vous parlez de" sauvegarder le fichier ", le fichier ne sera pas édité sur place sur le disque." - Je pense que chaque fois que vous "ouvrez", modifiez et réécrivez les modifications sur le disque, vous "enregistrez le fichier", que le fichier soit "écrit à la place" (écrasé) ou l'ancien fichier. est supprimé ou renommé et un nouveau fichier est créé. Dans les deux cas, vous décidez généralement, à un moment donné, de "sauvegarder les modifications" ou de "rejeter les modifications".
Kevin Fegan
@KevinFegan Eh bien, vous pouvez ouvrir un fichier dans un éditeur de disque ou hexagonal approprié, modifier le contenu et enregistrer les modifications . Ou bien, vous pouvez ouvrir un fichier de base de données (tel qu'un fichier de base de données SQLite), modifier la base de données et faire valider les modifications apportées au fichier. Donc, ouvrir un fichier pour modification peut vouloir dire le modifier sur place, mais "enregistrer un fichier" implique généralement la création d'un nouveau fichier, et ces autres alternatives ont une action nommée différemment pour enregistrer les modifications.
Hyde
4

Historiquement, les disques étaient directement contrôlés par le système d'exploitation, qui à son tour était contrôlé par l'application. Dans ce contexte, la théorie 2 était la principale méthode de travail des ordinateurs personnels. le système d'exploitation a spécifié un emplacement physique pour la mise des données, et il avait le contrôle total sur ce processus. En conséquence, les systèmes de fichiers anciens comportaient une table "secteur défectueux". Par conséquent, après la perte de vos données, l'ordinateur pouvait vous informer que les données étaient perdues et marquer le secteur comme inutilisable pour éviter davantage de pertes de données. La numérisation et la défragmentation du disque étaient à l’ordre du jour.

Cependant, après le tournant du siècle, nous sommes passés à LBA, de sorte que le système d’exploitation fait simplement référence au bloc "logique" qu’il souhaite lire ou écrire. Le disque dur lui-même disposait désormais de l'intelligence nécessaire pour mélanger les données derrière le système d'exploitation sans s'en rendre compte. Cela signifiait une meilleure fiabilité, car les secteurs non vérifiés pouvaient simplement être déplacés vers un nouvel emplacement physique sans affecter la connaissance du système d'exploitation de l'emplacement de ces données.

Dans le matériel moderne, les unités de disque "à plateaux" écrasent généralement ce qui existait auparavant avec les nouvelles données entrantes, et optionnellement remappent le LBA si le secteur semble ne pas pouvoir conserver les données (le secteur est endommagé ou usé). Les lecteurs "Flash" effacent généralement les anciennes cellules, puis écrivent des données dans de nouvelles cellules, un processus connu sous le nom de nivellement par usure.

Dans les deux cas, cela est possible car la capacité inutilisée dépasse toujours la valeur indiquée. Ce surapprovisionnement permet au lecteur d’avoir une durée de vie plus longue que la technologie peu fiable de la technologie du siècle précédent. Le mode LBA permet d'extraire le support physique du système d'exploitation de sorte que le lecteur lui-même puisse prendre toutes les mesures que le lecteur juge nécessaires pour éviter la perte de données.

Au niveau de l'application, vous ouvrez généralement un fichier en mode "WRITE", qui demande au système d'exploitation d'effacer le fichier ("supprimez" le contenu mais pas le fichier lui-même), puis écrivez de nouvelles données. Tout cela est mis en mémoire tampon au niveau du système d'exploitation, puis envoyé au lecteur, ce qui apporte les modifications demandées.

Etant donné ces informations, la théorie 1 correspond à ce qui se passe techniquement au niveau de la programmation de l'application, du moins par défaut, car il existe également un mode "write with append" (écriture avec ajout) pour éviter d'effacer le contenu du fichier. Le système d'exploitation lui-même présentera les modifications à apporter plutôt à la théorie 2, mais résumées via LBA. La commande elle-même fera alors probablement quelque chose qui mélange la théorie 1 et la théorie 2.

Oui. C'est compliqué et très dépendant du fabricant, du développeur de système d'exploitation et du développeur d'application. Cependant, toute cette complexité vise à rendre le stockage des données plus fiable tout en améliorant l'utilisation de l'énergie / la durée de vie de la batterie.

Phyrfox
la source
3

Dépend. Si je comprends bien, lorsque vous enregistrez des fichiers .doc(non .docx) avec les options d’ enregistrement rapide activées, les modifications apportées au document depuis le dernier enregistrement sont conservées dans le fichier existant.

mil
la source
1

De manière générale, un ordinateur allouera la mémoire sur laquelle le fichier d'origine réside en tant que "supprimé", mais cela signifie simplement qu'il n'apparaîtra plus dans votre navigateur de fichiers et que les cellules de la mémoire où il a été écrit sont autorisées. être écrasé à l'avenir.

Le fait que le nouveau fichier soit écrit au même endroit dépend d'un certain nombre de facteurs, principalement le logiciel que vous utilisez et la manière dont il est conçu pour utiliser la mémoire.

GigaJoules
la source
2
Je pense que vous pourriez confondre "mémoire" avec la notion d'opérations de dissociation de système de fichiers. Et cela n’a vraiment rien à voir avec la question posée, qui demande si des fichiers concrets sont écrasés ou s’il existe une sorte de mise à jour bidirectionnelle.
Eh bien, si un logiciel a été conçu spécialement pour cela, il est possible, bien que, autant que je sache, c'est généralement ainsi que fonctionnent le stockage à long terme et la RAM.
GigaJoules
Malheureusement, votre explication (dans la mesure où je peux déchiffrer ce que vous voulez dire) n’est décidément pas comment "stockage à long terme et RAM" fonctionnent. Mais, au bout du compte, cela n’a guère à voir avec la question qui nous occupe. Ce qui, je le répète, demande comment le logiciel met à jour les informations textuelles dans un fichier sur un dispositif informatique à usage général avec un système de fichiers moderne typique. Nous n'avons pas à considérer comment quelque chose comme "mémoire" fonctionne ou ne fonctionne pas pour répondre à cette question.
1

Espérons que cela ne soit pas redondant, un petit détail supplémentaire.

Le PC n’a généralement pas beaucoup de contrôle sur la façon dont un fichier est édité, c’est l’application qui le fait.

Quelques exemples de la manière dont certaines applications peuvent gérer l'édition:

Le Bloc-notes charge l'intégralité du document en mémoire, puis enregistre le tout dans votre document d'origine (ou dans un nouveau que vous spécifiez).

Presque tous les autres petits éditeurs enregistrent un "nouveau" fichier lors de la modification, puis le copient sur le document d'origine, en le supprimant lorsque vous "enregistrez".

Les éditeurs de documents volumineux que vous pouvez utiliser pour éditer un livre ont tendance à lire / modifier une section de document car ils peuvent éditer des documents plus volumineux que la mémoire. Ceux-ci peuvent en réalité éditer le document "en place". Ils pourraient réécrire une page et laisser le reste seul. Ceux-ci ont souvent une représentation indexée sur disque plus complexe qu'un simple fichier .txt pour permettre ce comportement.

Les grands éditeurs peuvent également simplement sauvegarder des fichiers temporaires avec des "mises à jour" dans votre document original. Lorsque vous effectuez votre sauvegarde finale, il peut les fusionner et réécrire votre document.

La plupart des éditeurs peuvent être configurés pour laisser la version existante intacte et en créer une nouvelle avec vos modifications (conserver les anciennes versions).

En ce qui concerne la partie de votre question concernant le rôle d’un "PC", certains systèmes d’exploitation se souviendront de chaque version d’un fichier et en créeront toujours un nouveau. C’est assez rare de nos jours, mais je me souviens des vieux "Mini Ordinateurs" (ce que nous appellerions maintenant des mainframes) où chaque fichier avait une version à la fin comme "File.text.1" et qu’il s’ajoutait à la version à chaque fois. l'a édité. Ce type de comportement s’appliquerait mieux à un lecteur de bande ou à un CD-ROM où il était tout à fait irréaliste d’écraser l’ancienne version.

Bill K
la source
1

2 n'est pas impossible, mais c'est stupide pour diverses raisons.

Un éditeur de fichier texte bien écrit va:

  1. Ecrivez un fichier avec un nom différent et le nouveau contenu. Si l'original était myfile.txt, le nouveau pourrait êtremyfile.txt.new
  2. 1. Si vous avez réussi, renommez l’original en fichier de sauvegarde, par exemple myfile.txt~
  3. Renommez le nouveau fichier avec le nom d'origine myfile.txt
  4. Si tout a réussi, supprimez le fichier de sauvegarde. De nombreux rédacteurs la quittent malgré tout, afin que l'utilisateur puisse récupérer s'il découvre rapidement que ce qu'il a fait avec l'éditeur n'est pas ce qu'il a voulu faire.

Si l'ordinateur se bloque ou manque d'espace sur le disque au cours de ce qui précède, il n'y a pas de situation dans laquelle les anciens et les nouveaux fichiers sont perdus ou ne sont que partiellement sauvegardés.

nigel222
la source
Le comportement de réécriture, tronquée et in situ de nombreux éditeurs de texte pour systèmes d'exploitation non IBM / non Microsoft au cours des cinquante dernières années n'est pas "stupide".
JdeBP
1

Réponse courte

Cela dépend énormément de votre éditeur, des logiciels / pilotes sous-jacents et du stockage.


Réponse paranoïaque

Peut être récupéré à moins que vous ne le supprimiez définitivement.


Longue réponse

Il manque des informations dans votre question (logiciel, matériel, etc.). Par conséquent, au lieu de vous répondre moi-même, je vous aiderai à répondre à votre question vous-même.

Cela dépend de quelques facteurs:

  1. Editeur : Si le logiciel d'édition remplace les blocs du même fichier, il peut être réécrit. Et cela peut également dépendre des paramètres de l'éditeur et des types de fichiers. Notez que le mot peut être en italique. Même lorsque l’éditeur réécrit le fichier, il peut toujours rester intact (lisez les points suivants).

  2. Logiciels / pilotes / système de fichiers sous-jacents : Le fichier reste inchangé s'il existe d'autres logiciels / pilotes sous- jacents qui empêchent le fichier initial d'être écrasé. Ces types de logiciels comprennent les systèmes de gestion de versions, les disques différentiels virtuels et certains logiciels de sauvegarde. Un exemple est Git , qui conservera les blocs de fichiers d'origine et créera un nouveau fichier contenant les blocs modifiés.

  3. Stockage :

    • Le stockage lui-même peut écrire des blocs modifiés sur un nouveau secteur et marquer les anciens blocs comme "libres". Ensuite, le fichier restera physiquement sur le stockage (et est récupérable), à ​​moins qu'il ne soit écrasé par un autre fichier. Exemple: le stockage SSD moderne , qui peut le faire au niveau matériel.

    • Il existe des moyens de récupérer des données à partir de disques magnétiques d'un disque dur mécanique typique, même lorsque les données ont été écrasées . Et il y a des entreprises spécialisées.

Donc, si vous voulez obtenir une réponse concrète à savoir si votre fichier sera supprimé ou non, vous devez également indiquer quel éditeur, logiciel / matériel de sauvegarde / VCS et stockage vous utilisez. Si j'ai manqué un point, n'hésitez pas à modifier la réponse.


Comment s'assurer que le fichier supprimé est réellement supprimé de la mémoire?

C'est probablement la prochaine question que vous vous poserez la question. Il existe de nombreuses solutions logicielles / matérielles. Puisque SuperUser n’est pas destiné à la promotion de logiciels / matériels, au lieu de dire les noms, je vous dirai comment les trouver: recherchez des mots-clés "supprimer définitivement le fichier". Pour des correspondances plus exactes, mentionnez votre système d'exploitation, le type de disque dur ou toute autre information dont vous disposez.

XX
la source
1

Un comportement que personne n’a encore mentionné est un comportement pertinent de certaines versions des systèmes d’exploitation MS Windows est également lié au système de fichiers utilisé.

Le comportement fonctionne comme suit: lorsque vous renommez ou supprimez un fichier, si vous créez (recréez) un (nouveau) fichier portant le même nom dans les 15 secondes suivant la suppression (ou le renommage) du fichier d'origine, la date de création / l'horodatage est copié à partir du fichier d'origine. Essentiellement, le nouveau fichier "devient" l'ancien fichier / original.

Dans ce cas, peu importe si l’application enregistre les modifications apportées au fichier avec votre méthode n ° 1: créer un nouveau fichier portant le même nom, ou avec votre méthode n ° 2: éditer / mettre à jour le fichier en place (fichier non supprimé). Quoi qu'il en soit, le fichier final ressemble (presque) à tous les égards, comme le fichier d'origine. Le seul problème est qu’il occupera probablement un espace différent sur le lecteur physique (clusters / secteurs) et que l’entrée de répertoire du fichier sera probablement dans un emplacement différent.

Comme je l'ai dit, il s'agit du comportement de certaines versions de MS Windows / systèmes de fichiers. Je ne sais pas quelle version de Windows et quel système de fichiers ont démarré, et si cela reste le comportement des versions les plus récentes. Si je devais deviner, je dirais qu'il a été introduit sous Windows NT et Windows XP et qu'il reste le comportement de Windows 10, et (encore incertain), le comportement nécessite un système de fichiers Fat32 ou NTFS (et peut-être plus récent).

Kevin Fegan
la source
En réalité, cela a de l'importance, car NTFS prend en charge les liens physiques et l'une des différences bien connues entre ces méthodes est l'effet sur les fichiers à liens multiples. Le tunneling de système de fichiers existe depuis au moins Windows NT 5.0.
JdeBP
@JdeBP - Oui, nous sommes d'accord. C'est pourquoi j'ai dit # 1) "Presque" dans "le fichier final ressemble à (presque) tous les sens, comme le fichier d'origine", et # 2) l'entrée de répertoire dans un emplacement différent.
Kevin Fegan
Vous n'êtes pas d'accord si vous affirmez, comme vous le faites, que cela n'a pas d'importance.
JdeBP