PC가 파일을 편집 할 때 원본 파일을 삭제합니까?


55

경우 code.txt(또는 어떤 파일)을 편집하고 저장 I는 PC 프로세스를 처리 할 방법이 개 아이디어를 가지고 :

  1. PC가 code.txt완전히 삭제 code.txt되고 처음부터 새로운 (편집 된 버전)이 만들어집니다.

  2. PC는의 16 진수 부분을 편집 code.txt합니다. 따라서 삭제가 발생하지 않습니다.

컴퓨터가 어떻게 작동 하는가?


인사말! Grawity 사용자가 제공 한 탁월한 답변을 바탕으로 다음과 같은 몇 가지 명확한 질문이 있습니다.

18
@HaakonDahl 무슨 명확한 질문? 당신은 아무것도 게시하지 않았습니다.
그레이트 오리

단깃. PC로 돌아올 때까지 기다려야합니다. 그러나 요점은 하드웨어, 파일 시스템, OS 또는 앱의 수준입니까? 그리고 어떤 앱?

왜 당신에게 중요합니까? "새"파일을 작성하는 프로그램이라도 작성 시간이 원본과 일치하도록 작성 시간이 변경 될 수 있습니다. 유일하게 눈에 띄는 차이점은 중요 할 수있는 inode 번호 (또는 동등한 개념)입니다 (예 : 주변에 하드 링크가있는 경우 "동기화되지 않음").
Bakuriu

1
이 질문을 너무 광범위하게 마무리하기위한 투표. 그것은 모두 OS, 소프트웨어 및 기본 파일 시스템 기능에 달려 있습니다.
JakeGould

답변:


121

둘 중 하나 일 수 있습니다. 사용 된 텍스트 편집기에 따라 다릅니다.

'텍스트 파일'개념은 컴퓨터에 내장되어 있지 않습니다. 각 운영 체제는 파일을 다르게 관리 할 수 ​​있으며 각 텍스트 편집기는 해당 파일을 다르게 사용할 수 있습니다.

실제로 두 가지 메커니즘을 모두 갖춘 텍스트 편집기를 찾을 수 있습니다. 실제로 모든 운영 체제 는 기존 파일의 내용을 직접 덮어 쓸 있으므로 메모장과 같은 간단한 편집기는 일반적으로 OS에 원본 파일에 직접 쓰도록 요청하기 때문에 구현하기가 가장 쉽지만 쓰기 도중 전원이 꺼지면 위험합니다. 따라서 안정성을 위해 많은 편집자가 의도적으로 업데이트 된 데이터를 새 파일에 저장하고 원본을 삭제합니다.

(내부 업데이트는 대부분의 편집이 바이트를 삽입 / 삭제하지 않고 기존 위치 만 변경하므로 전체 다시 쓰기 파일이 필요없는 16 진수 편집기에서 더 일반적이라고 생각합니다.)

세 번째 작동 모드도 있습니다. 편집기는 먼저 이전 파일의 백업 복사본을 만든 다음 파일에 새 데이터를 직접 씁니다.


그것은 또한 파일을 유지 파일 시스템에 따라 달라집니다. 대부분의 기존 파일 시스템에서 프로그램이 기존 파일에 쓰도록 요청하면 파일 시스템은 기존 데이터를 그대로 덮어 씁니다.

그러나 일부 파일 시스템 "기록 중 복사"모드에서 작동합니다. 여기서 새 데이터는 프로그램이 원하는지 여부에 관계없이 항상 다른 위치에 기록됩니다. 다시 한 번, 중단 된 변경을 완전히 되돌릴 수 있기 때문에 안정성이 향상 될 수 있습니다.

일부 파일 시스템 (예 : Btrfs 또는 ext4)에서 이것은 선택적 기능입니다. 다른 것 (예 : 로그 구조 파일 시스템)에서는 핵심 디자인의 일부입니다.


30
파일 시스템 수준이 아닙니다. 예를 들어, 플래시 메모리는 블록에 쓰기 전에 블록을 비워야합니다. 따라서 실제로는 새 변경 사항을 새 블록에 작성하고 이전 블록에서 무효화하여 파일에 쓰는 경우가 많습니다. 장치 자체에서 이러한 종류의 작업을 자동으로 처리함으로써 OS는 일반적인 하드 드라이브 파일 시스템을 사용할 수 있습니다.
trlkly

7
@trlkly : 모든 최신 플래시 메모리 장치는 디스크 섹터보다 수십 배 큰 소거 영역으로 나뉘며, 해당 영역을 모두 지우지 않고는 해당 영역의 일부를 재활용 할 수 없습니다. 결과적으로, 한 영역에 32 개의 쓸모없는 섹터의 데이터와 224 개의 유용한 데이터가 포함 된 경우, 쓸모없는 섹터에서 공간을 확보하기 전에 224 개의 유용한 데이터를 다른 곳에 복사해야합니다. 최신 운영 체제는 "trim"명령을 사용하여 사용중인 블록이 재활용되는 경우 내용을 버릴 수있는 디스크 섹터를 나타냅니다.
supercat

일부 편집기는 런타임에 사용할 동작을 선택합니다 (예 : 파일에 이름을 지정하는 디렉토리 항목이 하나만 있는지 또는 많은지에 따라).
Toby Speight

2
많은 편집자들은 단순히 파일을 메모리로 읽고 모든 변경을 수행합니다. (아마도 진행중인 작업의 사본을 다른 작업에 주기적으로 자동 저장하는 경우가 있습니다.) vi의 : w 명령을 사용하여 변경 사항을 저장할 때까지 원본 파일은 전혀 변경되지 않습니다.
jamesqf

4
@ jamesqf : 글쎄, 문제 파일이 "편집 되고 저장 될 때"어떻게되는지 관한 것이 었습니다 .
grawity

6

"파일 저장"에 대해 이야기하고 있으므로 파일은 디스크에서 제자리에서 편집되지 않습니다.

일반적인 파일 시스템에 파일이 있으면 두 가지를 고려해야합니다. 디렉토리 항목이 있고 디스크 어딘가에 실제 파일 데이터가 있습니다.

일반 편집기에서 파일을 편집하면 파일 데이터가 RAM에로드되고 해당 데이터 사본에서 편집이 수행됩니다. 그런 다음 파일을 저장할 때 기본적으로 두 가지 옵션이 있습니다.

옵션 1 : 원본 파일의 이름바뀌 므로 원본 디렉토리 항목과 원본 데이터가 모두 디스크에 남아 있습니다. 예를 들어 파일 이름을 바꾸면 파일 접미사가로 변경됩니다 .bak( .bak일반적으로 이전 파일 제거 ). 그런 다음 새 파일이 작성되고 메모리의 데이터가 작성됩니다.

옵션 2 : 원래 디렉토리 항목이 수정되어 파일이 0 길이 로 잘립니다 . 파일 데이터에 사용 된 디스크 영역은 사용되지 않은 것으로 표시되지만 이전 파일 내용은 덮어 쓸 때까지 디스크에 남아 있습니다. 그런 다음 새로운 데이터가 작성됩니다. 이 경우 디렉토리 항목은 그대로 유지되며 디렉토리 항목 만 변경됩니다.

일반적인 변형 인 몇 가지 변형이있을 수 있으며 편집 된 데이터는 먼저 임시 파일에 저장되므로이 시점에서 컴퓨터가 충돌해도 원본 파일이 손상되지 않을 수 있습니다. 그런 다음 원본 파일이 삭제되고 새 파일 이름이 올바른 이름으로 바뀝니다. 또는 새 파일을 작성하기 전에 원본 파일을 삭제할 수 있습니다.

따라서 당신의 이론 1은 대부분의 편집자들이하는 일에 가깝습니다.


특별한 경우가 있습니다. 가장 확실한 방법은 디스크에서 바이트를 읽고 덮어 쓸 수있는 디스크 편집기입니다. 다른 하나는 레코드 크기가 고정 된 데이터베이스 파일 일 수 있으므로 레코드를 쉽게 덮어 쓸 수 있습니다. 그러나 파일 중간에 데이터를 추가 할 수 없으므로 파일 중간의 데이터 길이가 일반적으로 변경되는 텍스트 파일 또는 기타 파일을 편집하면 이러한 트릭을 실제로 사용할 수 없습니다.

따라서 이론 2는 경우에 따라 가능하지만 일반 텍스트 편집기는 그렇지 않습니다.


1
"파일 저장"에 대해 이야기하고 있기 때문에 디스크에서 파일이 제자리에서 편집되지 않습니다. " -파일을 "열고"편집 한 다음 변경 사항을 디스크에 다시 쓸 때마다 파일을 "제자리에 기록"했는지 (덮어 쓰기) 또는 이전 파일에 관계없이 "파일 저장"이라고 생각합니다. 이 삭제되거나 이름이 바뀌고 새 파일이 생성됩니다. 어느 쪽이든, 일반적으로 어느 시점에서 "변경 사항 저장"또는 "변경 사항 취소"를 결정합니다.
케빈 페건

@KevinFegan 글쎄, 당신은 적절한 디스크 또는 16 진수 편집기에서 파일을 열고 내용을 편집하고 변경 사항을 저장할 수 있습니다. 또는 데이터베이스 파일 (예 : SQLite 데이터베이스 파일)을 열고 데이터베이스를 수정하고 변경 사항이 파일에 커밋 될 수 있습니다. 따라서 수정을 위해 파일을 여는 것만으로 해당 파일을 제자리에서 수정하는 것을 의미 할 수 있지만 "파일 저장"은 일반적으로 새 파일을 생성 함을 의미하며 이러한 다른 대안은 변경 사항을 저장하기 위해 다르게 명명 된 작업을 갖습니다.
하이드

4

역사적으로, 드라이브는 OS에 의해 직접 제어되었으며, 애플리케이션에 의해 제어되었습니다. 이러한 맥락에서 이론 2는 PC의 기본 작동 방식이었습니다. OS 는 데이터를 넣을 물리적 위치를 지정 했으며이 프로세스를 완전히 제어 할 수있었습니다. 결과적으로 초기 파일 시스템에는 "잘못된 섹터"테이블이 있으므로 데이터가 손실 된 후 컴퓨터에서 데이터가 손실되었음을 알리고 더 많은 데이터 손실을 피하기 위해 해당 섹터를 사용할 수없는 것으로 표시 할 수 있습니다. 디스크 검사와 조각 모음은 그 당시의 순서였습니다.

그러나 세기가 지난 후, 우리는 LBA로 옮겼으므로 이제 OS는 단순히 읽고 쓰려는 "논리적"블록을 참조 할 것입니다. 하드 드라이브 자체는 이제 눈치 채지 않고 OS 뒤의 데이터를 뒤섞을 수있는 지능을 가졌습니다. 검증에 실패한 섹터는 해당 데이터의 위치에 대한 OS의 지식에 영향을주지 않고 단순히 새로운 물리적 위치로 이동할 수 있기 때문에 안정성이 향상되었습니다.

최신 하드웨어에서 "플래터"디스크 드라이브는 일반적으로 새로운 수신 데이터로 이전에 있던 모든 것을 덮어 쓰고 섹터가 데이터를 보유하지 않는 것처럼 보이는 경우 (섹터가 손상되었거나 마모 된 경우) LBA를 선택적으로 다시 매핑합니다. "플래시"드라이브는 일반적으로 기존 셀을 지우고웨어 레벨링이라고하는 프로세스 인 새 셀에 데이터를 씁니다.

두 경우 모두보고 된 값을 초과하여 항상 사용되지 않은 용량이 있기 때문에 가능합니다. 이 초과 프로비저닝을 통해 드라이브는 이전 세기 기술의 다소 신뢰할 수없는 기술보다 더 오래 사용할 수 있습니다. LBA 모드를 사용하면 물리적 매체를 OS에서 추출하여 드라이브 자체가 데이터 손실을 막기 위해 드라이브가 필요하다고 생각하는 모든 조치를 취할 수 있습니다.

응용 프로그램 수준에서 일반적으로 파일을 "쓰기"모드로 열어 OS에서 파일을 지우고 (파일 자체가 아니라 "삭제") 새 데이터를 쓰도록 지시합니다. 이 모든 것은 OS 수준에서 버퍼링 된 다음 드라이브에 "플러시"되어 요청 된 변경을 수행합니다.

이러한 정보가 주어지면 이론 1은 최소한 기본적으로 응용 프로그램 프로그래밍 레벨에서 기술적으로 발생하는 것입니다. 파일 내용을 지우는 것을 피하기 위해 "추가로 쓰기"모드도 있기 때문입니다. OS 자체는 Theory 2와 비슷하지만 LBA를 통해 추상화 된 변경 사항을 제공합니다. 드라이브 자체는 아마도 이론 1과 이론 2가 혼합 된 것을 할 것입니다.

네. 복잡하고 부품 제조업체 / OS 개발자 / 응용 프로그램 개발자에 따라 다릅니다. 그러나이 모든 복잡성은 전력 사용 / 배터리 수명을 향상시키면서 데이터 스토리지를보다 안정적으로 만드는 것을 목표로합니다.


3

다릅니다. AFAIK Microsoft Word 는 빠른 저장 옵션을 사용 하여 파일을 저장할.doc(아님 .docx) 파일을 저장할 때 기존 파일을 마지막으로 저장 한 이후 문서에 대한 변경 사항을 추가합니다.


1

일반적으로 컴퓨터는 원본 파일이있는 위치에 '삭제됨'으로 메모리를 할당하지만 실제로는 더 이상 파일 브라우저에 더 이상 표시되지 않으며 작성된 메모리의 셀이 허용됩니다. 나중에 덮어 쓸 수 있습니다.

새 파일이 같은 곳에 쓰여지는지 여부는 여러 가지 요인, 주로 사용하는 소프트웨어 및 메모리를 사용하도록 설계된 방법에 달려 있습니다.


2
파일 시스템 연결 해제 작업의 개념과 "메모리"를 혼동 할 수 있다고 생각합니다. 그리고 이것은하지 않습니다 정말 콘크리트 파일을 덮어 쓰기하는 경우 또는 n-방법 업데이트의 어떤 종류가 있는지 묻는 정해진 질문과 아무 상관이있다.

소프트웨어가 구체적으로 그렇게하도록 설계 되었다면 가능하다는 것은 알지만, 이것이 일반적으로 장기 저장소와 RAM이 모두 작동하는 방식입니다.
GigaJoules

불행히도 (내가 의미하는 바를 해독 할 수있는 한) 귀하의 설명은 "장기 저장 및 RAM"이 어떻게 작동하는지 결정 되지 않습니다 . 그러나 하루가 끝날 무렵, 이것은 당면한 질문과 거의 관련이 없습니다. 다시 말하지만, 소프트웨어가 일반적인 최신 파일 시스템을 갖춘 범용 컴퓨팅 장치에서 텍스트 정보를 파일로 업데이트하는 방법을 묻습니다. 우리는이 질문에 답하기 위해 "메모리"와 같은 것이 어떻게 작동하거나 작동하지 않는지를 고려할 필요가 없습니다.

1

희망적으로 이것은 여분의 정보 / 배경이 아닌 중복되지 않기를 바랍니다.

PC는 일반적으로 파일을 편집하는 방법을 많이 제어하지 않으며 파일을 편집하는 응용 프로그램입니다.

일부 앱이 편집을 처리하는 방법에 대한 몇 가지 예 :

메모장은 전체 문서를 메모리에로드 한 다음 원본 문서 (또는 지정한 새 문서) 전체를 저장합니다.

거의 모든 다른 소규모 편집자는 편집 할 때 "새"파일을 저장 한 다음 "저장"할 때 삭제하여 원본 문서 위에 복사합니다.

책을 편집하는 데 사용할 수있는 큰 문서 편집기는 메모리보다 큰 문서를 편집 할 수 있으므로 문서의 섹션을 읽거나 수정하는 경향이 있습니다. 실제로 문서를 "제자리에서"편집 할 수 있습니다. 한 페이지를 다시 쓰고 나머지는 그대로 둘 수 있습니다. 이것들은 종종 단순한 .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

아직 언급하지 않은 한 가지 동작은 일부 버전의 MS Windows 운영 체제와 관련된 동작이며 사용중인 파일 시스템과 관련이 있습니다.

동작은 다음과 같이 작동합니다. 파일 이름을 바꾸거나 파일을 삭제할 때 원본 파일을 삭제 (또는 이름을 바꾼) 후 15 초 이내에 동일한 이름으로 파일을 새로 만들면 (생성) 작성 날짜 / 타임 스탬프는 원본 파일에서 복사됩니다. 기본적으로 새 파일은 이전 / 원래 파일이됩니다.

이 경우 응용 프로그램이 방법 # 1, 같은 이름으로 새 파일 만들기 또는 방법 # 2로 파일 변경 내용을 저장하는지 여부는 중요하지 않습니다. 삭제되지 않음). 어느 쪽이든, 최종 파일은 원본 파일처럼 (거의) 모든 방향으로 보입니다. 유일한 것은 다른 물리적 드라이브 공간 (클러스터 / 섹터)을 차지하고 파일의 디렉토리 항목이 다른 위치에있을 가능성이 있다는 것입니다.

내가 말했듯이, 이것은 일부 버전의 MS Windows / 파일 시스템의 동작입니다. 어떤 버전의 Windows와 어떤 파일 시스템이 시작되었는지, 그리고 여전히 최신 버전의 동작인지 알 수 없습니다. 추측해야한다면 Windows NT 및 Windows XP에 도입되었으며 여전히 Windows 10의 동작이며, 여전히 동작에는 Fat32 또는 NTFS (및 최신) 파일 시스템이 필요합니다.


NTFS는 하드 링크를 지원하고 이러한 방법들 사이의 잘 알려진 차이점 중 하나는 다중 링크 파일에 미치는 영향입니다. 파일 시스템 터널링은 Windows NT 5.0 이상부터 사용되었습니다.
JdeBP

@JdeBP-예, 동의합니다. 그렇기 때문에 "최종 파일은 원본 파일처럼 거의 모든 방식으로 보임"및 # 2) 디렉토리 위치가 다른 위치에 있습니다.
Kevin Fegan

당신이하는 것처럼 그것이 중요하지 않다고 주장한다면 당신은 동의하지 않습니다.
JdeBP
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.