Kiedy komputer edytuje plik, czy usuwa oryginalny plik?

55

Jeśli code.txt(lub jakikolwiek plik) zostanie edytowany i zapisany, mam dwa pomysły na to, jak komputer poradziłby sobie z tym procesem:

  1. Komputer usuwa się code.txtcałkowicie i tworzy od nowa nową code.txt(edytowaną wersję).

  2. Komputer edytuje część szesnastkową code.txt. Więc nie dzieje się usunięcie.

Który pomysł reprezentuje działanie komputerów?

Desk Man
źródło
Pozdrowienia! Opierając się na doskonałej odpowiedzi udzielonej przez użytkownika Grawity, oto kilka pytań wyjaśniających:
18
@HaakonDahl jakie pytania wyjaśniające? Nic nie opublikowałeś.
The Great Duck
Cholera. Muszę czekać, aż wrócę na komputer. Ale sedno jest na jakim poziomie - sprzęt, system plików, system operacyjny lub aplikacja? A jaka aplikacja?
Dlaczego to dla ciebie ważne? Nawet programy, które tworzą „nowy” plik, prawdopodobnie zmienią czas utworzenia, tak aby pasował do oryginału. Jedyną widoczną różnicą byłby numer i-węzła (lub równoważna koncepcja), który może mieć znaczenie (np. Jeśli masz w pobliżu linki dowiązania, zostaną one „zsynchronizowane”).
Bakuriu
1
Głosowanie w celu zamknięcia tego pytania jest zbyt ogólne. Wszystko zależy od systemu operacyjnego, oprogramowania i podstawowych możliwości systemu plików.
JakeGould

Odpowiedzi:

121

Może być albo - zależy to od używanego edytora tekstu.

Koncepcja „pliku tekstowego” nie jest wbudowana w komputery - każdy system operacyjny może zarządzać plikami inaczej, a każdy edytor tekstowy może używać tych plików w inny sposób.

W praktyce znajdziesz edytory tekstu, które mają oba mechanizmy. Praktycznie wszystkie systemy operacyjne pozwalają na bezpośrednie zastąpienie zawartości istniejącego pliku, więc proste edytory, takie jak Notatnik, zwykle po prostu proszą system operacyjny o zapisanie bezpośrednio w oryginalnym pliku, ponieważ jest to najłatwiejsze do wdrożenia - ale ryzykowne, jeśli stracisz moc w trakcie zapisu. Dlatego ze względów niezawodności wielu redaktorów celowo zapisuje zaktualizowane dane w nowym pliku i usuwa oryginał.

(Myślę, że aktualizacje w miejscu są częstsze wśród edytorów szesnastkowych, gdzie większość edycji nie wstawia / nie usuwa bajtów, a jedynie zmienia istniejące lokalizacje, więc pełny plik przepisywania nie jest potrzebny).

Istnieje nawet trzeci tryb działania - edytor może najpierw wykonać kopię zapasową starego pliku, a następnie bezpośrednio zapisać nowe dane w pliku.


Zależy to również od systemu plików, który przechowuje plik. W przypadku większości tradycyjnych systemów plików, jeśli program prosi o zapisanie do istniejącego pliku, system plików po prostu nadpisze stare dane w miejscu.

Jednak niektóre systemy plików nie działa w trybie „kopiowanie przy zapisie”, gdzie każde nowe dane są zawsze zapisywane w innym miejscu, czy program chce, czy nie. Ponownie, ma to możliwą zaletę zwiększonej niezawodności, ponieważ przerwaną zmianę można całkowicie przywrócić.

W niektórych systemach plików (takich jak Btrfs lub ext4) jest to funkcja opcjonalna; w innych (np. systemy plików o strukturze dziennika) jest to część podstawowego projektu.

grawitacji
źródło
30
To nie tylko na poziomie systemu plików. Na przykład pamięć flash musi wyczyścić blok, zanim będzie mógł do niego zapisać. W praktyce więc często zapisuje do plików, po prostu zapisując nową zmianę w nowym bloku i unieważniając go w starym bloku. Dzięki temu, że takie urządzenie jest obsługiwane automatycznie przez samo urządzenie, system operacyjny może po prostu użyć normalnego systemu plików na dysku twardym.
trlkly
7
@trlkly: Wszystkie nowoczesne urządzenia pamięci flash są podzielone na regiony wymazywania, które są o rząd wielkości większe niż sektor dyskowy i nie mogą przetworzyć żadnej części takiego regionu bez wymazania całego. W konsekwencji, jeśli region zawiera 32 przestarzałe sektory danych i 224 sektory przydatnych danych, będzie musiał skopiować 224 sektory przydatnych danych w innym miejscu, zanim będzie mógł zwolnić miejsce z któregoś z przestarzałych sektorów. Nowoczesne systemy operacyjne używają polecenia „przycinania”, aby wskazać sektory dysku, których zawartość może zostać porzucona, jeśli blok, na którym się znajdują, zostanie poddany recyklingowi.
supercat
Niektórzy redaktorzy wybierają w czasie wykonywania, którego zachowania użyć (np. W zależności od tego, czy plik ma tylko jedną nazwę katalogu, czy wiele).
Toby Speight
2
Wielu redaktorów po prostu wczyta plik do pamięci i dokona tam wszystkich zmian. (Być może okresowo automatycznie zapisuje kopię bieżącej pracy w innym.) Oryginalny plik w ogóle się nie zmienia, dopóki nie zapiszesz zmian, np. Za pomocą komendy vi: w.
jamesqf
4
@jamesqf: Cóż, pytanie było o tym, co się dzieje, gdy plik jest „edytowane i zapisywane ” ...
grawity
6

Ponieważ mówisz o „zapisywaniu pliku”, plik nie będzie edytowany w miejscu na dysku.

W przypadku pliku w zwykłym systemie plików należy rozważyć dwie rzeczy. Jest pozycja katalogu, a następnie gdzieś na dysku znajdują się rzeczywiste dane pliku.

Gdy edytujesz plik w normalnym edytorze, załaduje on dane pliku do pamięci RAM, a każda edycja będzie miała miejsce na tej kopii danych. Następnie, kiedy zapisujesz plik, istnieją zasadniczo dwie opcje:

Opcja 1: nazwa oryginalnego pliku zostaje zmieniona , więc zarówno oryginalny wpis katalogu, jak i oryginalne dane pozostaną na dysku. Zmiana nazwy może na przykład zmienić sufiks pliku na .bak( .bakzwykle usunięcie poprzedniego pliku). Następnie tworzony jest nowy plik i tam zapisywane są dane z pamięci.

Opcja 2: oryginalny wpis katalogu jest modyfikowany, więc plik jest obcięty do 0 długości. Obszar na dysku użyty do danych pliku zostanie oznaczony jako nieużywany, ale stara zawartość pliku pozostanie na dysku, dopóki nie zostaną zastąpione. Następnie zapisywane są nowe dane. W takim przypadku pozycja katalogu pozostaje, tylko dane, na które wskazuje, zostają zmienione.

Istnieje kilka możliwych odmian, z których jedną jest to, że edytowane dane są najpierw zapisywane w pliku tymczasowym, więc jeśli komputer ulegnie awarii w tym momencie, oryginalny plik prawdopodobnie nie zostanie uszkodzony. Następnie oryginalny plik jest usuwany, a nowy plik zmienia nazwę na poprawną nazwę. Lub oryginalny plik można po prostu usunąć przed napisaniem nowego.

Więc twoja teoria 1 jest zbliżona do tego, co robi większość redaktorów.


Potem są specjalne przypadki. Najbardziej oczywistym jest edytor dysku, który umożliwia odczyt i nadpisywanie bajtów bezpośrednio na dysku. Innym może być plik bazy danych, w którym rekordy mogą mieć stały rozmiar, więc łatwo jest po prostu nadpisać rekord. Ale danych nie można dodawać w środku pliku, a zatem edycja plików tekstowych lub innych plików, w których długość danych w środku pliku często się zmienia, tych sztuczek naprawdę nie można zastosować.

Więc twoja teoria 2 jest możliwa w niektórych przypadkach, ale zwykłe edytory tekstu i takie nie robią tego.

hyde
źródło
1
„Ponieważ mówisz o„ zapisywaniu pliku ”, plik nie będzie edytowany w miejscu na dysku”. - Myślę, że za każdym razem, gdy „otwierasz” plik, edytujesz go i zapisujesz zmiany z powrotem na dysk, „zapisujesz plik”, niezależnie od tego, czy plik jest „zapisany w miejscu” (nadpisany), czy stary plik zostanie usunięty lub zmieniona jego nazwa, a nowy plik zostanie utworzony. Tak czy inaczej, zazwyczaj w pewnym momencie decydujesz się „zapisać zmiany” lub „odrzucić zmiany”.
Kevin Fegan
@KevinFegan Cóż, możesz otworzyć plik w odpowiednim edytorze dyskowym lub szesnastkowym, edytować zawartość i zapisywać zmiany . Lub możesz otworzyć plik bazy danych (taki jak plik bazy danych SQLite), zmodyfikować bazę danych i wprowadzić zmiany w pliku. Tak więc otwarcie pliku do modyfikacji może oznaczać modyfikację go w miejscu, ale „zapisanie pliku” zwykle oznacza utworzenie nowego pliku, a te inne alternatywy mają różne nazwy akcji zapisywania zmian.
hyde
4

Historycznie napędy były kontrolowane bezpośrednio przez system operacyjny, który z kolei kontrolowany był przez aplikację. W tym kontekście Teoria 2 była podstawowym sposobem działania komputerów PC. system operacyjny określił fizyczną lokalizację do umieszczenia danych i miał pełną kontrolę nad tym procesem. W rezultacie wczesne systemy plików miały tabelę „uszkodzonego sektora”, więc po utracie danych komputer mógł powiedzieć, że dane zostały utracone, i oznaczyć sektor jako niezdatny do użytku, aby uniknąć dalszej utraty danych. Skanowanie dysku i defragmentacja były na porządku dziennym.

Jednak po przełomie wieków przenieśliśmy się do LBA, więc teraz system operacyjny będzie po prostu odwoływał się do „logicznego” bloku, który chciał odczytać lub napisać. Sam dysk twardy miał teraz inteligencję, aby przeszukiwać dane za plecami systemu operacyjnego, nie zauważając tego. Oznaczało to lepszą niezawodność, ponieważ sektory, których nie udało się zweryfikować, można po prostu przenieść do nowej fizycznej lokalizacji bez wpływu na wiedzę systemu operacyjnego o lokalizacji tych danych.

W nowoczesnym sprzęcie dyski „talerzowe” zwykle po prostu nadpisują to, co było wcześniej, nowymi przychodzącymi danymi i opcjonalnie odwzorowują LBA, jeśli sektor wygląda na to, że może nie zatrzymać danych (sektor jest uszkodzony lub zużyty). Dyski „Flash” zazwyczaj usuwają stare komórki, a następnie zapisują dane w nowych komórkach, proces ten znany jest jako wyrównywanie zużycia.

W obu przypadkach jest to możliwe, ponieważ pojemność zawsze jest niewykorzystana powyżej podanej wartości. To przeszacowanie pozwala na dłuższą żywotność napędu niż raczej zawodna technologia z poprzedniego wieku. Tryb LBA umożliwia wyodrębnienie nośnika fizycznego z systemu operacyjnego, aby sam dysk mógł podjąć wszelkie środki, które uzna za konieczne, aby zapobiec utracie danych.

Na poziomie aplikacji zazwyczaj otwierasz plik w trybie „NAPISZ”, który nakazuje systemowi wyczyścić plik („usunąć” zawartość, ale nie sam plik), a następnie zapisać nowe dane. Wszystko to jest buforowane na poziomie systemu operacyjnego, a następnie „opróżniane” na dysk, co powoduje wymagane zmiany.

Biorąc pod uwagę te informacje, Teoria 1 jest technicznie tym, co dzieje się na poziomie programowania aplikacji, przynajmniej domyślnie, ponieważ istnieje również tryb „zapisu z dołączaniem”, aby uniknąć wyczyszczenia zawartości pliku. Sam system operacyjny przedstawi zmiany, które mają być bardziej podobne do teorii 2, ale streszczone za pomocą LBA. Sam napęd prawdopodobnie wtedy zrobi coś, co jest kombinacją teorii 1 i teorii 2.

Tak. Jest to skomplikowane i bardzo zależne od producenta / programisty systemu operacyjnego / programisty aplikacji. Jednak cała ta złożoność ma na celu zwiększenie niezawodności przechowywania danych przy jednoczesnym zwiększeniu zużycia energii / żywotności baterii.

phyrfox
źródło
3

Zależy. AFAIK Microsoft Word, podczas zapisywania .doc(nie .docx) plików z włączonymi opcjami szybkiego zapisywania , dołącza zmiany wprowadzone do dokumentu od czasu ostatniego zapisania do istniejącego pliku.

milet
źródło
1

Ogólnie rzecz biorąc, komputer przydzieli pamięć, w której znajduje się oryginalny plik, jako „usunięty”, ale tak naprawdę oznacza to, że nie będzie się już wyświetlać w przeglądarce plików, a komórki w pamięci, w których zostały zapisane, są dozwolone do zastąpienia w przyszłości.

To, czy nowy plik zostanie zapisany w tym samym miejscu, zależy od wielu czynników, głównie od używanego oprogramowania i tego, w jaki sposób ma on korzystać z pamięci.

GigaJoules
źródło
2
Myślę, że możesz mylić „pamięć” z pojęciem operacji rozłączania systemu plików. I tak naprawdę nie ma to nic wspólnego z zadanym pytaniem, które pyta, czy konkretne pliki są nadpisywane lub czy istnieje jakaś aktualizacja n-way.
Cóż, jeśli oprogramowanie zostało zaprojektowane specjalnie do tego celu, jest to możliwe, choć o ile wiem, ogólnie działa to zarówno w przypadku przechowywania długoterminowego, jak i pamięci RAM.
GigaJoules
Niestety, twoje wyjaśnienie (o ile mogę zdekodować, co masz na myśli) zdecydowanie nie mówi o tym, jak działają „długoterminowe przechowywanie i pamięć RAM”. Ale pod koniec dnia ma to niewiele wspólnego z omawianym pytaniem. Powtarzam, pytam, w jaki sposób oprogramowanie aktualizuje informacje tekstowe do pliku na urządzeniu komputerowym ogólnego przeznaczenia z typowym nowoczesnym systemem plików. Nie musimy zastanawiać się, jak coś takiego jak „pamięć” działa lub nie działa, aby odpowiedzieć na to pytanie.
1

Mam nadzieję, że to nie jest zbędne, trochę dodatkowych informacji / tła.

Komputer zwykle nie ma dużej kontroli nad sposobem edytowania pliku, tylko aplikacja.

Kilka przykładów tego, jak niektóre aplikacje mogą obsługiwać edycję:

Notatnik ładuje cały dokument do pamięci, a następnie zapisuje całość na oryginalnym dokumencie (lub nowym, który określisz).

Prawie wszystkie inne małe edytory zapisują „nowy” plik podczas edycji, a następnie kopiują go na oryginalnym dokumencie, usuwając go podczas „zapisywania”.

Edytory dużych dokumentów, których możesz użyć do edycji książki, zwykle czytają / modyfikują sekcję dokumentu, ponieważ mogą edytować dokumenty większe niż pamięć. Mogą one faktycznie edytować dokument „W miejscu”. Mogą ponownie napisać jedną stronę, a resztę zostawić w spokoju. Często mają one bardziej złożoną indeksowaną reprezentację na dysku niż prosty plik .txt, który pozwala na to zachowanie.

Duzi redaktorzy mogą również zapisywać pliki tymczasowe z „aktualizacjami” oryginalnego dokumentu. Po dokonaniu ostatecznego zapisu może połączyć je wszystkie i ponownie napisać dokument.

Większość edytorów można skonfigurować tak, aby pozostawić istniejącą wersję nietkniętą i utworzyć nową ze swoimi zmianami (zachować stare wersje).

Jeśli chodzi o część pytania dotyczącą działania „komputera”, niektóre systemy operacyjne zapamiętują każdą wersję pliku i zawsze tworzą nową. Obecnie jest to dość rzadkie, ale pamiętam stare „Mini Computers” (które teraz nazywamy komputerami mainframe), w których każdy plik miał na końcu wersję, taką jak „File.text.1”, i dodawałby się do wersji za każdym razem, gdy zredagowałem to. Takie zachowanie lepiej byłoby zastosować do czegoś takiego jak napęd taśmowy lub CD-ROM, w którym zastąpienie starej wersji było całkowicie niepraktyczne.

Bill K.
źródło
1

2 nie jest niemożliwe, ale jest głupie z różnych powodów.

Dobrze napisany edytor plików tekstowych:

  1. Napisz plik o innej nazwie i nowej zawartości. Jeśli oryginał był myfile.txt, nowy może byćmyfile.txt.new
  2. Jeśli 1. powiedzie się, zmień nazwę oryginału na plik kopii zapasowej, powiedzmy myfile.txt~
  3. Zmień nazwę nowego pliku na pierwotną nazwę myfile.txt
  4. Jeśli wszystko się powiedzie, usuń plik kopii zapasowej. Zresztą wielu redaktorów i tak go opuszcza, więc użytkownik może odzyskać, jeśli wkrótce zorientuje się, że to, co zrobił z edytorem, nie było tym, co chciał zrobić.

Jeśli komputer ulegnie awarii lub zabraknie miejsca na dysku w powyższym przypadku, nie ma sytuacji, w której stare i nowe pliki zostaną utracone lub tylko częściowo zapisane.

nigel222
źródło
Obcinanie na miejscu i przepisywanie wielu edytorów tekstu dla systemów operacyjnych innych niż IBM / innych niż Microsoft w ciągu ostatniego półwiecza nie jest „głupie”.
JdeBP
1

Krótka odpowiedź

Bardzo zależy od twojego edytora, oprogramowania / sterowników, pamięci.


Odpowiedź paranoiczna

Można go odzyskać, chyba że usuniesz go na stałe.


Długa odpowiedź

W twoim pytaniu brakuje informacji (oprogramowania, sprzętu itp.), Więc zamiast odpowiedzieć sobie, pomogę ci odpowiedzieć sam na twoje pytanie.

To zależy od kilku czynników:

  1. Edytor : jeśli oprogramowanie edytora zastępuje bloki tego samego pliku, może zostać przepisane. Może to zależeć również od ustawień edytora i typów plików. Zauważ, że słowo może być zapisane kursywą. Nawet gdy edytor przepisuje plik, nadal może pozostać nietknięty (przeczytaj następne punkty).

  2. Podstawowe oprogramowanie / sterowniki / system plików : plik pozostanie niezmieniony, jeśli pod spodem znajduje się inne oprogramowanie / sterowniki, które chronią plik początkowy przed nadpisaniem. Do tego typu oprogramowania należą systemy kontroli wersji, wirtualne dyski różnicowe, niektóre oprogramowanie do tworzenia kopii zapasowych. Przykładem jest Git , który zachowa oryginalne bloki plików i utworzy nowy plik zawierający zmodyfikowane bloki.

  3. Przechowywanie :

    • Sama pamięć może zapisywać zmienione bloki w nowym sektorze i oznaczać stare bloki jako „wolne”. Następnie plik pozostanie fizycznie w pamięci (i będzie można go odzyskać), chyba że zostanie zastąpiony innym plikiem. Przykładem jest nowoczesna pamięć SSD , która może to zrobić na poziomie sprzętowym.

    • Istnieją sposoby odzyskiwania danych z typowych mechanicznych dysków magnetycznych HDD, nawet gdy dane zostały nadpisane . I są w tym wyspecjalizowane firmy.

Więc jeśli chcesz uzyskać konkretną odpowiedź na pytanie, czy plik zostanie usunięty, musisz także powiedzieć, jakiego edytora, oprogramowania / sprzętu do tworzenia kopii zapasowych / VCS i pamięci używasz. Jeśli nie zauważyłem żadnego punktu, możesz edytować odpowiedź.


Jak upewnić się, że usunięty plik jest faktycznie usunięty z pamięci?

To prawdopodobnie następne pytanie, które sam sobie zadacie. Istnieje wiele rozwiązań programowych / sprzętowych. Ponieważ SuperUser nie jest przeznaczony do promowania oprogramowania / sprzętu, zamiast wymieniać nazwy powiem ci, jak je znaleźć: wyszukaj słowa kluczowe „trwale usuń plik”. W celu dokładniejszego dopasowania podaj swój system operacyjny, typ dysku twardego lub inne posiadane informacje.

XX
źródło
1

Jedno zachowanie, o którym nikt jeszcze nie wspominał, to istotne zachowanie niektórych wersji systemów operacyjnych MS Windows jest również związane z używanym systemem plików.

Zachowanie działa w ten sposób: gdy zmienisz nazwę lub usuniesz plik, jeśli utworzysz (odtworzysz) (nowy) plik o tej samej nazwie w ciągu 15 sekund od usunięcia (lub zmiany nazwy) oryginalnego pliku, data utworzenia / znacznik czasu jest kopiowany z oryginalnego pliku. Zasadniczo nowy plik „staje się” starym / oryginalnym plikiem.

W tym przypadku tak naprawdę nie ma znaczenia, czy aplikacja zapisuje zmiany w pliku za pomocą metody nr 1: utworzenie nowego pliku o tej samej nazwie lub za pomocą metody nr 2: edycja / aktualizacja pliku na miejscu (plik nie usunięty). Tak czy inaczej, końcowy plik wygląda (prawie) pod każdym względem, tak jak oryginalny plik. Jedyną rzeczą jest to, że prawdopodobnie zajmie on inną przestrzeń na dysku fizycznym (klastry / sektory), a pozycja katalogu dla pliku prawdopodobnie będzie znajdować się w innej lokalizacji.

Jak powiedziałem, jest to zachowanie niektórych wersji MS Windows / systemów plików. Nie wiem, która wersja systemu Windows i system plików to uruchomiło, i czy jest to zachowanie nowszych wersji. Gdybym musiał zgadywać, powiedziałbym, że został wprowadzony na Windows NT i Windows XP i nadal jest zachowaniem Windows 10, i (wciąż zgaduję) zachowanie wymaga systemu plików Fat32 lub NTFS (i być może nowszego).

Kevin Fegan
źródło
W rzeczywistości ma to znaczenie, ponieważ NTFS obsługuje twarde łącza, a jedną z dobrze znanych różnic między tymi metodami jest wpływ na pliki z wieloma linkami. Tunelowanie systemu plików istnieje od co najmniej Windows NT 5.0.
JdeBP
@JdeBP - Tak, zgadzamy się. Dlatego powiedziałem # 1) „Prawie” w „końcowy plik wygląda (prawie) pod każdym względem, tak jak plik oryginalny”, i nr 2) pozycja katalogu w innej lokalizacji.
Kevin Fegan
Nie zgadzasz się, jeśli twierdzisz, że to nie ma znaczenia.
JdeBP