Quando un PC modifica un file, elimina il file originale?


55

Se code.txt(o qualunque file) viene modificato e salvato, ho due idee su come un PC gestirà il processo:

  1. Il PC si elimina code.txtcompletamente e crea una nuova code.txt(versione modificata) da zero.

  2. Il PC modifica parte dell'esagono di code.txt. Quindi non avviene l'eliminazione.

Quale idea rappresenta come funzionano i computer?


Saluti! A partire dall'eccellente risposta fornita dall'utente Grawity, ecco alcune domande

18
@HaakonDahl quali domande chiarificatrici? Non hai pubblicato nulla.
The Great Duck

Dangit. Devo aspettare fino a quando torno sul mio PC. Ma l'essenza è a quale livello: hardware, filesystem, sistema operativo o app? E quale app?

Perché ti importa? Anche i programmi che creano un "nuovo" file probabilmente cambieranno il tempo di creazione in modo che corrisponda all'originale. L'unica differenza visibile sarebbe il numero di inode (o un concetto equivalente) che può importare (ad esempio se hai dei collegamenti fissi che potrebbero "non essere sincronizzati").
Bakuriu,

1
Votare per chiudere questa domanda come troppo ampia. Tutto dipende dal sistema operativo, dal software e dalle capacità del file system sottostante.
Jake, il

Risposte:


121

Potrebbe essere - dipende dall'editor di testo utilizzato.

Il concetto di "file di testo" non è incorporato nei computer: ogni sistema operativo può gestire i file in modo diverso e ciascun editor di testo può utilizzare tali file in modo diverso.

In pratica, troverai editor di testo che hanno entrambi i meccanismi. Praticamente tutti i sistemi operativi consentono la sovrascrittura diretta del contenuto di un file esistente, quindi semplici editor come Blocco note di solito chiedono semplicemente al sistema operativo di scrivere direttamente nel file originale, poiché è più facile da implementare, ma rischioso se si perde potenza a metà scrittura. Quindi, per motivi di affidabilità, molti editor salvano deliberatamente i dati aggiornati in un nuovo file ed eliminano l'originale.

(Penso che gli aggiornamenti sul posto siano più comuni tra gli editor esadecimali, in cui la maggior parte delle modifiche non inserisce / elimina byte ma cambia solo le posizioni esistenti, quindi non è necessario un file di riscrittura completo.)

Esiste anche una terza modalità operativa: l'editor potrebbe prima fare una copia di backup del vecchio file, quindi scrivere direttamente nuovi dati nel file.


Dipende anche dal filesystem che mantiene il file. Con la maggior parte dei filesystem tradizionali, se un programma chiede di scrivere su un file esistente, il filesystem sovrascriverà semplicemente i vecchi dati sul posto.

Tuttavia, alcuni filesystem fanno opera in modalità "copy-on-write", in cui i nuovi dati è sempre scritto in una posizione diversa, se il programma lo voglia o no. Ancora una volta, questo ha il possibile vantaggio di una maggiore affidabilità perché una modifica interrotta può essere completamente annullata.

In alcuni filesystem (come Btrfs o ext4) questa è una funzione opzionale; in altri (ad es. filesystem strutturati in log) fa parte del progetto principale.


30
Non è solo a livello di filesystem. La memoria flash, ad esempio, deve cancellare un blocco prima di poter scrivere su di esso. Quindi, in pratica, spesso scriverà sui file semplicemente scrivendo la nuova modifica in un nuovo blocco e invalidandola sul vecchio blocco. Avendo questo genere di cose gestito automaticamente dal dispositivo stesso, il sistema operativo può semplicemente utilizzare un normale file system del disco rigido.
trlkly

7
@trlkly: Tutti i moderni dispositivi di memoria flash sono divisi in regioni di cancellazione che sono ordini di grandezza maggiori di un settore del disco e non possono riciclare alcuna porzione di tale regione senza cancellarla. Di conseguenza, se una regione contiene 32 settori obsoleti di dati e 224 settori di dati utili, dovrà copiare i 224 settori di dati utili da qualche altra parte prima di poter liberare lo spazio da qualsiasi settore obsoleto. I moderni sistemi operativi utilizzano un comando "trim" per indicare i settori del disco i cui contenuti possono essere abbandonati se il blocco su cui si trovano viene riciclato.
supercat

Alcuni editor scelgono in fase di esecuzione quale comportamento utilizzare (ad esempio a seconda che un file abbia una sola voce di directory che lo denomina o molti).
Toby Speight,

2
Molti editor leggono semplicemente il file in memoria e fanno tutte le modifiche lì. (Forse salvare automaticamente una copia del lavoro in corso su un altro.) Il file originale non viene modificato fino a quando non si salvano le modifiche, ad esempio con il comando vi: w.
jamesqf

4
@jamesqf: Beh, la domanda era su cosa succede quando un file viene "modificato e salvato " ...
grawity

6

Dato che stai parlando di "salvare il file", il file non verrà modificato sul posto sul disco.

Con un file in un normale filesystem, ci sono due cose da considerare. C'è la voce della directory e poi ci sono i dati del file effettivo da qualche parte sul disco.

Quando modifichi un file in un normale editor, questo caricherà i dati del file nella RAM e qualsiasi modifica avrà luogo su quella copia dei dati. Quindi, quando si salva il file, ci sono sostanzialmente due opzioni:

Opzione 1: il file originale viene rinominato , quindi sia la voce della directory originale che i dati originali rimarranno sul disco. Ad esempio, la ridenominazione potrebbe cambiare il suffisso del file in .bak(rimuovendo qualsiasi .bakfile precedente , di solito). Quindi viene creato un nuovo file e lì vengono scritti i dati dalla memoria.

Opzione 2: la voce della directory originale viene modificata in modo che il file venga troncato a 0 lunghezza. L'area su disco utilizzata per i dati dei file verrà contrassegnata come non utilizzata, ma i contenuti del vecchio file rimarranno sul disco fino a quando non vengono sovrascritti. Quindi vengono scritti nuovi dati. In questo caso la voce della directory rimane, vengono modificati solo i dati a cui punta.

Ci sono alcune possibili variazioni, una comune delle quali è, i dati modificati vengono prima archiviati in un file temporaneo, quindi se il tuo computer si blocca a questo punto, il file originale probabilmente non verrà danneggiato. Quindi il file originale viene eliminato e il nuovo file viene rinominato con il nome corretto. Oppure, il file originale potrebbe essere semplicemente eliminato prima di scrivere quello nuovo.

Quindi la tua teoria 1 è vicina a ciò che fanno la maggior parte degli editor.


Quindi ci sono casi speciali. Il più ovvio è un editor di dischi, che consente di leggere e sovrascrivere i byte direttamente sul disco. Un altro potrebbe essere un file di database, in cui i record potrebbero avere dimensioni fisse, quindi è facile sovrascrivere un record. Ma i dati non possono essere aggiunti nel mezzo di un file, e quindi modificando i file di testo o qualsiasi altro file in cui la lunghezza dei dati nel mezzo del file comunemente cambia, questi trucchi non possono essere realmente utilizzati.

Quindi la tua teoria 2 è possibile in alcuni casi, ma i normali editor di testo e simili non lo fanno.


1
"Dato che stai parlando di" salvare il file ", il file non verrà modificato sul posto sul disco." - Penso che ogni volta che "apri" un file, lo modifichi e riscrivi le modifiche sul disco, stai "salvando il file", indipendentemente dal fatto che il file sia "scritto sul posto" (sovrascritto) o il vecchio file viene eliminato o rinominato e viene creato un nuovo file. Ad ogni modo, di solito, a un certo punto decidi di "salvare le modifiche" o di "annullare le modifiche".
Kevin Fegan il

@KevinFegan Bene, puoi aprire un file nel disco adatto o nell'editor esadecimale, modificare il contenuto e salvare le modifiche . In alternativa, è possibile aprire un file di database (ad esempio un file di database SQLite), modificare il database e apportare modifiche al file. Quindi, semplicemente aprire un file per la modifica può significare modificarlo sul posto, ma "salvare un file" di solito implica la creazione di un nuovo file e queste altre alternative hanno un'azione diversa per salvare le modifiche.
hyde,

4

Storicamente, le unità erano controllate direttamente dal sistema operativo, che a sua volta era controllato dall'applicazione. In quel contesto, Theory 2 era il modo principale in cui i PC funzionavano. il sistema operativo ha specificato una posizione fisica in cui inserire i dati e aveva il pieno controllo di questo processo. Di conseguenza, i primi file system avevano una tabella "settore danneggiato", quindi dopo la perdita dei dati, il computer poteva dirti che i dati erano andati persi e contrassegnare il settore come inutilizzabile per evitare ulteriori perdite di dati. Le scansioni del disco e la deframmentazione erano all'ordine del giorno.

Tuttavia, dopo la fine del secolo, ci siamo spostati su LBA, quindi ora il sistema operativo farebbe semplicemente riferimento al blocco "logico" su cui voleva leggere o scrivere. Il disco rigido stesso ora aveva l'intelligenza di mescolare i dati alle spalle del sistema operativo senza accorgersene. Ciò significava una maggiore affidabilità, poiché i settori che non potevano essere verificati potevano essere semplicemente spostati in una nuova posizione fisica senza influire sulla conoscenza del sistema operativo in merito alla posizione di tali dati.

Nell'hardware moderno, le unità disco "piatto" in genere sovrascrivono qualsiasi cosa fosse prima con i nuovi dati in entrata e facoltativamente rimpiazza l'LBA se il settore sembra che potrebbe non conservare i dati (il settore è danneggiato o usurato). Le unità "Flash" in genere cancellano le vecchie celle e quindi scrivono i dati in nuove celle, un processo noto come livellamento dell'usura.

In entrambi i casi, ciò è possibile perché esiste sempre una capacità inutilizzata oltre il valore riportato. Questo overprovisioning consente all'unità di avere una vita utile più lunga rispetto alla tecnologia piuttosto inaffidabile della tecnologia del secolo precedente. La modalità LBA consente di estrarre il supporto fisico dal sistema operativo in modo che l'unità stessa possa prendere tutte le misure che l'unità ritiene necessarie per prevenire la perdita di dati.

A livello di applicazione, in genere si apre un file in modalità "WRITE", che indica al sistema operativo di cancellare il file ("eliminare" il contenuto, ma non il file stesso), quindi scrivere nuovi dati. Tutto questo viene bufferizzato a livello di sistema operativo, quindi "scaricato" sull'unità, che apporta le modifiche richieste.

Date queste informazioni, la teoria 1 è ciò che tecnicamente accade a livello di programmazione dell'applicazione, almeno per impostazione predefinita, poiché esiste anche una modalità di "scrittura con aggiunta" per evitare di cancellare il contenuto del file. Il sistema operativo stesso presenterà le modifiche da apportare più come Teoria 2, ma astratte tramite LBA. L'unità stessa probabilmente farà qualcosa che è un mix di Teoria 1 e Teoria 2.

Sì. È complicato e dipende in parte dal produttore / sviluppatore del sistema operativo / dipendente dallo sviluppatore dell'applicazione. Tuttavia, tutta questa complessità è volta a rendere più affidabile l'archiviazione dei dati migliorando al contempo il consumo di energia / la durata della batteria.


3

Dipende. AFAIK Microsoft Word, quando si salvano .doc(non .docx) file con le opzioni di salvataggio rapido abilitate, si aggiungono le modifiche apportate al documento dall'ultimo salvataggio del file esistente.


1

In generale, un computer alloca la memoria in cui risiede il file originale come "cancellato", ma tutto ciò significa che non verrà più visualizzato nel browser dei file e sono consentite le celle nella memoria in cui è stato scritto da sovrascrivere in futuro.

Il fatto che il nuovo file sia scritto nello stesso posto dipende da una serie di fattori, principalmente dal software in uso e dal modo in cui è progettato per utilizzare la memoria.


2
Penso che potresti confondere la "memoria" con la nozione di operazioni di scollegamento del file system. E questo non in realtà ha nulla a che fare con la questione dichiarato, che chiede se i file di cemento vengono sovrascritti o se v'è una sorta di aggiornamento n-way.

Bene, se il software è stato progettato per farlo in modo specifico, è possibile, anche se per quanto ne so questo è generalmente il modo in cui funzionano sia l'archiviazione a lungo termine che la RAM.
GigaJoules,

Purtroppo, la tua spiegazione (per quanto posso decodificare quello che vuoi dire) è decisamente non è come il lavoro "conservazione a lungo termine e RAM". Ma, alla fine, questo ha poco a che fare con la domanda a portata di mano. Il che, lo ribadisco, sta chiedendo come il software aggiorna le informazioni testuali a un file su un dispositivo di elaborazione generico con un tipico file system moderno. Non dobbiamo considerare come qualcosa come "memoria" funziona o non funziona per rispondere a questa domanda.

1

Spero che questo non sia ridondante, un po 'di informazioni / sfondo in più.

Il PC di solito non ha molto controllo su come un file viene modificato, è l'applicazione che lo fa.

Alcuni esempi di come alcune app potrebbero gestire la modifica:

Blocco note carica l'intero documento in memoria e quindi salva tutto sul documento originale (o su uno nuovo specificato).

Quasi tutti gli altri piccoli editor salveranno un "nuovo" file mentre lo modifichi e lo copieranno sul documento originale eliminandolo quando "salvi".

Gli editor di documenti di grandi dimensioni che è possibile utilizzare per modificare un libro tendono a leggere / modificare una sezione di un documento perché possono modificare documenti più grandi della memoria. Questi possono effettivamente modificare il documento "Sul posto". Potrebbero riscrivere una pagina e lasciare il resto da solo. Questi hanno spesso una rappresentazione su disco indicizzata più complessa di quanto un semplice file .txt consentirebbe questo comportamento.

Gli editor di grandi dimensioni potrebbero anche salvare file temporanei con "aggiornamenti" nel documento originale. Quando esegui il salvataggio finale, puoi unirli tutti e riscrivere il documento.

La maggior parte degli editor può essere configurata per lasciare intatta la versione esistente e crearne una nuova con le modifiche (conservare le versioni precedenti).

Per quanto riguarda la parte della tua domanda riguardo a cosa fa un "PC", alcuni sistemi operativi ricorderanno ogni versione di un file e ne creeranno sempre una nuova. Al giorno d'oggi è piuttosto raro, ma ricordo i vecchi "Mini computer" (quelli che ora chiameremmo mainframe) in cui ogni file aveva una versione alla fine come "File.text.1" e si aggiungeva alla versione ogni volta che modificato. Questo tipo di comportamento si applicherebbe meglio a qualcosa come un'unità a nastro o un CD-ROM in cui sovrascrivere la vecchia versione era completamente impraticabile.


1

2 non è impossibile, ma è stupido per vari motivi.

Un editor di file di testo ben scritto dovrà:

  1. Scrivi un file con un nome diverso e il nuovo contenuto. Se l'originale fosse myfile.txt, quello nuovo potrebbe esseremyfile.txt.new
  2. Fornito 1. riuscito, rinominare l'originale in un file di backup, per esempio myfile.txt~
  3. Rinomina il nuovo file con il nome originale myfile.txt
  4. Se tutto è riuscito, rimuovere il file di backup. Molti editor lo lasciano comunque, quindi l'utente può recuperare se presto capisce che quello che ha fatto con l'editor non era quello che voleva fare.

Se il computer si arresta in modo anomalo o esaurisce lo spazio sul disco durante quanto sopra, non si verifica una situazione in cui sia il vecchio che il nuovo file vengano persi o salvati solo parzialmente.


Il comportamento troncamento sul posto e riscrittura di molti editor di testo per sistemi operativi non IBM / non Microsoft nell'ultimo mezzo secolo non è "stupido".
JdeBP,

1

Risposta breve

Dipende fortemente dal tuo editor, software / driver sottostanti, spazio di archiviazione.


Risposta paranoica

Può essere recuperato se non lo si rimuove in modo permanente.


Risposta lunga

Ci sono informazioni mancanti nella tua domanda (software, hardware, ecc.), Quindi invece di rispondermi ti aiuterò a rispondere tu stesso alla tua domanda.

Dipende da alcuni fattori:

  1. Editor : se il software dell'editor sostituisce i blocchi dello stesso file, potrebbe essere riscritto. E ciò può dipendere anche dalle impostazioni dell'editor e dai tipi di file. Nota che la parola può essere resa in corsivo. Anche quando l'editor riscrive il file, può rimanere intatto (leggi i punti successivi).

  2. Sottostante software / driver / file system : il file rimarrà intatto se ci sono altri software / driver sottostanti che proteggono il file iniziale dalla sovrascrittura. Questi tipi di software includono sistemi di versioning, dischi differenziali virtuali, alcuni software di backup. Un esempio è Git , che manterrà i blocchi di file originali e creerà un nuovo file che contiene i blocchi modificati.

  3. Stoccaggio :

    • Lo storage stesso può scrivere blocchi modificati su un nuovo settore e contrassegnare i vecchi blocchi come "liberi". Quindi il file rimarrà fisicamente nella memoria (ed è recuperabile), a meno che non venga sovrascritto da un altro file. Esempio è il moderno storage SSD , che può farlo a livello hardware.

    • Esistono modi per recuperare i dati dai tipici dischi magnetici di un HDD meccanico anche quando i dati sono stati sovrascritti . E ci sono aziende specializzate in esso.

Quindi, se vuoi ottenere una risposta concreta se il tuo file verrà eliminato o meno, devi anche dire quale editor, backup / software / hardware VCS e memoria usi. Se ho perso qualsiasi punto, sentiti libero di modificare la risposta.


Come assicurarsi che il file eliminato sia effettivamente eliminato dalla memoria?

Questa è probabilmente la prossima domanda che ti chiederai. Bene, ci sono molte soluzioni software / hardware. Dato che SuperUser non ha lo scopo di promuovere software / hardware, invece di dire i nomi ti dirò come trovarli: cerca le parole chiave "elimina definitivamente il file". Per corrispondenze più precise, menziona il tuo sistema operativo, il tipo di disco rigido o altre informazioni che hai.


1

Un comportamento che nessuno ha ancora menzionato è un comportamento rilevante di alcune versioni dei sistemi operativi MS Windows è anche correlato al filesystem in uso.

Il comportamento funziona in questo modo: quando rinomini o elimini un file, se crei (ricrea) un (nuovo) file con lo stesso nome entro 15 secondi da quando il file originale è stato eliminato (o rinominato), la data di creazione / il timestamp viene copiato dal file originale. In sostanza, il nuovo file "diventa" il file vecchio / originale.

In questo caso, non importa se l'applicazione salva le modifiche al file con il tuo metodo n. 1: crea un nuovo file con lo stesso nome o con il tuo metodo n. 2: modifica / aggiorna il file in atto (file non cancellato). Ad ogni modo, il file finale appare (quasi) in ogni modo, come il file originale. L'unica cosa è che occuperà probabilmente spazio su disco fisico diverso (cluster / settori) e la voce della directory per il file sarà probabilmente in una posizione diversa.

Come ho già detto, questo è un comportamento di alcune versioni di MS Windows / filesystem. Non so quale versione di Windows e quale filesystem sia stata avviata e se è ancora il comportamento delle versioni più recenti. Se dovessi indovinare direi che è stato introdotto su Windows NT e Windows XP ed è ancora il comportamento di Windows 10, e (ancora una supposizione) il comportamento richiede un filesystem Fat32 o NTFS (e forse più recente).


In realtà, è importante, perché NTFS supporta i collegamenti reali e una delle differenze ben note tra questi metodi è l'effetto sui file con collegamenti multipli. Il tunneling del filesystem esiste da almeno Windows NT 5.0.
JdeBP,

@JdeBP - Sì, siamo d'accordo. Ecco perché ho detto # 1) "Quasi" in "il file finale appare (quasi) in tutti i modi, come il file originale" e # 2) nella voce della directory in una posizione diversa.
Kevin Fegan,

Non sei d'accordo se affermi, come fai, che non importa.
JdeBP,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.