Kullanımdayken Bir Dosyayı Taşıma - Nasıl Çalışır?


31

Windows işletim sistemi dışı .... fark ettim ki linux / mac gibi şeyler yapabilirim: - Amaç üzerine bir arkadaşınıza bir zip gönderin - Dosya transfer sırasında silin

Ve transfer başarısız olmaz.

Veya .. gibi işlemler yapabilirim .. - bir film başlat - dosyayı sil - film hala tamamlanmaya devam ediyor (sadece bellekte tamponlanmış değil, diskten oku)

Her ne kadar dosyalar "silinmiş" olsa da, belirttiğim gibi, aslında dosya sistemi üzerinde farklı bir yere taşınıyorlar ... yani bir Çöp dizini veya başka bir şey. Bu yüzden bana işletim sistemi, dosyalara doğrudan erişmek yerine, taşındığında güncellenen dosyayı bir pointer (@ pointer) kullanıyor gibi geliyor.

Herkes bu harika yeteneğin gerçekte nasıl uygulandığına ışık tutabilir mi? Daha fazla bilgi edinmek için google’ın ne olacağından bile emin değilim.

teşekkür ederim.


1
Teoride sanırım bunun gerçekleşmesi için 2 yol var. Her ikisi de gerçeklik. Dosya bellekte. Veya dosya sisteminin dosyalara referansları vardır ve sadece referans silinir. Her ikisi de gerçeklik. Referanslar gerçeği, silinmemiş programların işleri nasıl geri alabildiğidir. Dosyanın yaklaşan tüm programlar kapandığında gerçekten silindiği fikri saçma gibi geliyor. Bağlantılı listeler hakkında (kavramı daha derinlemesine anlamak için bir programlama veri yapısı) arayabilirsiniz. Veya belirli dosya sistemlerine bakabilirsiniz.
barlop

Yanıtlar:


29

Dizin girişi sadece bir inode için bir işaretçidir. Inode, dosya hakkında (adın dışında) meta bilgileri içerir ve dosyanın verilerini (varsa) işaret eder. Bir dosyayı kopyalamaya başladığınızda, inode için bir tanıtıcı elde edersiniz.

İşletim sistemi inode'a bir dizi referans tutar. İnode'a referanslar olduğu sürece, inode ve dosyanın verileri tutulur. Inode'a yapılan tüm referanslar kaldırıldıktan sonra, inode'dur ve dosyanın gerektirdiği alan serbest bırakılır.

Dosyanın kopyalanması için açık olduğundan, işleminiz dosyayı kapatana kadar saklanır. Bu, dosya aktarımı tamamlandığında gerçekleşmelidir ve kopyalama işlemi başarısız olursa gerçekleşecektir. Dosya aktarımı kısmen başarısız oluyorsa ve dosyaya tüm zor bağlantıları sildiyseniz, aktarımı başarılı bir şekilde yeniden başlatamazsınız.

EDIT: Diğerlerinin belirttiği gibi, aynı cihazdaki dosya hareketleri veriyi taşımadan yapılır. Bunun yerine, hedef dizinde yeni bir dizin girişi oluşturulur ve orijinal dizin girişi kaldırılır.

Aynı dosya için birden fazla dizin girişi olması mümkündür. Bunlara sert linkler denir. Orijinal girişi kaldırmadan dosya için yeni bir dizin girişi yapılarak oluşturulurlar. Dosya sisteminin inode'u, dosyayı gösteren dizin girişlerinin sayısını kaydetmek için bir referans sayısına sahiptir.

EDIT2: Eğer işlem çökerse veya öldürülürse, bellek içi erişim sayısı sıfıra düşeceğinden dosya temiz bir şekilde kaldırılacaktır. Program normal şekilde sona erdiğinde gerçekleşen eylem budur.

Bir güç kesintisi veya sistemin düzgün şekilde kapatılmaması durumunda, diskin fscktam olarak takılabilmesi için önce bir (dosya sistemi kontrolü) gerekir. Diskteki inode ve dizin yapılarının durumuna bağlı olarak, alan kurtarılır, dosya dizinde kalır veya dizine yeni bir giriş yapılır lost+found. Sonuçlar, hangi değişikliklerin diske atıldığına veya dosya sistemleri günlüğüne yazıldığına bağlı olacaktır.


5
Kesinlikle. Kendimi daha iyi koyamadım. Bu arada, bir programda bir miktar kazıma dosyası depolamasına ihtiyacınız varsa, ortak bir numara, /tmphemen bir dosya oluşturmaktır unlink(2). Bu noktada, bir dizinde dosya yok (çıkış ya da çöküşte temizlenecek hiçbir şey yok), ancak işleminiz dosyaya erişebiliyor ve başka hiçbir işlem yanlışlıkla ya da kasıtlı olarak karışamıyor. Bu ilgi özelliğini göstermektedir.
Norman Gray

Bu, bir program kullanırken açık bir dosya kaldırılırsa ve bir elektrik kesintisi olursa, sürücünün yer kaplamasının mahsur kalmaya devam edeceği anlamına mı geliyor? Ya dosyayı kullanan süreç çökerse ya da öldürülürse?
Jason C

1
@JasonC Sorularınızı yanıtlamak için yanıtı güncelleştirdim.
BillThor

6

Matt Jenkins tarafından açıklandığı gibi, işletim sistemi (dosya sistemi) uygulamalar tarafından açık tutulan dosyaları izler. Bir işlem bir dosyayı açık tuttuğu sürece, verileri diskte kalır (silinmiş olmasına rağmen, diğer programlar tarafından görülemez veya erişilebilir değildir).

Bunun bir sonucu olarak, bir dosyanın işgal ettiği alanın ancak onu kullanan son işlem kapatıldıktan sonra geri alınabileceğini unutmayın. Bu Linux / Unix dosya sistemi işlemleri için bir SSS: "'df' komutu bölümlemenin dolu olduğunu söylerken, 'du' boş alanı bildirir" (bakınız örneğin, http://batleth.sapienti-sat.org/projects/FAQs/ext3- faq.html ). Alan boşaltmanız gerekiyorsa, büyük dosyaları silmek için yeterli değildir (örneğin, günlük dosyaları), hiçbir işlemin açık kalmadığından da emin olmalısınız (genellikle günlük dosyalarıyla ilgili bir sorun).


OS X / HFS + durumunda doğru değil: Dosyaları örneğin Çöp Kutusuna taşıyabilir, ancak bölümler arasında taşıyamaz ya da silemezsiniz (örneğin Çöp Kutusunu boşaltmak).
Daniel Beck

2

Aslında oldukça basit. Dosya, referansların bir listesini tutar - dosyaya erişen işlemler. Dosyayı sildiğinizde sadece listeyi dizinden kaldırır ancak dosyanın kendisinden kaldırmaz. Dosyayı hala açmış olan programlar hala erişebilir. Dosya yalnızca erişen tüm programlar kapattığında aslında silinir.

Ayrıca, dosyayı taşıyarak - eğer aynı dosya sistemi içindeyse - dosya aslında bu şekilde hareket etmiyor, sadece işaretçiyi dosyanın içinde bulunduğu dizine değiştirir.


"Dosya referans listesini tutar"?
Daniel Beck

Dosya değil "OS veya Explorer" olmalıdır.
Moab

2
Bu aslında dosya sistemi olurdu.
JRobert

İşletim sistemi, dosyadaki referansları depolamak için dosya sistemini kullanır (dosya başlığı yapısında yanıp söner) - orada - hepimiz mutluyuz;)
Majenko

1
"Başvurular", dosyaya açık bir tanıtıcıyla ve dosyaya yapılan sert bağlantılara (ilk dosya adı da dahil) yapılan işlemlerdir. Veri blokları serbest olarak işaretlenmemiştir ve referans sayısı sıfıra gidene kadar yeniden kullanılabilir.
mpez0

0

Unix dosya sistemlerinde, bir dosyanın kendisine bir veya daha fazla sabit bağlantısı olabilir. Dosya en az bir olduğu sürece yaşar. Sonuncusu kaldırıldığında, dosya alanı boşaltılır. Yukarıdaki bağlantı size daha fazla okuma için bir başlangıç ​​noktası verecektir - özellikle "Bağlantı sayacı" bölümüne bakın.


1
Doğru, ama burada olan bu değil. Mesele şu ki , son hardlink kaldırıldıktan sonra bile , dosya tüm çekicilerin kendilerine tutamaçlarını kapatana kadar kalır.
sleske
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.