Bir PC bir dosyayı düzenlediğinde, orijinal dosyayı siler mi?


55

Eğer code.txt(ya da hangi dosyada) düzenlenmişse ve kaydedilmişse, bir bilgisayarın işlemi nasıl idare edeceğine dair iki fikrim var:

  1. PC code.txttamamen siler ve code.txtsıfırdan yeni bir düzenlenmiş sürüm yapar .

  2. PC onaltılı kısmını düzenler code.txt. Böylece silme olmaz.

Hangi fikir bilgisayarların nasıl çalıştığını gösterir?


Selamlar! Grawity kullanıcısı tarafından sağlanan mükemmel cevaptan yola çıkarak, açıklayıcı bazı sorular:

18
@HaakonDahl ne açıklayıcı sorular? Hiçbir şey göndermedin.
Büyük Ördek

Dangit. Bilgisayarıma geri dönene kadar beklemeliyim. Ancak, esas nokta hangi düzeydedir - donanım, dosya sistemi, işletim sistemi veya uygulama? Ve ne uygulaması?

Neden senin için önemli? "Yeni" bir dosya oluşturan programlar bile oluşturma zamanını orijinaliyle eşleşecek şekilde değiştirecektir. Gözle görülebilir tek fark önemli olabilecek inode numarası (veya eşdeğer kavramı) olacaktır (örneğin, etraflarında sabit bağlantılar varsa "senkronizasyondan çıkacak").
Bakuriu

1
Bu soruyu çok geniş olarak kapatmak için oy kullanma. Hepsi işletim sistemine, yazılıma ve temel dosya sisteminin yeteneklerine bağlıdır.
JakeGould

Yanıtlar:


121

Her ikisi de olabilir - kullanılan metin düzenleyicisine göre değişir.

'Metin dosyası' kavramı bilgisayarlarda yerleşik değildir - her işletim sistemi dosyaları farklı yönetebilir ve her metin düzenleyicisi bu dosyaları farklı kullanabilir.

Uygulamada, her iki mekanizmaya sahip metin editörleri bulacaksınız. Pratik olarak tüm işletim sistemleri , mevcut bir dosyanın içeriğinin üzerine doğrudan yazılmasına izin verir , bu nedenle Not Defteri gibi basit editörler genellikle işletim sisteminden doğrudan orijinal dosyaya yazmalarını ister; bu, uygulaması en kolay olan - ancak orta yazma gücünü kaybettiğinizde risklidir. Bu nedenle güvenilirlik nedenleriyle birçok editör güncellenen verileri kasıtlı olarak yeni bir dosyaya kaydeder ve orijinali siler.

(Yerinde yapılan güncellemelerin hex editörleri arasında daha yaygın olduğunu düşünüyorum, çoğu düzenlemenin bayt ekleme / silmediği, yalnızca varolan konumları değiştirdiği için tam bir yeniden yazma dosyasına gerek yoktur.)

Üçüncü bir çalışma modu bile var - editör önce eski dosyanın yedek kopyasını yapabilir, sonra doğrudan dosyaya yeni veriler yazabilir.


Ayrıca dosyayı tutan dosya sistemine de bağlıdır. Çoğu geleneksel dosya sisteminde, bir program varolan bir dosyaya yazmayı isterse, dosya sistemi eski verilerin üzerine yazacaktır.

Ancak, bazı dosya sistemleri do programı istediği ya da olmasın, herhangi bir yeni veriler her zaman farklı bir yere yazılır "kopya üzerinde yazma" modunda çalışır. Yine, bu, güvenilirliğin arttırılması avantajına sahiptir, çünkü kesintili bir değişiklik tamamen geri alınabilir.

Bazı dosya sistemlerinde (Btrfs veya ext4 gibi) bu isteğe bağlı bir özelliktir; Diğerlerinde (örneğin, log-yapılandırılmış dosya sistemleri) temel tasarımın bir parçasıdır.


30
Sadece bir dosya sistemi düzeyinde değil. Örneğin, Flash belleğin kendisine yazmadan önce bir bloğu temizlemesi gerekir. Bu nedenle, uygulamada, genellikle yeni değişikliği yeni bir bloğa yazıp eski bloğunda geçersiz kılarak dosyalara yazacaktır. Bu tür bir şey cihazın kendisi tarafından otomatik olarak ele alındığında, işletim sistemi normal bir sabit disk dosya sistemi kullanabilir.
Ocak'ta

7
@trlkly: Tüm modern flash bellek cihazları, disk sektöründen daha büyük büyüklükteki silme bölgelerine ayrılmıştır ve bu bölgelerin hiçbir bölümünü silmeden geri dönüşüm yapamazlar. Sonuç olarak, bir bölge 32 değerinde eski veri sektörüne ve 224 sektörden faydalı veri içeriyorsa, 224 sektördeki faydalı veriyi, eski alanların herhangi birinden alan boşaltmadan önce başka bir yere kopyalamak zorunda kalacaktır. Modern işletim sistemleri, içinde bulunduğu blok geri dönüştürülürse içeriği terk edilebilecek disk sektörlerini belirtmek için bir "trim" komutu kullanır.
supercat

Bazı editörler, çalışma zamanında hangi davranışı kullanacağını seçer (örneğin, bir dosyanın onu adlandıran tek bir dizin girdisine sahip olup olmamasına bağlı olarak).
Toby Speight

2
Birçok editör dosyayı hafızaya okur ve tüm değişiklikleri orada yapar. (Belki de devam eden çalışmanın bir kopyasını farklı bir şekilde otomatik olarak kaydetme) Peiodik olarak, değişiklikleri kaydetmediğiniz sürece orijinal dosya değiştirilmez, örneğin vi's: w komutu ile
jamesqf

4
@jamesqf: Asıl soru , bir dosya "düzenlendiğinde ve kaydedildiğinde " ne
olacağıyla ilgiliydi

6

"Dosyayı kaydetme" hakkında konuştuğunuz için, dosya diskte yerinde düzenlenmeyecektir.

Her zamanki dosya sistemindeki bir dosyada, dikkate alınması gereken iki şey vardır. Dizin girişi var ve diskte bir yerde gerçek dosya verileri var.

Bir dosyayı normal bir düzenleyicide düzenlerseniz, dosya verilerini RAM'e yükler ve veriler sadece bir kopyasında gerçekleşir. Sonra dosyayı kaydettiğinizde, temelde iki seçenek vardır:

Seçenek 1: orijinal dosya yeniden adlandırılmıştır , dolayısıyla hem orijinal dizin girişi hem de orijinal veriler diskte kalacaktır. Yeniden adlandırmak örneğin dosya sonekini değiştirebilir .bak( .bakgenellikle önceki herhangi bir dosyayı kaldırmak ). Daha sonra yeni bir dosya oluşturulur ve bellekteki veriler orada yazılır.

Seçenek 2: Orijinal dizin girişi değiştirilir, böylece dosya 0 boyuna kesilir . Dosya verileri için kullanılan disk alanı kullanılmayan olarak işaretlenecek, ancak eski dosya içerikleri üzerine yazılmadan önce diskte kalacaktır. Sonra yeni veriler yazılır. Bu durumda, dizin girişi kalır, sadece işaret ettiği veriler değiştirilir.

Birkaç olası varyasyon vardır, bunlar normal bir durumdur, düzenlenen veriler ilk önce geçici dosyaya kaydedilir, bu nedenle bilgisayarınız bu noktada çökerse, orijinal dosya zarar görmeyecektir. Ardından orijinal dosya silinir ve yeni dosya doğru adla yeniden adlandırılır. Veya, yeni dosyayı yazmadan önce orijinal dosya silinebilir.

Bu yüzden, teoriniz 1 çoğu editörün yaptıklarına yakın.


O zaman özel durumlar var. En belirgin olanı, baytların doğrudan okunması ve üzerine yazılmasını sağlayan bir disk editörüdür. Bir diğeri, kayıtların sabit boyutta olabileceği bir veritabanı dosyası olabilir, bu nedenle bir kaydın üzerine yazmak kolaydır. Ancak veriler bir dosyanın ortasına eklenemez ve bu nedenle metin dosyalarını veya dosyanın ortasındaki verilerin uzunluğunun sıkça değiştiği herhangi bir dosyayı düzenleyerek bu hileler gerçekten kullanılamaz.

Yani teoriniz 2 bazı durumlarda mümkündür, ancak normal metin editörleri ve böyle yapmazlar.


1
"" Dosyayı kaydetme "hakkında konuştuğunuz için, dosya diskte yerinde düzenlenmeyecek." - Bir dosyayı "açtığınızda", düzenlediğinizde ve değişiklikleri diske yazdığınızda, dosyanın "yerinde yazıldığından" (üzerine yazılmış) veya eski dosyadan bağımsız olarak "dosyayı kaydettiğinizi" düşünüyorum. silinir veya yeniden adlandırılır ve yeni bir dosya oluşturulur. Her iki durumda da, genellikle, bir noktada "değişiklikleri kaydet" ya da "değişiklikleri at" seçeneğine karar verirsiniz.
Kevin Fegan

@KevinFegan Peki, bir dosyayı uygun diskte veya hex editöründe açabilir, içeriği düzenleyebilir ve değişiklikleri kaydedebilirsiniz . Veya, bir veritabanı dosyasını (SQLite veritabanı dosyası gibi) açabilir, veritabanını değiştirebilir ve dosyaya bağlı değişiklikleri yapabilirsiniz. Bu nedenle, sadece bir dosyayı değişiklik için açmak, onu yerinde değiştirmek anlamına gelebilir, ancak "dosyayı kaydetmek" genellikle yeni bir dosya oluşturmak anlamına gelir ve bu diğer alternatifler değişiklikleri kaydetmek için farklı adlandırılmış eylemlere sahiptir.
hyde

4

Tarihsel olarak, sürücüler doğrudan uygulama tarafından kontrol edilen işletim sistemi tarafından kontrol ediliyordu. Bu bağlamda, Teori 2, bilgisayarların çalışmasının birincil yoluydu. İşletim sistemi veri koymak için fiziksel bir yer belirledi ve bu süreç üzerinde tam kontrol sahibi oldu. Sonuç olarak, ilk dosya sistemlerinin bir "kötü sektör" tablosu vardı, bu nedenle verileriniz kaybolduktan sonra, bilgisayar size verilerin kaybolduğunu söyleyebilir ve sektörü daha fazla veri kaybını önlemek için kullanılamaz olarak işaretler. Disk taramaları ve birleştirme günün siparişiydi.

Ancak, yüzyılın başından sonra, LBA'ya taşındık, bu yüzden şimdi işletim sistemi okumak ya da yazmak istediği “mantıksal” bloğa başvuracaktı. Sabit diskin kendisi artık işletim sistemi arkasındaki verileri fark etmeden karıştırmak için bir zekâya sahipti. Bu, daha fazla güvenilirlik anlamına geliyordu, çünkü doğrulayamayan sektörler, işletim sisteminin bu verinin bulunduğu yerdeki bilgisini etkilemeden basit bir şekilde yeni bir fiziksel yere taşınabilir.

Modern donanımda, "plakalı" disk sürücüleri tipik olarak yeni gelen verilerle önceden olanların üzerine yazar ve sektör veriyi tutmayacak gibi görünüyorsa isteğe bağlı olarak LBA'yı yeniden düzenler (sektör zarar görmüş veya aşınmış). "Flash" sürücüleri tipik olarak eski hücreleri siler ve daha sonra aşınma seviyeleme olarak bilinen bir işlem olan yeni hücrelere veri yazar.

Her iki durumda da bu mümkündür çünkü rapor edilen değerin ötesinde her zaman kullanılmayan kapasite vardır. Bu aşırı tedarik, diskin önceki yüzyılın teknolojisinin oldukça güvenilmez teknolojisinden daha uzun bir kullanım ömrüne sahip olmasını sağlar. LBA modu fiziksel ortamın işletim sisteminden soyutlanmasını sağlar, böylece sürücünün veri kaybını önlemek için sürücünün gerekli olduğunu düşündüğü herhangi bir önlemi alabilir.

Uygulama düzeyinde, genellikle "WRITE" modunda bir dosyayı açarsınız, bu işletim sisteminden dosyayı temizlemesini söyler (içeriği silin, ancak dosyanın kendisini değil), ardından yeni veriler yaz. Bunların hepsi işletim sistemi düzeyinde tamponlanır, daha sonra istenen değişiklikleri yapan sürücüye "temizlenir".

Bu bilgi göz önüne alındığında, Teori 1, uygulama içeriğinde, en azından varsayılan olarak dosya içeriğinin silinmesini önlemek için bir "ekli yazma" modu olduğu için, varsayılan olarak olan şeydir. İşletim sisteminin kendisi Teori 2'ye benzer şekilde yapılacak ancak LBA aracılığıyla soyutlanan değişiklikleri sunacak. Sürücü daha sonra muhtemelen Teori 1 ve Teori 2'nin karışımı olan bir şey yapacak.

Evet. Bu karmaşık ve çok parça üreticisi / işletim sistemi geliştiricisi / uygulama geliştiricisi bağımlı. Bununla birlikte, bu karmaşıklığın tümü, güç kullanımını / pil ömrünü artırırken veri depolama alanını daha güvenilir hale getirmeyi amaçlar.


3

Bağlı olmak. AFAIK Microsoft Word, Hızlı kaydetme seçenekleri etkinleştirilmiş .doc( kaydedilmemiş .docx) dosyaları kaydederken , son kaydetme varolan dosyayı yaptığından bu yana belgeye yapılan değişiklikleri ekler.


1

Genel olarak konuşursak, bir bilgisayar, orijinal dosyanın bulunduğu yerde “silinmiş” olarak yer alan bir belleği tahsis eder, ancak tüm bunlar aslında dosya tarayıcınızda görünmeyeceği ve bellekte bulunan hücrelere izin verildiği anlamına gelir. gelecekte üzerine yazılmak.

Yeni dosyanın aynı yere yazılıp yazılmadığına ilişkin olarak, öncelikle kullandığınız yazılım ve hafızayı nasıl kullanacak şekilde tasarlandığı birkaç faktöre bağlıdır.


2
Sanırım "bellek" ile dosya sistemi bağlantısının kaldırılması işlemleri arasındaki düşünceyi karıştırıyor olabilirsiniz. Ve bu değil gerçekten somut dosyaların üzerine yazılır eğer veya n-yönlü güncelleme çeşit varsa sorar belirtilen bir soru ile ilgisi var.

Yazılım bunu özellikle yapacak şekilde tasarlandıysa, bu mümkün, ancak bildiğim kadarıyla bu genellikle Uzun süreli depolama ve RAM'in nasıl çalıştığını bildiğim kadarıyla mümkün.
GigaJoules

Maalesef, açıklama (bildiğim kadarıyla ne demek istediğini deşifre gibi) kesinlikle olduğunu değil nasıl "uzun vadeli depolama ve RAM" çalışması. Ancak günün sonunda, bunun eldeki soru ile ilgisi yok. Yinede, yazılımın metin bilgisini genel amaçlı bir bilgi işlem cihazında tipik bir modern dosya sistemiyle bir dosyaya nasıl güncellediğini soruyorum. "Bellek" gibi bir şeyin bu soruyu cevaplamak için nasıl çalıştığını veya çalışmadığını düşünmemize gerek yoktur.

1

Umarım bu gereksiz, biraz ekstra bilgi / arka plan değildir.

PC genellikle bir dosyanın nasıl düzenlendiği üzerinde fazla kontrole sahip değildir, onu yapan uygulamadır.

Bazı uygulamaların düzenlemeyi nasıl işleyebileceğine ilişkin birkaç örnek:

Not Defteri tüm belgeyi belleğe yükler ve ardından her şeyi orijinal belgenizin üzerine (veya belirttiğiniz yeni bir belgeye) kaydeder.

Neredeyse tüm diğer küçük düzenleyiciler, düzenlediğiniz sırada "yeni" bir dosya kaydedecek ve ardından "kaydettiğinizde" silerek orijinal belgenize kopyalayacaktır.

Bir kitabı düzenlemek için kullanabileceğiniz Büyük Belge düzenleyicileri, belgenin bir bölümünü okuma / değiştirme eğilimindedir, çünkü bellekten daha büyük belgeleri düzenleyebilirler. Bunlar aslında "Yerinde" belgesini düzenleyebilir. Bir sayfa yeniden yazıp geri kalanını yalnız bırakabilirler. Bunlar genellikle bu davranışa izin vermek için basit bir .txt dosyasından daha karmaşık bir indekslenmiş diskte gösterime sahiptir.

Büyük editörler ayrıca "güncellemeleri" olan geçici dosyaları da orijinal belgenize kaydedebilir. Son kaydettiğinizde hepsini birleştirmek ve belgenizi yeniden yazabilirsiniz.

Çoğu editör mevcut sürümü el değmeden bırakacak ve değişikliklerinizle yenisini oluşturacak şekilde yapılandırılabilir (eski sürümleri korur).

Bir "PC" nin ne yaptığına ilişkin sorunuzun bir kısmına gelince, bazı işletim sistemleri bir dosyanın her sürümünü hatırlar ve daima yeni bir tane oluşturur. Bu günlerde oldukça nadir fakat eski "Mini Computers" ı hatırlıyorum. düzenledi. Bu tür davranışlar, eski sürümün üzerine yazılmasının tamamen pratik olmadığı bir teyp sürücüsü veya CD rom gibi bir şeye uygulanacaktır.


1

2 imkansız değildir, ancak çeşitli nedenlerle aptaldır.

İyi yazılmış bir metin dosyası düzenleyicisi:

  1. Farklı bir ada ve yeni içeriğe sahip bir dosya yazın. Orijinal olsaydı, myfile.txtyenisi olabilirdi.myfile.txt.new
  2. Sağlanan 1. başarılı, orijinali bir yedekleme dosyasına yeniden adlandır myfile.txt~
  3. Yeni dosyayı orijinal adıyla yeniden adlandırın myfile.txt
  4. Her şey başardıysa, yedekleme dosyasını kaldırın. Birçok editör onu yine de terk eder, böylece kullanıcı editörle yaptığı şeyin ne yapmak istediğini yapmadığını öğrenirse iyileşebilir.

Bilgisayar yukarıda belirtilen sırada diskte çökerse veya çalışmazsa, hem eski hem de yeni dosyaların kaybedildiği veya yalnızca kısmen kaydedildiği bir durum yoktur.


Son yarım yüzyıl boyunca IBM dışı / Microsoft dışı işletim sistemleri için pek çok metin düzenleyicisinin yerinde ve yeniden yazma davranışını "aptal" değil.
JdeBP

1

Kısa cevap

Son derece editörünüze, temel yazılıma / sürücülere, depolamaya bağlıdır.


Paranoyak cevap

Kalıcı olarak kaldırmadıkça kurtarılabilir olabilir.


Uzun cevap

Sorunuzda eksik bilgi var (yazılım, donanım vb.), Bu yüzden kendime cevap vermek yerine sorunuzu kendinize cevaplamanıza yardımcı olacağım.

Birkaç faktöre bağlıdır:

  1. Editör : editör yazılımı aynı dosyanın blokları değiştirir, o zaman olabilir yeniden yazılabilir olsun. Bu da editör ayarlarına ve dosya türlerine bağlı olabilir. Kelimenin italik olabileceğine dikkat edin . Editör dosyayı yeniden yazsa bile, dokunulmadan kalabilir (sonraki noktaları okuyun).

  2. Temel yazılım / sürücüler / dosya sistemi : Alttaki dosyanın üzerine yazılmasını önleyen başka bir yazılım / sürücü varsa dosyaya dokunulmadan kalacaktır. Bu tür yazılımlar sürüm sistemleri, sanal diferansiyel diskler, bazı yedekleme yazılımları içerir. Örnek, orijinal dosya bloklarını tutacak ve değiştirilmiş blokları tutan yeni bir dosya oluşturacak Git .

  3. Depolama :

    • Deponun kendisi yeni bir sektöre değiştirilmiş bloklar yazabilir ve eski blokları "serbest" olarak işaretleyebilir. Ardından, dosya başka bir dosya tarafından üzerine yazılmadıkça fiziksel olarak depoda kalır (ve kurtarılabilir). Örnek donanım düzeyinde yapabilen modern SSD depolamadır .

    • Verilerin üzerine yazıldığında bile tipik bir mekanik HDD'nin manyetik disklerinden veri kurtarmanın yolları vardır . Ve içinde uzman şirketler var.

Bu nedenle, dosyanızın silinip silinmeyeceğine dair somut bir yanıt almak istiyorsanız, hangi düzenleyiciyi, yedekleme / VCS yazılımını / donanımını ve depolama alanını kullandığınızı da söylemelisiniz. Herhangi bir noktayı kaçırırsam, cevabı düzenlemek için çekinmeyin.


Silinen dosyanın gerçekte bellekten silindiğinden nasıl emin olunur?

Muhtemelen kendini sorgulayacağın bir sonraki soru budur. Pek çok yazılım / donanım çözümü var. SuperUser yazılımı / donanımı tanıtmak için olmadığından, isimleri söylemek yerine nasıl bulacağınızı size söyleyeceğim: "kalıcı olarak dosya sil" anahtar kelimelerini arayın. Daha kesin eşleşmeler için işletim sisteminizden, sabit disk tipinizden veya sahip olduğunuz diğer bilgilerden bahsedin.


1

Henüz kimsenin bahsetmediği bir davranış, MS Windows işletim sistemlerinin bazı sürümlerinin alakalı davranışıdır, ayrıca kullanılan dosya sistemiyle de ilgilidir.

Davranış böyle çalışır: Bir dosyayı yeniden adlandırdığınızda veya sildiğinizde, orijinal dosyanın silinmesinden (veya yeniden adlandırılmasından) sonra 15 saniye içinde aynı adda (yeni) bir dosya oluşturduysanız (yeniden oluşturursanız), oluşturma tarihi / zaman damgası, orijinal dosyadan kopyalanır. Temel olarak, yeni dosya eski / orijinal dosyaya "dönüşür".

Bu durumda, uygulamanın değişiklikleri # 1 yönteminizle dosyaya kaydetmesi veya aynı ada sahip yeni bir dosya oluşturması veya # 2 yönteminizle: dosyayı yerinde düzenlemek / güncellemek gerçekten önemli değil silinmedi). Her iki durumda da, son dosya, orijinal dosya gibi, neredeyse her şekilde görünür. Tek şey, muhtemelen farklı fiziksel sürücü alanlarını (kümeler / sektörler) kaplayacak ve dosyanın dizin girişi muhtemelen farklı bir konumda olacaktır.

Dediğim gibi, bu, MS Windows / dosya sistemlerinin bazı sürümlerinin bir davranışıdır. Hangi Windows sürümünde ve hangi dosya sisteminde başlatıldığını ve hala daha yeni sürümlerin davranışı olup olmadığını bilmiyorum. Tahmin etmek zorunda olsaydım, Windows NT ve Windows XP'de tanıtıldığını ve hala Windows 10'un davranışı olduğunu söyleyebilirim ve (hala bir tahmin) davranışı bir Fat32 ya da NTFS (ve belki de daha yeni) bir dosya sistemi gerektirir.


Aslında, fark eder, çünkü NTFS sabit bağlantıları desteklemektedir ve bu yöntemler arasındaki iyi bilinen farklardan biri de çok bağlantılı dosyalar üzerindeki etkidir. Dosya sistemi tüneli, en az Windows NT 5.0'dan bu yana olmuştur.
JdeBP

@JdeBP - Evet, aynı fikirdeyiz. Bu yüzden # 1) “Neredeyse” dediğimde “son dosya, orijinal dosya gibi her yönden (neredeyse) ve # 2) farklı bir konumdaki dizin girişine bakar.
Kevin Fegan

Sizin de yaptığınız gibi, önemli olmadığını iddia ettiğinizde hemfikir değilsiniz.
JdeBP
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.