Коли ПК редагує файл, чи видаляє його вихідний файл?


55

Якщо code.txt(або будь-який файл) відредаговано та збережено, у мене є дві ідеї, як ПК оброблятиме процес:

  1. Комп'ютер видаляється code.txtповністю і робить нову code.txt(відредаговану версію) з нуля.

  2. ПК редагує частину шістнадцяткових файлів code.txt. Так що видалення не відбувається.

Яка ідея представляє, як працюють комп’ютери?


Вітаю! Працюючи з чудової відповіді, наданої користувачем Grawity, ось кілька уточнюючих питань:

18
@HaakonDahl які уточнюючі питання? Ви нічого не публікували.
Велика качка

Дангіт. Доведеться чекати, поки я повернусь на свій ПК. Але суть полягає в тому, який рівень - апаратне забезпечення, файлова система, ОС або додаток? А який додаток?

Чому це важливо для вас? Навіть програми, які створюють "новий" файл, ймовірно, змінять час створення так, щоб він відповідав оригіналу. Єдиною видимою різницею буде число введення (або еквівалентна концепція), яке може мати значення (наприклад, якщо у вас є жорсткі посилання, вони вийдуть "з синхронізації").
Бакуріу

1
Голосування за закриття цього питання як занадто широке. Все залежить від ОС, програмного забезпечення та основних можливостей файлової системи.
JakeGould

Відповіді:


121

Може бути і інше - це залежить від текстового редактора, який використовувався.

Концепція "текстового файлу" не вбудована в комп'ютери - кожна операційна система може керувати файлами по-різному, і кожен текстовий редактор може використовувати ці файли по-різному.

На практиці ви знайдете текстові редактори, які мають обидва механізми. Практично всі операційні системи дозволяють безпосередньо перезаписати вміст наявного файлу, тому прості редактори, такі як Notepad, зазвичай просто просять ОС записати безпосередньо в оригінальний файл, як це найпростіше втілити, але ризиковано, якщо ви втратите владу в середині запису. Тому з міркувань надійності багато редакторів свідомо зберігають оновлені дані у новий файл і видаляють оригінал.

(Я думаю, що місцеві оновлення частіше зустрічаються серед шестигранних редакторів, де більшість редагувань не вставляють / видаляють байти, а лише змінюють існуючі місця, тому повний файл перезапису не потрібен.)

Існує навіть третій режим роботи - редактор може спершу зробити резервну копію старого файлу, а потім безпосередньо записати нові дані у файл.


Це також залежить від файлової системи, яка зберігає файл. У більшості традиційних файлових систем, якщо програма вимагає записати в існуючий файл, файлова система просто замінить старі дані на місці.

Тим НЕ менше, деякі файлові системи дійсно працюють в режимі «копіювання при записі», де все нові дані завжди записуються в інше місце, чи хоче програма чи ні. Знову ж таки, це є можливою перевагою підвищення надійності, оскільки перервана зміна може бути повністю відмінена.

У деяких файлових системах (таких як Btrfs або ext4) це додаткова функція; в інших (наприклад, файлові системи, структуровані журналом), це частина основної конструкції.


30
Це не лише на рівні файлової системи. Наприклад, флеш-пам'ять повинна очистити блок, перш ніж він зможе записати на нього. Тож на практиці він часто записує у файли просто, записуючи нову зміну в новий блок та відключаючи її на старий блок. Маючи подібні речі автоматично обробляються самим пристроєм, ОС може просто використовувати звичайну файлову систему жорсткого диска.
trlkly

7
@trlkly: Всі сучасні пристрої флеш-пам’яті поділяються на області стирання, які на порядок більше, ніж диск-сектор, і не можуть переробити жодну частину такої області, не видаляючи її. Отже, якщо в регіоні є 32 застарілі сектори, варті даних та 224 сектори корисних даних, йому доведеться скопіювати 224 сектори корисних даних деінде, перш ніж він зможе звільнити простір з будь-якого із застарілих секторів. Сучасні операційні системи використовують команду "обрізка" для позначення секторів дисків, вміст яких можна відмовитися, якщо блок, на якому вони перебувають, переробляється.
supercat

Деякі редактори під час виконання роботи вибирають, яку поведінку використовувати (наприклад, залежно від того, чи є у файлу лише одна запис каталогу, яка називає його, чи багато).
Toby Speight

2
Багато редакторів просто зчитують файл у пам'ять і вносять усі зміни там. (Можливо, пейодично автоматично зберігається копія поточної роботи до іншого.) Оригінальний файл взагалі не змінюється, поки ви не збережете зміни, наприклад, з командою vi's: w.
jamesqf

4
@jamesqf: Ну, питання було про те, що відбувається, коли файл "редагується та зберігається " ...
grawity

6

Оскільки ви говорите про "збереження файлу", файл не буде редагуватись на місці на диску.

З файлом у звичайній файловій системі слід враховувати дві речі. Там є запис у каталозі, а потім є фактичні дані про файли десь на диску.

Коли ви редагуєте файл у звичайному редакторі, він завантажить файлові дані в оперативну пам'ять, і будь-яке редагування просто відбудеться на цій копії даних. Тоді, коли ви зберігаєте файл, в основному є два варіанти:

Варіант 1: оригінальний файл перейменований , тож як оригінальний запис каталогу, так і вихідні дані залишаться на диску. Наприклад, перейменування може змінити суфікс файлу на .bak( .bakзазвичай видаляється будь-який попередній файл). Потім створюється новий файл і туди записуються дані з пам'яті.

Варіант 2: оригінальний запис каталогу змінено, тому файл усікається на 0 довжини. Область на диску, яка використовується для файлових даних, буде позначена як невикористана, але старий вміст файлу залишатиметься на диску, поки вони не будуть перезаписані. Потім записуються нові дані. У цьому випадку запис каталогу залишається, змінюються лише дані, на які він вказує.

Існує кілька можливих варіантів, звичайна - відредаговані дані спочатку зберігаються у тимчасовий файл, тому, якщо ваш комп'ютер в цей момент вийде з ладу, оригінальний файл, ймовірно, не буде пошкоджений. Потім вихідний файл видаляється, а новий файл перейменовується з правильним іменем. Або оригінальний файл можна було просто видалити, перш ніж записати новий.

Тож ваша теорія 1 близька до того, що робить більшість редакторів.


Тоді є особливі випадки. Найбільш очевидний - це редактор дисків, який дозволяє читати та перезаписувати байти безпосередньо на диску. Іншим може бути файл бази даних, де записи можуть бути фіксованого розміру, тому легко просто перезаписати запис. Але дані не можна додавати в середину файлу, і тому редагуючи текстові файли або будь-які інші файли, де довжина даних у середині файлу зазвичай змінюється, ці трюки реально не можна використовувати.

Тож ваша теорія 2 можлива в деяких випадках, але звичайні редактори тексту і подібні не роблять цього.


1
"Оскільки ви говорите про" збереження файлу ", файл не буде редагуватись на місці на диску." - Я думаю, що коли ви "відкриваєте" файл, редагуєте його та записуєте зміни на диск, ви "зберігаєте файл", незалежно від того, "файл записаний на місці" (перезапис) або старий файл видаляється або перейменовується і створюється новий файл. Так чи інакше, ви зазвичай в якийсь момент вирішите "зберегти зміни" або "відкинути зміни".
Кевін Феган

@KevinFegan Ну, ви можете відкрити файл у відповідному диску чи шестигранному редакторі, відредагувати вміст та зберегти зміни . Або ви можете відкрити файл бази даних (наприклад, файл бази даних SQLite) та змінити базу даних та внести зміни до файлу. Тому просто відкриття файлу для модифікації може означати його зміну на місці, але "збереження файлу" зазвичай означає створення нового файлу, і ці інші альтернативи мають інакше дію для збереження змін.
гайда

4

Історично, накопичувачі безпосередньо контролювалися ОС, яка, у свою чергу, контролювалася додатком. У цьому контексті теорія 2 була основним способом роботи ПК. ОС вказала фізичне місце для введення даних, і вона мала повний контроль над цим процесом. Як результат, у ранніх файлових системах була таблиця «поганий сектор», тож після втрати ваших даних комп'ютер міг повідомити вам, що дані втрачені, і позначити сектор як непридатний, щоб уникнути більшої втрати даних. Сканування та дефрагментація дисків - це було розпорядженням дня.

Однак, після межі століття, ми перейшли до LBA, тому тепер ОС просто посилається на "логічний" блок, який він хотів прочитати чи написати. Сам жесткий диск тепер мав інтелект пересувати дані за спиною ОС, не помічаючи цього. Це означало кращу надійність, оскільки сектори, які не вдалося перевірити, можна було просто перенести у нове фізичне місце, не впливаючи на знання ОС, де вони знаходилися.

У сучасному обладнанні дискові накопичувачі типу «блюдо» зазвичай просто переписують все, що там було раніше, з новими вхідними даними, і необов'язково переробляють LBA, якщо сектор виглядає так, що він може не зберігати дані (сектор пошкоджений або зношений). "Flash" накопичувачі зазвичай стирають старі комірки, а потім записують дані в нові комірки, процес, відомий як вирівнювання зносу.

В обох випадках це можливо, оскільки завжди є невикористана ємність, що перевищує вказане значення. Це надмірне забезпечення дозволяє приводу мати триваліший термін експлуатації, ніж досить ненадійна технологія попереднього століття. Режим LBA дає змогу абстрагувати фізичну середовище від ОС, щоб сам диск міг вжити будь-яких заходів, на які накопичувач вважає необхідними для запобігання втрати даних.

На рівні програми ти зазвичай відкриваєш файл у режимі "ЗАПИСИТИ", який повідомляє ОС очистити файл ("видалити" вміст, але не сам файл), а потім записати нові дані. Все це буферизується на рівні ОС, потім "зливається" на накопичувач, що вносить запитувані зміни.

Враховуючи цю інформацію, Теорія 1 - це те, що технічно відбувається на рівні програмування додатків, принаймні за замовчуванням, оскільки існує також режим "запису з додаванням", щоб уникнути очищення вмісту файлу. Сама ОС представить зміни, які мають бути зроблені більше, як Теорія 2, але резюме через LBA. Сам привід тоді, ймовірно, зробить щось, що є поєднанням теорії 1 і теорії 2.

Так. Це складно, і дуже залежить від виробника / розробника ОС / розробника додатків. Однак уся ця складність спрямована на підвищення надійності зберігання даних при одночасному покращенні енергоспоживання / ресурсу акумулятора.


3

Залежить. AFAIK Microsoft Word, коли зберігається .doc(не .docx) файли з увімкненими параметрами швидкого збереження , додає зміни, внесені до документа з моменту останнього збереження, до існуючого файлу.


1

Взагалі кажучи, комп’ютер виділить пам'ять, де оригінальний файл знаходиться як "видалений", але все це насправді означає, що він більше не відображатиметься у вашому файловому браузері, а комірки в пам'яті, де він був записаний, дозволені бути перезаписаним у майбутньому.

Щодо того, чи записується новий файл у те саме місце, це зводиться до ряду факторів, насамперед програмного забезпечення, яке ви використовуєте, і того, як він призначений для використання пам'яті.


2
Я думаю, що ви можете плутати "пам'ять" з поняттям операцій по від’єднанню файлової системи. І це не дійсно має нічого спільного з заявленим питанням, який запитує , якщо конкретні файли будуть перезаписані або , якщо є якесь - то п-смуговий поновлення.

Добре, якщо програмне забезпечення було розроблено саме для цього, то це можливо, хоча, наскільки я знаю, це, як правило, тривалість зберігання даних та оперативна пам'ять.
GigaJoules

На жаль, ваше пояснення (наскільки я можу розшифрувати, що ви маєте на увазі), безумовно, не те, як "довготривале зберігання та оперативна пам'ять" працюють. Але, врешті-решт, це мало спільного з питанням. Я повторюю, що програмне забезпечення оновлює текстову інформацію до файлу на обчислювальному пристрої загального призначення за допомогою типової сучасної файлової системи. Нам не потрібно думати, як щось на зразок "пам'яті" робить чи не працює, щоб відповісти на це питання.

1

Сподіваємось, це не зайве, трохи додаткової інформації / передумови.

Зазвичай ПК не має великого контролю над тим, як редагувати файл, саме це робить програма.

Кілька прикладів того, як деякі програми можуть працювати з редагуванням:

Блокнот завантажує весь документ у пам'ять, а потім зберігає всю річ над оригінальним документом (або новим, який ви вказуєте).

Майже всі інші невеликі редактори збережуть "новий" файл під час редагування, а потім скопіюють його в оригінальний документ, видаливши його під час "збереження".

Великі редактори документів, які ви можете використовувати для редагування книги, як правило, читають / змінюють розділ документа, оскільки вони можуть редагувати документи, які перевищують пам'ять. Вони можуть фактично редагувати документ "На місці". Вони можуть переписати одну сторінку, а решту залишити в спокої. Вони часто мають більш складне індексоване представлення на диску, ніж простий .txt-файл, який би дозволив подібну поведінку.

Великі редактори також можуть просто зберегти тимчасові файли з "оновленнями" вашого оригінального документа. Після остаточного збереження можна об'єднати їх і переписати документ.

Більшість редакторів можна налаштувати так, щоб залишити існуючу версію недоторканою та створити нову із змінами (зберегти старі версії).

Що стосується частини вашого запитання щодо того, що робить "ПК", деякі операційні системи запам'ятовують кожну версію файлу та завжди створюють нову. Це досить рідко в ці дні, але я пам’ятаю старі «Міні-комп’ютери» (те, що ми зараз би називали мейнфреймами), де кожен файл мав наприкінці версію, як «File.text.1», і вона додаватиметься до версії кожного разу, коли ви редагував його. Така поведінка краще застосовуватиметься до чогось подібного до магнітофона чи CD-ROM, де перезапис старої версії було абсолютно недоцільним.


1

2 це не неможливо, але це дурно з різних причин.

Добре написаний редактор текстових файлів:

  1. Напишіть файл з іншою назвою та новим вмістом. Якби оригінал був myfile.txt, то новий може бутиmyfile.txt.new
  2. За умови, що 1. вдалося перейменувати оригінал у файл резервної копії, скажімо myfile.txt~
  3. Перейменуйте новий файл на оригінальне ім'я myfile.txt
  4. Якщо все вдалося, видаліть файл резервної копії. Багато редакторів залишають його в будь-якому випадку, тому користувач може відновитись, якщо незабаром з’ясується, що те, що він / вона зробив з редактором, - це не те, що він / вона хотів зробити.

Якщо комп'ютер виходить з ладу або не вистачає місця на диску під час вищезазначеного, не виникає ситуація, коли і старі, і нові файли втрачаються або зберігаються лише частково.


Поведінка на місці і переписування поведінки багатьох текстових редакторів для операційних систем, що не належать IBM / не для Microsoft, за останні півстоліття не є "дурним".
JdeBP

1

Коротка відповідь

Висока залежність від редактора, основного програмного забезпечення / драйверів, місця зберігання даних.


Параноїк відповідь

Можна відновити, якщо ви не видалите її назавжди.


Довга відповідь

У вашому запитанні відсутня інформація (програмне забезпечення, обладнання тощо), тому замість того, щоб відповісти собі, я допоможу вам відповісти на своє запитання самостійно.

Це залежить від кількох факторів:

  1. Редактор : Якщо програмне забезпечення редактора замінює блоки одного і того ж файлу, воно може бути переписане. І це також може залежати від налаштувань редактора та типів файлів. Зауважте, що слово може бути курсивом. Навіть коли редактор переписує файл, він все ще може залишитися недоторканим (читайте наступні пункти).

  2. Основне програмне забезпечення / драйвери / файлова система : Файл залишатиметься недоторканим, якщо під ним є інше програмне забезпечення / драйвери, які захищають початковий файл від перезапису. Ці типи програмного забезпечення включають системи версій, віртуальні диференціальні диски, деякі резервні програми. Прикладом може слугувати Git , який збереже початкові файлові файли та створить новий файл, який містить змінені блоки.

  3. Зберігання :

    • Саме сховище може записувати змінені блоки на новий сектор та позначати старі блоки як "безкоштовно". Тоді файл фізично залишиться на сховищі (і підлягає відновленню), якщо він не буде перезаписаний іншим файлом. Прикладом є сучасне зберігання SSD , яке може робити це на апаратному рівні.

    • Існують способи відновлення даних з магнітних дисків типового механічного жорсткого диска, навіть коли дані були перезаписані . І в ньому є спеціалізовані компанії.

Отже, якщо ви хочете отримати конкретну відповідь, чи буде ваш файл видалено чи ні, ви також повинні сказати, який редактор, резервне копіювання / програмне забезпечення VCS та обладнання для зберігання ви використовуєте. Якщо я пропустив якийсь момент, сміливо відредагуйте відповідь.


Як переконатися, що видалений файл фактично видалений із сховища?

Це, мабуть, наступне питання, яке ви поставите перед собою. Ну є багато програмних та апаратних рішень. Оскільки SuperUser не призначений для просування програмного забезпечення / обладнання, замість того, щоб називати імена, я розповім, як їх знайти: шукайте ключові слова "остаточно видалити файл". Для більш точних відповідностей згадуйте вашу ОС, тип жорсткого диска або іншу інформацію, яку ви маєте.


1

Одне поведінка, про яке ще ніхто не згадував, - це відповідна поведінка деяких версій операційних систем MS Windows, також пов'язане з використовуваною файловою системою.

Поведінка працює так: Коли ви перейменовуєте або видаляєте файл, якщо ви створюєте (відновлюєте) (новий) файл з тим самим іменем протягом 15 секунд після видалення (або перейменування) оригінального файла, дата створення / позначка часу копіюється з вихідного файлу. По суті, новий файл "стає" старим / оригінальним файлом.

У цьому випадку насправді не має значення, чи додаток зберігає зміни у файлі вашим методом №1: створення нового файлу з тим самим іменем або за вашим методом №2: редагування / оновлення файлу на місці (файл не видалено). Так чи інакше, кінцевий файл виглядає (майже) всіма способами, як і оригінальний файл. Єдине, що він, ймовірно, займе різний простір фізичного диска (кластери / сектори), а запис каталогу для цього файлу, ймовірно, буде в іншому місці.

Як я вже говорив, це поведінка деяких версій MS Windows / файлових систем. Я не знаю, з якої версії Windows і з якою файловою системою це почалося, і якщо це все-таки поведінка останніх версій. Якби я мав здогадуватися, я б сказав, що він був представлений на Windows NT та Windows XP і все ще є поведінкою Windows 10, і (все ще здогадуюсь) для поведінки потрібна файлова система Fat32 або NTFS (і, можливо, новіша).


Насправді це має значення, тому що NTFS підтримує жорсткі посилання, і одна з відомих відмінностей між цими методами - це вплив на багатозахисні файли. Тунелювання файлової системи існує вже щонайменше з Windows NT 5.0.
JdeBP

@JdeBP - Так, ми згодні. Тому я сказав, що №1) "Близько" в "остаточний файл виглядає (майже) всіляко, як і вихідний файл", і №2) в каталозі в іншому місці.
Кевін Феган

Ви не згодні, якщо ви стверджуєте, як це робите, що це не має значення.
JdeBP
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.