web-dev-qa-db-ja.com

PCがファイルを編集すると、元のファイルは削除されますか?

code.txt(またはその他のファイル)を編集して保存した場合、PCがプロセスを処理する方法について2つのアイデアがあります。

  1. PCはcode.txtを完全に削除し、新しいcode.txt(編集バージョン)を最初から作成します。

  2. PCはcode.txtの16進数の一部を編集します。したがって、削除は行われません。

コンピュータがどのように機能するかを表すアイデアはどれですか?

55
Desk Man

どちらか–使用されたテキストエディターによって異なります。

「テキストファイル」の概念はコンピューターに組み込まれていません。オペレーティングシステムごとにファイルの管理方法が異なり、テキストエディターによってファイルの使用方法が異なる場合があります。

実際には、両方のメカニズムを持つテキストエディタが見つかります。実質的にすべてのオペレーティングシステムallow既存のファイルの内容を直接上書きするため、メモ帳などの単純なエディターは、通常、OSに直接ファイルを直接書き込むように要求します。パワーミッドライト。したがって、信頼性の理由から、多くの編集者意図的に更新されたデータを新しいファイルに保存し、元のデータを削除します。

(インプレース更新は16進エディターでより一般的だと思います。ほとんどの編集ではバイトの挿入/削除は行われず、既存の場所のみが変更されるため、完全な書き換えファイルは必要ありません。)

3番目の操作モードもあります。エディターは最初に古いファイルのバックアップコピーを作成しますその後新しいデータをファイルに直接書き込みます。


またはファイルを保持するファイルシステムに依存します。ほとんどの従来のファイルシステムでは、プログラムが既存のファイルへの書き込みを要求した場合、ファイルシステムは古いデータをそのまま上書きします。

ただし、一部のファイルシステムdoは「コピーオンライト」モードで機能し、プログラムが必要とするかどうかにかかわらず、新しいデータは常に別の場所に書き込まれます。この場合も、中断された変更を完全に元に戻すことができるため、信頼性が向上するという利点があります。

一部のファイルシステム(Btrfsやext4など)では、これはオプションの機能です。他のもの(例:ログ構造化ファイルシステム)は、コア設計の一部です。

121
user1686

「ファイルの保存」について話しているので、ファイルはディスク上のインプレース編集されません。

通常のファイルシステムのファイルでは、2つの点を考慮する必要があります。ディレクトリエントリがあり、実際のファイルデータがディスクのどこかにあります。

通常のエディターでファイルを編集すると、ファイルデータがRAMに読み込まれ、編集はデータのコピーに対して行われます。次に、ファイルを保存するとき、基本的に2つのオプションがあります。

オプション1:元のファイルは名前を変更であるため、元のディレクトリエントリと元のデータの両方がディスクに残ります。名前の変更により、たとえばファイルのサフィックスが.bakに変更される場合があります(通常、以前の.bakファイルは削除されます)。次に、新しいファイルが作成され、メモリからのデータがそこに書き込まれます。

オプション2:元のディレクトリエントリが変更されるため、ファイルの長さは切り捨てになります。ファイルデータに使用されるディスク上の領域は未使用としてマークされますが、古いファイルの内容は上書きされるまでディスクに残ります。その後、新しいデータが書き込まれます。この場合、ディレクトリエントリは残り、ポイントするデータのみが変更されます。

考えられるバリエーションはいくつかありますが、一般的なものとして、編集されたデータは最初に一時ファイルに保存されるため、この時点でコンピューターがクラッシュしても、元のファイルは破損していない可能性があります。次に、元のファイルが削除され、新しいファイルの名前が正しい名前に変更されます。または、元のファイルを削除してから新しいファイルを書き込むこともできます。

したがって、あなたの理論1は、ほとんどの編集者が行うことと似ています。


次に、特別な場合があります。最も明白なものはディスクエディターで、ディスク上で直接バイトの読み取りと上書きができます。もう1つは、レコードが固定サイズのデータ​​ベースファイルである可能性があるため、レコードを上書きするだけでも簡単です。ただし、データをファイルの中央に追加することはできないため、テキストファイルや、ファイルの中央にあるデータの長さが一般的に変化するその他のファイルを編集する場合、これらのトリックは実際には使用できません。

したがって、理論2が可能な場合もありますが、通常のテキストエディターなどでは実行できません。

6
hyde

従来、ドライブはOSによって直接制御され、OSはアプリケーションによって制御されていました。その意味で、理論2はPCの主要な動作方法でした。 OSはphysicalにデータを置く場所を指定し、このプロセスを完全に制御しました。その結果、初期のファイルシステムには「不良セクター」テーブルがあったため、データが失われた後、コンピューターはデータが失われたことを通知し、セクターを使用不可としてマークして、さらなるデータ損失を回避できました。ディスクスキャンとデフラグは、日常的に行われていました。

ただし、世紀の変わり目に、LBAに移動したため、OSは単に、読み書きしたい「論理」ブロックを参照するだけになりました。ハードドライブ自体には、OSの背後にあるデータに気付かずにシャッフルするインテリジェンスが備わっています。検証に失敗したセクターは、データがどこにあるかに関するOSの知識に影響を与えることなく、単に新しい物理的な場所に移動することができるため、これは信頼性の向上を意味しました。

最近のハードウェアでは、 "Platter"ディスクドライブは通常、以前にあったものを新しい受信データで上書きするだけで、セクターがデータを保持していないように見える(セクターが破損または摩耗している)場合は、オプションでLBAを再マップします。 「フラッシュ」ドライブは通常、古いセルを消去してから、データを新しいセルに書き込みます。これは、ウェアレベリングと呼ばれるプロセスです。

どちらの場合も、報告された値を超える未使用の容量が常にあるため、これは可能です。このオーバープロビジョニングにより、ドライブは前世紀のテクノロジーのやや信頼性の低いテクノロジーよりも長い使用可能寿命を持つことができます。 LBAモードを使用すると、物理メディアをOSから抽象化できるため、ドライブ自体が、データの損失を防ぐためにドライブが必要と考えるあらゆる措置をとることができます。

アプリケーションレベルでは、通常、ファイルを「書き込み」モードで開きます。これにより、OSはファイルをクリアし(内容は「削除」しますが、ファイル自体は削除しません)、新しいデータを書き込みます。これらはすべてOSレベルでバッファリングされ、ドライブに「フラッシュ」され、要求された変更が行われます。

その情報を前提として、理論1は、少なくともデフォルトでは、アプリケーションプログラミングレベルで技術的に発生するものです。ファイルの内容の消去を回避するために、「書き込みを伴う書き込み」モードもあるからです。 OS自体は、理論2のように行われる変更を提示しますが、LBAを介して抽象化されます。ドライブ自体は、おそらく理論1と理論2を組み合わせたものを実行します。

うん。それは複雑で、部分的にメーカー/ OS開発者/アプリケーション開発者に依存しています。ただし、このすべての複雑さは、電力使用量/バッテリー寿命を改善しながら、データストレージをより信頼性の高いものにすることを目的としています。

4
phyrfox

依存します。 AFAIK Microsoft Wordでは、_高速保存オプションを有効にして.doc.docxではない)ファイルを保存すると、前回の保存以降にドキュメントに加えられた変更が既存のファイルに追加されます。

3
milet

うまくいけば、これは冗長ではなく、少し余分な情報/背景です。

PCは通常、ファイルの編集方法をあまり制御できません。ファイルを編集するのはアプリケーションです。

一部のアプリが編集を処理する方法のいくつかの例:

メモ帳は、ドキュメント全体をメモリに読み込み、元のドキュメント(または指定した新しいドキュメント)全体を保存します。

他のほぼすべての小さなエディターは、編集時に「新しい」ファイルを保存し、元のドキュメントにコピーして「保存」すると削除されます。

ブックの編集に使用する可能性のある大きなドキュメントエディターは、メモリよりも大きいドキュメントを編集できるため、ドキュメントのセクションを読み取り/変更する傾向があります。これらは実際に「インプレース」でドキュメントを編集する場合があります。彼らは1ページを書き直し、残りをそのままにするかもしれません。これらは多くの場合、この動作を可能にするために、単純な.txtファイルよりも複雑なインデックス付きのディスク上表現を持っています。

大規模な編集者は、「更新」を含む一時ファイルを元のドキュメントに保存することもできます。最終的な保存を行うと、それらをすべてマージしてドキュメントを書き直すことができます。

ほとんどのエディターは、既存のバージョンをそのままにして、変更を加えた新しいバージョンを作成するように構成できます(古いバージョンを保持します)。

「PC」の機能に関する質問の一部として、一部のオペレーティングシステムはファイルのすべてのバージョンを記憶し、常に新しいバージョンを作成します。これは最近では非常にまれですが、すべてのファイルの末尾に「File.text.1」のようなバージョンがあり、毎回バージョンに追加される古い「ミニコンピュータ」(現在はメインフレームと呼びます)を覚えていますそれを編集しました。この種の動作は、古いバージョンの上書きが完全に実用的ではないテープドライブやCD-ROMなどに適用するのが適切です。

1
Bill K

まだ誰も言及していない動作の1つは、MS Windowsオペレーティングシステムの一部のバージョンに関連する動作であり、使用中のファイルシステムにも関連しています。

動作は次のように機能します。ファイルを名前変更または削除するときに、元のファイルが削除(または名前変更)されてから15秒以内に同じ名前の(新しい)ファイルを作成(再作成)すると、作成日/タイムスタンプは元のファイルからコピーされます。基本的に、新しいファイルは古い/元のファイルになります。

この場合、アプリケーションがファイルへの変更をメソッド#1で保存するか、同じ名前で新しいファイルを作成するか、またはメソッド#2:所定の場所でファイルを編集/更新するかは問題ではありません(ファイル削除されません)。どちらの方法でも、最終的なファイルは、元のファイルと同様に、ほぼすべての方法で見えます。唯一のことは、異なる物理ドライブスペース(クラスター/セクター)を占める可能性が高く、ファイルのディレクトリエントリが異なる場所にある可能性があります。

私が言ったように、これはいくつかのバージョンのMS Windows /ファイルシステムの動作です。これが始まったWindowsのバージョンとファイルシステム、およびそれがまだ新しいバージョンの動作であるかどうかはわかりません。推測する必要がある場合は、Windows NTおよびWindows XPで導入されたものであり、それでもWindows 10の動作ですが、(まだ推測ですが)動作にはFat32またはNTFSが必要です(そしておそらく新しい)ファイルシステム。

1
Kevin Fegan

2は不可能ではありませんが、さまざまな理由で愚かです。

適切に作成されたテキストファイルエディターは次のようになります。

  1. 別の名前と新しい内容でファイルを書き込みます。オリジナルがmyfile.txt、新しいものはmyfile.txt.new
  2. 1.成功した場合、元のファイルの名前をバックアップファイルに変更します。たとえば、myfile.txt~
  3. 新しいファイルの名前を元の名前に変更myfile.txt
  4. すべてが成功した場合は、バックアップファイルを削除します。多くの編集者はとにかくそれを残します。そのため、ユーザーが編集者に対して行ったことが自分のやりたいことではなかったことがすぐに判明した場合、ユーザーは回復できます。

上記の間にコンピュータがクラッシュしたり、ディスクの領域が不足したりしても、古いファイルと新しいファイルの両方が失われたり、部分的にしか保存されないという状況はありません。

1
nigel222

一般的に言って、コンピュータは元のファイルが存在するメモリを「削除済み」として割り当てますが、これは実際にはファイルブラウザに表示されなくなり、書き込まれたメモリ内のセルが許可されることを意味します将来上書きされます。

新しいファイルが同じ場所に書き込まれるかどうかは、主に使用しているソフトウェアと、メモリを利用するためにどのように設計されているかなど、いくつかの要因に依存します。

1
GigaJoules

短い答え

エディター、基盤となるソフトウェア/ドライバー、ストレージに大きく依存します。


妄想的な答え

完全に削除しない限り、回復可能です。


長い答え

質問に不足している情報(ソフトウェア、ハードウェアなど)があるので、自分で答えるのではなく、自分で質問に答えられるようにします。

それはいくつかの要因に依存します:

  1. Editor:エディターソフトウェアが同じファイルのブロックを置き換える場合、書き換えられる可能性があります。また、これはエディタの設定やファイルの種類によって異なる場合があります。単語mayが斜体になっていることに注意してください。エディターがファイルを書き換えても、ファイルはそのまま残ります(次のポイントを読みます)。

  2. 基盤となるソフトウェア/ドライバ/ファイルシステム:初期ファイルが上書きされないように保護する他のソフトウェア/ドライバがある場合、ファイルはそのまま残ります。これらのタイプのソフトウェアには、バージョン管理システム、仮想差分ディスク、一部のバックアップソフトウェアが含まれます。例は Git で、元のファイルブロックを保持し、変更されたブロックを保持する新しいファイルを作成します。

  3. ストレージ

    • ストレージ自体は、変更されたブロックをnewセクターに書き込み、古いブロックを「空き」としてマークできます。その後、ファイルは他のファイルによって上書きされない限り、ストレージに物理的に残ります(そして回復可能です)。例はモダンSSDストレージで、ハードウェアレベルで実行できます。

    • データが上書きされた場合でも、典型的な機械式HDDの磁気ディスクからデータを回復する方法があります。そしてそこには専門会社があります。

そのため、ファイルが削除されるかどうかについて具体的な回答を得たい場合は、使用するエディター、バックアップ/ VCSソフトウェア/ハードウェア、およびストレージも指定する必要があります。ポイントを逃した場合は、回答を自由に編集してください。


削除されたファイルが実際にストレージから削除されたことを確認するにはどうすればよいですか?

これはおそらくあなたがあなた自身に質問する次の質問です。多くのソフトウェア/ハードウェアソリューションがあります。 SuperUserはソフトウェア/ハードウェアを宣伝するためのものではないので、名前を言う代わりに、それらを見つける方法を教えます。「ファイルを完全に削除」というキーワードで検索します。より正確な一致については、OS、ハードドライブの種類、またはその他の情報を記載してください。

1
X X