場合code.txt
(または任意のファイル)を編集して保存され、私はPCのプロセスを処理する方法を二アイデアを持っています:
PCは
code.txt
完全に削除し、新しいcode.txt
(編集済みバージョン)をゼロから作成します。PCはの16進数の一部を編集し
code.txt
ます。したがって、削除は行われません。
どのアイデアがコンピューターの仕組みを表していますか?
場合code.txt
(または任意のファイル)を編集して保存され、私はPCのプロセスを処理する方法を二アイデアを持っています:
PCはcode.txt
完全に削除し、新しいcode.txt
(編集済みバージョン)をゼロから作成します。
PCはの16進数の一部を編集しcode.txt
ます。したがって、削除は行われません。
どのアイデアがコンピューターの仕組みを表していますか?
回答:
いずれかである可能性があります-それは使用されたテキストエディターに依存します。
「テキストファイル」の概念はコンピューターに組み込まれていません。各オペレーティングシステムはファイルを異なる方法で管理し、各テキストエディターはそれらのファイルを異なる方法で使用します。
実際には、両方のメカニズムを持つテキストエディターがあります。実際には、すべてのオペレーティングシステムで既存のファイルの内容を直接上書きできるため、メモ帳などの単純なエディターは、通常、OSに元のファイルに直接書き込むように要求します。そのため、信頼性の理由から、多くのエディターは更新されたデータを意図的に新しいファイルに保存し、元のファイルを削除します。
(インプレース更新は、ほとんどの編集がバイトを挿入/削除せず、既存の場所を変更するだけであるため、完全な書き換えファイルは必要ない16進エディタでより一般的だと思います。)
第3の動作モードでもあります-編集者はまず、古いファイルのバックアップコピーを作成する可能性があるその後、直接ファイルに新しいデータを書き込みます。
また、ファイルを保持するファイルシステムにも依存します。ほとんどの従来のファイルシステムでは、プログラムが既存のファイルへの書き込みを要求すると、ファイルシステムは古いデータをその場で上書きします。
ただし、一部のファイルシステムは「コピーオンライト」モードで動作します。このモードでは、プログラムが必要とするかどうかにかかわらず、新しいデータは常に別の場所に書き込まれます。繰り返しますが、中断された変更を完全に元に戻すことができるため、これには信頼性の向上という利点があります。
一部のファイルシステム(Btrfsやext4など)では、これはオプション機能です。その他(ログ構造化ファイルシステムなど)では、コア設計の一部です。
「ファイルの保存」について話しているため、ファイルはディスク上でその場で編集されません。
通常のファイルシステムのファイルでは、2つの考慮事項があります。ディレクトリエントリがあり、ディスク上のどこかに実際のファイルデータがあります。
通常のエディターでファイルを編集すると、ファイルデータがRAMに読み込まれ、データのコピーで編集が行われます。次に、ファイルを保存するときに、基本的に2つのオプションがあります。
オプション1:元のファイルの名前が変更されるため、元のディレクトリエントリと元のデータの両方がディスクに残ります。たとえば、名前を変更すると、ファイルのサフィックスが変更されます.bak
(.bak
通常、以前のファイルは削除されます)。次に、新しいファイルが作成され、メモリからのデータがそこに書き込まれます。
オプション2:ファイルの長さが0に切り捨てられるように、元のディレクトリエントリが変更されます。ファイルデータに使用されるディスク上の領域は未使用としてマークされますが、古いファイルの内容は上書きされるまでディスク上に残ります。次に、新しいデータが書き込まれます。この場合、ディレクトリエントリは残り、それが指すデータのみが変更されます。
いくつかのバリエーションがありますが、一般的なものとして、編集されたデータは最初に一時ファイルに保存されるため、この時点でコンピューターがクラッシュしても、元のファイルは破損しません。次に、元のファイルが削除され、新しいファイルの名前が正しい名前に変更されます。または、新しいファイルを書き込む前に元のファイルを削除することもできます。
したがって、あなたの理論1は、ほとんどの編集者が行うこととほぼ同じです。
その後、特別なケースがあります。最も明らかなものはディスクエディタで、ディスク上のバイトを直接読み書きできます。もう1つはデータベースファイルで、レコードのサイズが固定されているため、レコードを簡単に上書きすることができます。ただし、ファイルの途中にデータを追加することはできないため、テキストファイルや、ファイルの途中のデータの長さが一般的に変化するその他のファイルを編集する場合、これらのトリックは実際には使用できません。
したがって、理論2が可能な場合もありますが、通常のテキストエディターなどではできません。
歴史的に、ドライブはOSによって直接制御され、OSはアプリケーションによって制御されていました。その文脈では、理論2はPCが動作する主要な方法でした。OS はデータを置く物理的な場所を指定し、このプロセスを完全に制御していました。その結果、初期のファイルシステムには「不良セクタ」テーブルがあったため、データが失われた後、コンピュータはデータが失われたことを通知し、セクタを使用不可としてマークしてデータ損失を防ぎます。ディスクスキャンとデフラグはその日の順序でした。
ただし、世紀の変わり目以降、LBAに移行したため、OSは読み取りまたは書き込みを行う「論理」ブロックを単に参照するようになりました。ハードドライブ自体は、OSの背後にあるデータを気付かずにシャッフルするインテリジェンスを備えています。検証に失敗したセクターは、そのデータの場所に関するOSの知識に影響を与えることなく、新しい物理的な場所に簡単に移動できるため、信頼性が向上しました。
現代のハードウェアでは、「プラッター」ディスクドライブは通常、新しい着信データで以前のすべてを上書きし、オプションでセクターがデータを保持していないように見える場合(セクターが破損または摩耗している)にLBAを再マッピングします。「フラッシュ」ドライブは通常、古いセルを消去してから、新しいセルにデータを書き込みます。これはウェアレベリングと呼ばれるプロセスです。
どちらの場合も、報告された値を超える未使用の容量が常にあるため、これは可能です。このオーバープロビジョニングにより、ドライブは、前世紀の技術のやや信頼性の低い技術よりも長い耐用年数を持つことができます。LBAモードでは、物理メディアをOSから抽象化できるため、ドライブ自体は、データの損失を防ぐためにドライブが必要と考えるあらゆる手段を講じることができます。
アプリケーションレベルでは、通常、ファイルを「WRITE」モードで開き、OSにファイルをクリアして(ファイル自体ではなく内容を「削除」)、新しいデータを書き込むよう指示します。これらはすべてOSレベルでバッファされ、その後ドライブに「フラッシュ」され、要求された変更が行われます。
その情報を考えると、理論的には、少なくともデフォルトでは、アプリケーションプログラミングレベルで起こることです。ファイルの内容のクリアを避けるための「追記付き」モードもあります。OS自体は、Theory 2のように行われる変更を提示しますが、LBAを介して抽象化されます。ドライブ自体は、おそらく理論1と理論2を組み合わせたものを実行します。
うん。それは複雑で、非常に部分的なメーカー/ OS-開発者/アプリケーション開発者に依存しています。ただし、この複雑さはすべて、電力使用量/バッテリー寿命を改善しながら、データストレージの信頼性を高めることを目的としています。
一般的に、コンピューターは元のファイルが存在するメモリを「削除済み」として割り当てますが、これは実際にはファイルブラウザに表示されなくなり、書き込まれたメモリ内のセルが許可されることを意味します将来的に上書きされます。
新しいファイルが同じ場所に書き込まれるかどうかは、多くの要因、主に使用しているソフトウェア、およびメモリを使用するように設計されている方法によって決まります。
これが冗長ではなく、少し余分な情報/背景であることを願っています。
通常、PCはファイルの編集方法をあまり制御しません。それを行うのはアプリケーションです。
一部のアプリが編集を処理する方法のいくつかの例:
メモ帳は、ドキュメント全体をメモリに読み込み、元のドキュメント(または指定した新しいドキュメント)全体を保存します。
他のほとんどすべての小さなエディタは、編集時に「新しい」ファイルを保存し、「保存」するときに元のドキュメントにコピーして削除します。
書籍の編集に使用できる大規模なドキュメントエディタは、メモリよりも大きいドキュメントを編集できるため、ドキュメントのセクションを読んだり変更したりする傾向があります。これらは実際にドキュメントを「インプレース」編集する場合があります。1ページを書き直し、残りはそのままにしておくことができます。これらは多くの場合、単純な.txtファイルがこの動作を許可するよりも複雑なインデックス付きのディスク上の表現を持っています。
大規模なエディターは、元のドキュメントの「更新」を含む一時ファイルを保存することもあります。最終保存を行うと、すべてをマージしてドキュメントを書き直すことができます。
ほとんどのエディターは、既存のバージョンをそのままにして、変更を加えて新しいバージョンを作成するように構成できます(古いバージョンを保持します)。
「PC」の機能に関する質問の部分に関しては、一部のオペレーティングシステムはファイルのすべてのバージョンを記憶し、常に新しいバージョンを作成します。これは最近ではめったにありませんが、すべてのファイルの最後に「File.text.1」のようなバージョンがあり、そのたびにバージョンに追加される古い「ミニコンピューター」(現在はメインフレームと呼んでいます)を覚えていますそれを編集しました。この種の動作は、古いバージョンの上書きが完全に非現実的であるテープドライブやCD-ROMのようなものにより適切に適用されます。
2は不可能ではありませんが、さまざまな理由でバカです。
適切に作成されたテキストファイルエディタは次のことを行います。
myfile.txt
場合、新しいものはmyfile.txt.new
myfile.txt~
myfile.txt
上記の間にコンピューターがクラッシュしたり、ディスク上のスペースがなくなったりした場合、古いファイルと新しいファイルの両方が失われたり、部分的にしか保存されない状況はありません。
エディター、基礎となるソフトウェア/ドライバー、ストレージに大きく依存します。
永久に削除しない限り、回復可能です。
質問には情報がありません(ソフトウェア、ハードウェアなど)。自分で答えるのではなく、自分で質問に答えるお手伝いをします。
それはいくつかの要因に依存します:
エディター:エディターソフトウェアが同じファイルのブロックを置き換える場合、書き換えられる可能性があります。また、これはエディターの設定とファイルの種類に依存する場合があります。単語が斜体になっている可能性があることに注意してください。エディターがファイルを書き換えた場合でも、そのままの状態を保つことができます(次のポイントをお読みください)。
基礎となるソフトウェア/ドライバー/ファイルシステム:初期ファイルを上書きから保護する他のソフトウェア/ドライバーが下にある場合、ファイルはそのまま残ります。これらのタイプのソフトウェアには、バージョン管理システム、仮想差分ディスク、一部のバックアップソフトウェアが含まれます。例はGitで、元のファイルブロックを保持し、変更されたブロックを保持する新しいファイルを作成します。
ストレージ:
ストレージ自体は、変更されたブロックを新しいセクターに書き込み、古いブロックを「空き」としてマークできます。その後、ファイルは他のファイルによって上書きされない限り、ストレージに物理的に残ります(そして回復可能です)。例は、ハードウェアレベルで実行できる最新のSSDストレージです。
データが上書きされた場合でも、典型的な機械式HDDの磁気ディスクからデータを回復する方法があります。そして、その中に専門会社があります。
そのため、ファイルが削除されるかどうかについて具体的な回答を得るには、使用しているエディター、バックアップ/ VCSソフトウェア/ハードウェア、ストレージも指定する必要があります。ポイントを逃した場合は、お気軽に回答を編集してください。
これはおそらく次の質問です。多くのソフトウェア/ハードウェアソリューションがあります。SuperUserはソフトウェア/ハードウェアを宣伝するためのものではないため、名前を伝えるのではなく、名前を見つける方法を説明します。「ファイルを完全に削除する」キーワードを検索します。より正確な一致については、OS、ハードドライブの種類、またはその他の情報を記載してください。
誰もまだ言及していない動作の1つは、MS Windowsオペレーティングシステムの一部のバージョンの関連動作であり、使用中のファイルシステムにも関連しています。
動作は次のように動作します:ファイルの名前を変更または削除する場合、元のファイルが削除(または名前変更)されてから15秒以内に同じ名前の(新しい)ファイルを作成(再作成)すると、作成日/タイムスタンプは元のファイルからコピーされます。基本的に、新しいファイルは古い/元のファイルに「なります」。
この場合、アプリケーションがメソッドへの変更をファイルに保存するかどうかは重要ではありません#1:同じ名前で新しいファイルを作成するか、メソッド#2によってファイルを編集/更新します(ファイル削除されません)。いずれにせよ、最終的なファイルは、元のファイルと同様に(ほぼ)すべての方法で検索されます。唯一のものは、おそらく異なる物理ドライブスペース(クラスター/セクター)を占有し、ファイルのディレクトリエントリはおそらく異なる場所にあるということです。
私が言ったように、これはMS Windows /ファイルシステムのいくつかのバージョンの動作です。どのバージョンのWindowsとこれがどのファイルシステムで起動したのか、そしてそれがまだ最新バージョンの動作であるかどうかはわかりません。推測しなければならなかった場合、それはWindows NTおよびWindows XPで導入され、Windows 10の動作であり、(まだ推測)動作にはFat32またはNTFS(およびおそらくより新しい)ファイルシステムが必要です。