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


55

場合code.txt(または任意のファイル)を編集して保存され、私はPCのプロセスを処理する方法を二アイデアを持っています:

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

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

どのアイデアがコンピューターの仕組みを表していますか?


ご挨拶!ユーザーGrawityが提供する優れた答えから作業を、ここではいくつかの明確な質問があります:

18
@HaakonDahl明確な質問は何ですか?何も投稿していません。
グレートダック

ダンギット。PCに戻るまで待つ必要があります。しかし要点は、ハードウェア、ファイルシステム、OS、アプリのどのレベルですか?そして、どのアプリ?

なぜあなたにとって重要なのですか?「新しい」ファイルを作成するプログラムでさえも、元のファイルと一致するように作成時間を変更する可能性があります。目に見える唯一の違いは、重要なiノード番号(または同等の概念)です(たとえば、周囲にハードリンクがある場合、それらは「非同期」になります)。
バクリウ

1
この質問が広すぎるとの結論に至りました。それはすべて、OS、ソフトウェア、および基礎となるファイルシステムの機能に依存します。
JakeGould

回答:


121

いずれかである可能性があります-それは使用されたテキストエディターに依存します。

「テキストファイル」の概念はコンピューターに組み込まれていません。各オペレーティングシステムはファイルを異なる方法で管理し、各テキストエディターはそれらのファイルを異なる方法で使用します。

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

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

第3の動作モードでもあります-編集者はまず、古いファイルのバックアップコピーを作成する可能性があるその後、直接ファイルに新しいデータを書き込みます。


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

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

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


30
ファイルシステムレベルだけではありません。たとえば、フラッシュメモリは、書き込み前にブロックをクリアする必要があります。そのため、実際には、新しいブロックに新しい変更を書き込み、古いブロックでそれを無効にするだけで、多くの場合ファイルに書き込みます。この種のことをデバイス自体が自動的に処理することにより、OSは通常のハードドライブファイルシステムを使用できます。
trlkly

7
@trlkly:最新のフラッシュメモリデバイスはすべて、ディスクセクターよりも数桁大きい消去領域に分割されており、そのような領域のすべてを消去しないとリサイクルできません。その結果、領域に32個の古いセクターに相当するデータと224セクターの有用なデータが含まれる場合、任意の古いセクターからスペースを解放する前に、224セクターの有用なデータを別の場所にコピーする必要があります。最近のオペレーティングシステムでは、「トリム」コマンドを使用して、ディスクブロックが使用されているブロックがリサイクルされた場合にコンテンツを破棄できるディスクセクタを示します。
スーパーキャット

一部のエディターは、実行時にどの動作を使用するかを選択します(たとえば、ファイルに名前を付けるディレクトリエントリが1つだけあるか、多数あるかによって異なります)。
トビースパイト

2
多くの編集者は、ファイルをメモリに読み込み、そこですべての変更を行います。(おそらく、進行中の作業のコピーを別の作業に定期的に自動保存します。)viの:wコマンドなどで変更を保存するまで、元のファイルはまったく変更されません。
ジェームズクフ

4
@jamesqf:まあ、質問はしたファイルが「編集されたときに何が起こるかについては、保存された」...
grawity

6

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

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

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

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

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

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

したがって、あなたの理論1は、ほとんどの編集者が行うこととほぼ同じです。


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

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


1
「あなたは「ファイルの保存」について話しているので、ファイルはディスク上でその場で編集されません。」-ファイルを「開いて」編集し、変更をディスクに書き戻すと、ファイルが「所定の場所に書き込まれる」(上書きされる)か古いファイルかに関係なく、「ファイルを保存する」ことになりますが削除または名前変更され、新しいファイルが作成されます。どちらにしても、通常は、ある時点で「変更を保存する」か「変更を破棄する」かを決定します。
ケビンフェガン

@KevinFeganさて、適切なディスクまたは16進エディタでファイルを開き、内容を編集して、変更保存できます。または、データベースファイル(SQLiteデータベースファイルなど)を開き、データベースを変更して、ファイルに変更をコミットすることもできます。そのため、変更のためにファイルを開くだけでその場で変更できますが、「ファイルを保存する」とは通常、新しいファイルを作成することを意味します。
ハイド

4

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

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

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

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

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

その情報を考えると、理論的には、少なくともデフォルトでは、アプリケーションプログラミングレベルで起こることです。ファイルの内容のクリアを避けるための「追記付き」モードもあります。OS自体は、Theory 2のように行われる変更を提示しますが、LBAを介して抽象化されます。ドライブ自体は、おそらく理論1と理論2を組み合わせたものを実行します。

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


3

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


1

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

新しいファイルが同じ場所に書き込まれるかどうかは、多くの要因、主に使用しているソフトウェア、およびメモリを使用するように設計されている方法によって決まります。


2
「メモリ」とファイルシステムのリンク解除操作の概念を混同していると思います。これは、具体的なファイルが上書きされているかどうか、または何らかのn-way更新があるかどうかを尋ねる、前述の質問とはまったく関係ありませ

ソフトウェアが特にそうするように設計されていれば、それは可能ですが、私が知る限りでは、これは一般的に長期ストレージとRAMの両方の動作です。
ギガジュール

残念ながら、あなたの説明(私があなたの意味を解読できる限り)は、明らかに「長期ストレージとRAM」がどのように機能するかではありません。しかし、結局のところ、これは目の前の質問とはほとんど関係ありません。繰り返しますが、これは、ソフトウェアが一般的な最新のファイルシステムを使用して汎用コンピューティングデバイス上のファイルにテキスト情報を更新する方法を尋ねていることです。この質問に答えるために、「記憶」のようなものがどのように機能するか、または機能しないかを考慮する必要はありません。

1

これが冗長ではなく、少し余分な情報/背景であることを願っています。

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

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

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

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

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

大規模なエディターは、元のドキュメントの「更新」を含む一時ファイルを保存することもあります。最終保存を行うと、すべてをマージしてドキュメントを書き直すことができます。

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

「PC」の機能に関する質問の部分に関しては、一部のオペレーティングシステムはファイルのすべてのバージョンを記憶し、常に新しいバージョンを作成します。これは最近ではめったにありませんが、すべてのファイルの最後に「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ストレージです。

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

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


削除されたファイルが実際にストレージから削除されたことを確認する方法は?

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


1

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

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

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

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


NTFSはハードリンクをサポートしており、これらの方法のよく知られている違いの1つは、多重リンクファイルへの影響であるため、実際には問題になります。少なくともWindows NT 5.0以降、ファイルシステムのトンネリングが行われています。
JdeBP

@JdeBP-はい、同意します。そのため、「最終ファイルは(元のファイルのように)あらゆる方法で(ほぼ)見えます」で#1)「ほぼ」、そして#2)別の場所のディレクトリエントリと言いました。
ケビンフェガン

あなたがするように、それが重要でないと断言する場合、あなたは同意しません。
JdeBP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.