Quando um PC edita um arquivo, ele exclui o arquivo original?

55

Se code.txt(ou qualquer outro arquivo) for editado e salvo, tenho duas idéias de como um PC lidaria com o processo:

  1. O PC exclui code.txtcompletamente e cria uma nova code.txt(versão editada) do zero.

  2. O PC edita parte de hex de code.txt. Portanto, nenhuma exclusão acontece.

Qual ideia representa como os computadores funcionam?

Desk Man
fonte
Saudações! Trabalhando com a excelente resposta fornecida pelo usuário Grawity, aqui estão algumas perguntas esclarecedoras:
18
@HaakonDahl que perguntas esclarecedoras? Você não postou nada.
The Great Duck
Dangit. Tenho que esperar até eu voltar ao meu PC. Mas a essência é qual o nível - hardware, sistema de arquivos, sistema operacional ou aplicativo? E qual aplicativo?
Por que isso importa para você? Mesmo os programas que criam um arquivo "novo" provavelmente alterarão a hora da criação para que ele corresponda ao original. A única diferença visível seria o número do inode (ou conceito equivalente) que pode ser importante (por exemplo, se você tiver links físicos, eles ficarão "fora de sincronia").
Bakuriu 26/01
11
A votação para encerrar esta questão é muito ampla. Tudo depende do sistema operacional, software e recursos do sistema de arquivos subjacente.
JakeGould 27/01

Respostas:

121

Pode ser: depende do editor de texto usado.

O conceito de 'arquivo de texto' não é incorporado aos computadores - cada sistema operacional pode gerenciar arquivos de maneira diferente e cada editor de texto pode usar esses arquivos de maneira diferente.

Na prática, você encontrará editores de texto com ambos os mecanismos. Praticamente todos os sistemas operacionais permitem a substituição direta do conteúdo de um arquivo existente, portanto editores simples como o Bloco de Notas geralmente pedem ao sistema operacional para gravar diretamente no arquivo original, pois é mais fácil de implementar - mas arriscado se você perder energia no meio da gravação. Portanto, por razões de confiabilidade, muitos editores salvam deliberadamente os dados atualizados em um novo arquivo e excluem o original.

(Acho que as atualizações no local são mais comuns entre os editores hexadecimais, onde a maioria das edições não insere / exclui bytes, mas apenas altera os locais existentes, portanto, um arquivo de reescrita completo não é necessário.)

Existe até um terceiro modo de operação - o editor pode primeiro fazer uma cópia de backup do arquivo antigo e depois gravar novos dados diretamente no arquivo.


Ele também depende do sistema de arquivos que mantém o arquivo. Nos sistemas de arquivos mais tradicionais, se um programa solicitar a gravação em um arquivo existente, o sistema de arquivos substituirá apenas os dados antigos no local.

No entanto, alguns sistemas de arquivos fazer o trabalho no modo "copy-on-write", onde todos os dados novos é sempre escrito para um local diferente, se o programa quer ou não. Novamente, isso tem a vantagem possível de aumentar a confiabilidade, pois uma alteração interrompida pode ser totalmente revertida.

Em alguns sistemas de arquivos (como Btrfs ou ext4), esse é um recurso opcional; em outros (por exemplo, sistemas de arquivos estruturados em log), faz parte do design principal.

grawity
fonte
30
Não é apenas no nível do sistema de arquivos. A memória flash, por exemplo, precisa limpar um bloco antes de poder gravar nele. Portanto, na prática, ele geralmente grava em arquivos simplesmente escrevendo a nova alteração em um novo bloco e invalidando-a no bloco antigo. Por ter esse tipo de coisa manipulada automaticamente pelo próprio dispositivo, o sistema operacional pode usar apenas um sistema de arquivos normal do disco rígido.
trlkly 22/01
7
@trlkly: Todos os dispositivos modernos de memória flash são divididos em regiões de apagamento que são ordens de magnitude maiores que um setor de disco e não podem reciclar nenhuma parte dessa região sem apagar tudo. Consequentemente, se uma região contiver 32 setores obsoletos com valor e 224 setores com dados úteis, ela terá que copiar os 224 setores de dados úteis em outro lugar antes de liberar espaço de qualquer um dos setores obsoletos. Os sistemas operacionais modernos usam um comando "trim" para indicar setores do disco cujo conteúdo pode ser abandonado se o bloco em que estão inseridos for reciclado.
supercat 23/01
Alguns editores escolhem, em tempo de execução, qual comportamento usar (por exemplo, dependendo de um arquivo ter apenas uma entrada de diretório nomeando-o ou muitos).
Toby Speight
2
Muitos editores simplesmente leem o arquivo na memória e fazem todas as alterações ali. (Talvez seja possível salvar automaticamente uma cópia do trabalho em andamento para outra diferente.) O arquivo original não é alterado até que você salve as alterações, por exemplo, com o comando vi's: w.
jamesqf 23/01
4
@jamesqf: Bem, a pergunta era sobre o que acontece quando um arquivo é "editado e salvo " ...
grawity
6

Como você está falando sobre "salvar o arquivo", o arquivo não será editado no local no disco.

Com um arquivo em um sistema de arquivos usual, há duas coisas a considerar. Existe a entrada do diretório e os dados reais do arquivo em algum lugar do disco.

Quando você edita um arquivo em um editor normal, ele carrega os dados do arquivo na RAM e qualquer edição acontece nessa cópia dos dados. Então, quando você salva o arquivo, existem basicamente duas opções:

Opção 1: o arquivo original é renomeado , para que a entrada do diretório original e os dados originais permaneçam no disco. A renomeação pode, por exemplo, alterar o sufixo do arquivo para .bak(removendo qualquer .bakarquivo anterior , geralmente). Em seguida, um novo arquivo é criado e os dados da memória são gravados lá.

Opção 2: a entrada do diretório original é modificada para que o arquivo seja truncado no tamanho 0. A área no disco usada para os dados do arquivo será marcada como não utilizada, mas o conteúdo antigo do arquivo permanecerá no disco até que sejam substituídos. Em seguida, novos dados são gravados. Nesse caso, a entrada do diretório permanece, apenas os dados para os quais aponta são alterados.

Existem algumas variações possíveis, sendo uma comum, os dados editados são armazenados primeiro em arquivos temporários; portanto, se o computador travar nesse momento, o arquivo original provavelmente não será danificado. Em seguida, o arquivo original é excluído e o novo arquivo renomeado com o nome correto. Ou, o arquivo original pode ser excluído antes de escrever o novo.

Portanto, sua teoria 1 está próxima do que a maioria dos editores faz.


Depois, há casos especiais. O mais óbvio é um editor de disco, que permite ler e substituir bytes diretamente no disco. Outro pode ser um arquivo de banco de dados, em que os registros podem ter tamanho fixo, por isso é fácil substituir apenas um registro. Mas os dados não podem ser anexados no meio de um arquivo e, portanto, editando arquivos de texto ou quaisquer outros arquivos em que o comprimento dos dados no meio do arquivo geralmente muda, esses truques não podem realmente ser usados.

Portanto, sua teoria 2 é possível em alguns casos, mas editores de texto normais e outros não o fazem.

hyde
fonte
11
"Como você está falando sobre" salvar o arquivo ", o arquivo não será editado no local no disco." - Acho que sempre que você "abre" um arquivo, edita e grava as alterações no disco, você está "salvando o arquivo", independentemente de o arquivo estar "gravado no local" (sobrescrito) ou no arquivo antigo é excluído ou renomeado e um novo arquivo é criado. De qualquer maneira, você geralmente, em algum momento, decide "salvar as alterações" ou "descartar as alterações".
Kevin Fegan 28/01
@KevinFegan Bem, você pode abrir um arquivo em um disco ou editor hexadecimal adequado, editar o conteúdo e salvar as alterações . Ou, você pode abrir um arquivo de banco de dados (como o arquivo de banco de dados SQLite), modificar o banco de dados e ter alterações confirmadas no arquivo. Portanto, apenas abrir um arquivo para modificação pode significar modificá-lo no local, mas "salvar um arquivo" geralmente implica a criação de um novo arquivo, e essas outras alternativas têm ações de nomes diferentes para salvar alterações.
hyde
4

Historicamente, as unidades eram controladas diretamente pelo sistema operacional, que por sua vez era controlado pelo aplicativo. Nesse contexto, a Teoria 2 foi o principal modo de funcionamento dos PCs. o sistema operacional especificou um local físico para colocar os dados e tinha controle total sobre esse processo. Como resultado, os sistemas de arquivos antigos tinham uma tabela "setor defeituoso"; portanto, após a perda de seus dados, o computador poderia informar que os dados foram perdidos e marcar o setor como inutilizável para evitar mais perda de dados. As verificações de disco e a desfragmentação estavam na ordem do dia.

No entanto, após a virada do século, nos mudamos para o LBA, agora o sistema operacional simplesmente referencia o bloco "lógico" no qual deseja ler ou gravar. O próprio disco rígido agora tinha a inteligência para embaralhar os dados nas costas do sistema operacional sem perceber. Isso significava maior confiabilidade, uma vez que os setores que não conseguiam verificar poderiam simplesmente ser movidos para um novo local físico sem afetar o conhecimento do SO sobre onde esses dados estavam localizados.

No hardware moderno, as unidades de disco "platter" geralmente substituem o que havia antes com os novos dados recebidos e, opcionalmente, remapeiam o LBA se o setor parecer que não pode reter os dados (o setor está danificado ou desgastado). As unidades "Flash" normalmente apagam as células antigas e gravam dados em novas células, um processo conhecido como nivelamento de desgaste.

Nos dois casos, isso é possível porque sempre há capacidade não utilizada além do valor relatado. Esse excesso de provisionamento permite que a unidade tenha uma vida útil mais longa do que a tecnologia pouco confiável da tecnologia do século anterior. O modo LBA permite que o meio físico seja abstraído do sistema operacional para que a própria unidade possa tomar as medidas que julgar necessárias para impedir a perda de dados.

No nível do aplicativo, você normalmente abre um arquivo no modo "WRITE", que instrui o sistema operacional a limpar o arquivo ("excluir" o conteúdo, mas não o próprio arquivo) e, em seguida, gravar novos dados. Tudo isso é armazenado em buffer no nível do sistema operacional e, em seguida, "liberado" para a unidade, que faz as alterações solicitadas.

Dada essa informação, a Teoria 1 é o que tecnicamente acontece no nível de programação de aplicativos, pelo menos por padrão, pois também existe um modo "escrever com anexar" para evitar a limpeza do conteúdo do arquivo. O próprio sistema operacional apresentará as alterações a serem feitas mais como a Teoria 2, mas abstraídas via LBA. O próprio drive provavelmente fará algo que é uma mistura das teorias 1 e 2.

Sim. É complicado e depende muito do fabricante da peça / desenvolvedor do SO / desenvolvedor do aplicativo. No entanto, toda essa complexidade visa tornar o armazenamento de dados mais confiável e, ao mesmo tempo, melhorar o uso de energia / a duração da bateria.

phyrfox
fonte
3

Depende. AFAIK Microsoft Word, ao salvar arquivos .doc(não .docx) com as opções de gravação rápida ativadas, anexa as alterações feitas no documento desde a última gravação do arquivo existente.

milet
fonte
1

De um modo geral, um computador alocará a memória onde o arquivo original reside como 'excluído', mas tudo isso realmente significa é que ele não aparecerá mais no navegador de arquivos e as células na memória onde foi gravado são permitidas para ser substituído no futuro.

A questão de saber se o novo arquivo está gravado no mesmo local deve-se a vários fatores, principalmente o software que você está usando e como ele foi projetado para usar a memória.

GigaJoules
fonte
2
Eu acho que você pode estar confundindo "memória" com a noção de operações de desvinculação do sistema de arquivos. E isso realmente não tem nada a ver com a pergunta declarada, que pergunta se os arquivos concretos foram substituídos ou se há algum tipo de atualização n-way.
Bem, se o software foi projetado para fazer isso especificamente, então é possível, embora, até onde eu saiba, geralmente é assim que o armazenamento de longo prazo e a RAM funcionam.
GigaJoules 24/01
Infelizmente, sua explicação (tanto quanto eu posso decifrar o que você quer dizer) não é decididamente como "armazenamento e RAM de longo prazo" funcionam. Mas, no final das contas, isso tem pouco a ver com a questão em questão. O que, reitero, está perguntando como o software atualiza as informações textuais para um arquivo em um dispositivo de computação de uso geral com um sistema de arquivos moderno típico. Não precisamos considerar como algo como "memória" funciona ou não para responder a essa pergunta.
1

Espero que isso não seja redundante, um pouco de informações / antecedentes extras.

O PC geralmente não tem muito controle sobre como um arquivo é editado, é o aplicativo que o faz.

Alguns exemplos de como alguns aplicativos podem lidar com a edição:

O bloco de notas carrega o documento inteiro na memória e salva tudo sobre o documento original (ou um novo que você especificar).

Quase todos os outros editores pequenos salvarão um arquivo "novo" à medida que você edita e depois o copia no documento original, excluindo-o quando você "salva".

Os editores de documentos grandes que você pode usar para editar um livro tendem a ler / modificar uma seção de um documento porque podem editar documentos maiores que a memória. Eles podem realmente editar o documento "No local". Eles podem reescrever uma página e deixar o resto em paz. Geralmente, eles têm uma representação indexada em disco mais complexa do que um arquivo .txt simples permitiria esse comportamento.

Os editores grandes também podem salvar apenas arquivos temporários com "atualizações" no documento original. Quando você faz seu salvamento final, ele pode mesclar todos eles e reescrever seu documento.

A maioria dos editores pode ser configurada para deixar a versão existente intocada e criar uma nova com suas alterações (reter versões antigas).

Quanto à parte da sua pergunta sobre o que um "PC" faz, alguns sistemas operacionais lembram todas as versões de um arquivo e sempre criam uma nova. Isso é muito raro hoje em dia, mas lembro-me dos antigos "Mini Computers" (o que agora chamamos de mainframes), onde cada arquivo tinha uma versão no final como "File.text.1" e era adicionada à versão sempre que você editado. Esse tipo de comportamento se aplicaria melhor a algo como uma unidade de fita ou CD-ROM, onde a substituição da versão antiga era completamente impraticável.

Bill K
fonte
1

2 não é impossível, mas é estúpido por várias razões.

Um editor de arquivos de texto bem escrito:

  1. Escreva um arquivo com um nome diferente e o novo conteúdo. Se o original fosse myfile.txt, o novo poderia sermyfile.txt.new
  2. Desde que 1. tenha sido bem-sucedido, renomeie o original para um arquivo de backup, por exemplo myfile.txt~
  3. Renomeie o novo arquivo para o nome original myfile.txt
  4. Se tudo der certo, remova o arquivo de backup. Muitos editores o deixam assim mesmo, para que o usuário possa se recuperar se logo descobrir que o que ele / ela fez com o editor não era o que ele / ela queria fazer.

Se o computador travar ou ficar sem espaço no disco durante o procedimento acima, não haverá uma situação em que os arquivos antigos e os novos sejam perdidos ou salvos apenas parcialmente.

nigel222
fonte
O comportamento de truncar no local e reescrever muitos editores de texto para sistemas operacionais não IBM / não Microsoft nos últimos meio século não é "estúpido".
JdeBP 28/01
1

Resposta curta

Depende muito do seu editor, software / drivers subjacentes, armazenamento.


Resposta paranóica

Pode ser recuperável, a menos que você o remova permanentemente.


Resposta longa

Faltam informações na sua pergunta (software, hardware, etc.), então, em vez de responder a mim mesmo, eu o ajudarei a responder sua pergunta.

Depende de alguns fatores:

  1. Editor : se o software do editor substituir os blocos do mesmo arquivo, ele poderá ser reescrito. E isso também pode depender das configurações do editor e dos tipos de arquivo. Observe que a palavra may foi escrita em itálico. Mesmo quando o editor reescreve o arquivo, ele ainda pode permanecer intocado (leia os próximos pontos).

  2. Software / drivers / sistema de arquivos subjacentes : o arquivo permanecerá intocado se houver outro software / drivers abaixo que proteja o arquivo inicial de ser substituído. Esses tipos de software incluem sistemas de versão, discos diferenciais virtuais, alguns softwares de backup. Um exemplo é o Git , que manterá os blocos de arquivos originais e criará um novo arquivo que contém os blocos modificados.

  3. Armazenamento :

    • O armazenamento em si pode gravar blocos alterados em um novo setor e marcar os blocos antigos como "gratuitos". Em seguida, o arquivo permanecerá fisicamente no armazenamento (e é recuperável), a menos que seja substituído por outro arquivo. Exemplo é o armazenamento SSD moderno , que pode ser feito no nível do hardware.

    • Existem maneiras de recuperar dados de discos magnéticos de um HDD mecânico típico, mesmo quando os dados foram substituídos . E há empresas especializadas nele.

Portanto, se você deseja obter uma resposta concreta se o seu arquivo será excluído ou não, também deve informar qual editor, software / hardware / armazenamento de backup / VCS você usa. Se eu perdi algum ponto, fique à vontade para editar a resposta.


Como garantir que o arquivo excluído seja realmente excluído do armazenamento?

Esta é provavelmente a próxima pergunta que você se questionará. Bem, existem muitas soluções de software / hardware. Como o SuperUser não é para promover software / hardware, em vez de dizer os nomes, eu direi como encontrá-los: procure as palavras-chave "excluir permanentemente o arquivo". Para correspondências mais exatas, mencione seu sistema operacional, tipo de disco rígido ou outras informações que você possui.

XX
fonte
1

Um comportamento que ninguém mencionou ainda é um comportamento relevante de algumas versões dos sistemas operacionais MS Windows também está relacionado ao sistema de arquivos em uso.

O comportamento funciona da seguinte maneira: quando você renomeia ou exclui um arquivo, se você criar (recriar) um (novo) arquivo com o mesmo nome dentro de 15 segundos após o arquivo original ter sido excluído (ou renomeado), a data de criação / o carimbo de data / hora é copiado do arquivo original. Essencialmente, o novo arquivo "se torna" o arquivo antigo / original.

Nesse caso, não importa se o aplicativo salva as alterações no arquivo pelo seu método nº 1: criando um novo arquivo com o mesmo nome ou pelo método nº 2: editar / atualizar o arquivo no local (arquivo não excluído). De qualquer forma, o arquivo final se parece (quase) em todos os sentidos, como o arquivo original. A única coisa é que provavelmente ocupará espaço em disco físico diferente (clusters / setores) e a entrada de diretório para o arquivo provavelmente estará em um local diferente.

Como eu disse, esse é um comportamento de algumas versões do MS Windows / sistema de arquivos. Não sei em qual versão do Windows e em qual sistema de arquivos isso foi iniciado e se ainda é o comportamento das versões mais recentes. Se eu tivesse que adivinhar, diria que foi introduzido no Windows NT e Windows XP e ainda é o comportamento do Windows 10 e (ainda é um palpite) o comportamento requer um sistema de arquivos Fat32 ou NTFS (e talvez mais novo).

Kevin Fegan
fonte
Na verdade, isso importa, porque o NTFS oferece suporte a links físicos e uma das diferenças conhecidas entre esses métodos é o efeito em arquivos com links múltiplos. O encapsulamento do sistema de arquivos existe desde pelo menos o Windows NT 5.0.
JdeBP 28/01
@JdeBP - Sim, nós concordamos. Foi por isso que eu disse # 1) "Quase" em "o arquivo final se parece (quase) em todos os sentidos, como o arquivo original" e # 2) na entrada do diretório em um local diferente.
Kevin Fegan
Você não concorda se afirma, como faz, que isso não importa.
JdeBP 27/02