2011-03-07 14 views
11

Bir NTFS dosya sisteminde depolanan bir dosyayı okuyorsam ve hala okunurken bu dosyayı taşımaya/yeniden adlandırmaya çalışırsam, bunu engellemekteyim. Bunu EXT3 gibi bir UNIX dosya sisteminde dener, başarılı olur ve okuma işlemini etkilemez. Dosyayı bile okuyabilirim ve okuma süreçleri etkilenmez. Bu nasıl çalışıyor? Birisi bana bu davranışın neden UNIX dosya sistemlerinde değil NTFS'de desteklendiğini açıklayabilir mi? Sabit linkler ve inode'larla ilgili belirsiz bir his var ama iyi bir açıklama için minnettarım.UNIX komutları mv ve rm açık dosyalar ile nasıl çalışır?

cevap

23

Unix dosya sistemleri, referans sayma ve dosyaları bulmak için bir iki katmanlı yapısı kullanabilirsiniz Veri Dosyası.

Dosya adı, bilgi düğümü veya dizin düğümü için inode adı verilen bir şeye başvurur. Inode, dosya içeriğinin yanı sıra dosya türü (sıradan, dizin, aygıt, vb.) Gibi bazı meta verileri de saklar. Aynı inode'u olabilir

çoklu dosya; Daha sonra hard links olarak adlandırılır. Ek olarak, bir file descriptor (fd) bir inode ile ilgilidir. Bir fd, bir dosya açıldığında bir işlemin aldığı nesne türüdür.

Bir Unix dosya sistemindeki bir dosya, yalnızca son başvuru yapıldığında kaybolur; bu nedenle, daha fazla ad (sabit bağlantı) yoksa, ya da bu adrese başvurmaktan kaçının. Yani, rm aslında bir dosyayı kaldırmaz; Bir dosya için başvurusunu kaldırır.

Bu dosya sistemi kurulumu kafa karıştırıcı gibi görünebilir ve bazen sorunlara neden olabilir (özellikle NFS ile), ancak birçok uygulama için kilitleme gerekli değildir. Birçok Unix programı, durumu geçici bir dosya açıp hemen sonra silerek avantajlarından yararlanır. Sonlandırıldıkları anda, kilitlense bile, geçici dosya kaybolur.

+0

Açık dosyayı taşıyabileceğim herhangi bir sınırlama var mı? Örneğin. sadece aynı dosya sistemi içinde? –

+0

@ivan_pozdeev, farklı dosya sistemlerinde bir dosya üzerinde bir 'mv' yapıyor aslında verileri kopyalayıp orijinal dosyayı siler, bu durumda açık dosyanın bir rm'sine benzer. – dsonck92

4

Unix'te, bir dosya adı asıl dosyanın (inode) bir bağlantısıdır. Bir dosyayı açmak aynı zamanda gerçek dosyaya bir (geçici) bağlantı oluşturur. Bir dosyaya tüm bağlantılar kaybolduğunda (rm ve close()), dosya kaldırılır.

NTFS'de, mantıken dosya adı, dosyadır. Dosya adından metainfo dosyasına dolaylı bir katman yok, aynı nesne onlar. Açarsanız, kullanımdadır ve kaldırılamaz, tıpkı unix'teki gerçek dosya (inode) kullanımdayken kaldırılamaz.

Unix: Dosya adı -> FileInfo ->

Veri

File NTFS: FileName/FileInfo ->