Bir dizindeki dosyaların “dizin sırası” nedir (`ls -U` tarafından kullanılır)?


19

Ls için man sayfasına göre ls -U:

sıralamayın; girişleri dizin sırasına göre listeler.

"Dizin sırası" ne anlama gelir ve nasıl belirlenir?

Aşağıdaki sınama (bir ext3 dosya sisteminde yürütülür), dosyaların oluşturulduğu sıra olmadığını gösterir:

root@sv1010vm0007:/tmp# mkdir test
root@sv1010vm0007:/tmp# touch test/2
root@sv1010vm0007:/tmp# touch test/1
root@sv1010vm0007:/tmp# touch test/3
root@sv1010vm0007:/tmp# ls -U test
2  3  1

Yanıtlar:


14

Dosya sistemine bağlıdır. Bazı dosya sistemlerinde (aralarında ext3), bir dizin aslında iyi bilinen bir biçime sahip bir dosyadır ve izinlerinde veya modunda ayarlanmış 'd' bitidir. Bu durumda, dosya adlarının oluşturulduğu ve silindiği tarihin önemi olabilir. Çekirdek, dizin dosyasındaki yeni dosyanın adını tutacak kadar boş alana sahip ilk girdiyi dolduracaktır. Daha fazla ayrıntı için "Fiziksel Açıklama" başlıklı bölüme http://e2fsprogs.sourceforge.net/ext2intro.html bakın .

Diğer bazı dosya sistemleri için, Reiserfs aralarında, bir dizin aslında bir B + ağacındaki dosya sisteminde görünmeyen bazı girdilerdir , bu nedenle lsReiserfs dosya sistemindeki bir dizinin düzlüğü sözcüksel sıradadır.


@Bruce: Peki, bu "dizin" dosyasının içeriği tam olarak nedir?
Faheem Mitha

Geleneksel olarak, bir RHEL kutusunda ve bir Slackware 11.0 kutusunda /usr/include/bits/dirent.h dosyasında tanımlı bulduğum yapı direncine çok benzer. Bu makinelerin ikisi de doğrudan bir dizin açmayı () reddetmektedir. Bir dizini normal bir dosyaya dönüştürmek için "cat.> Dot.as.file" gibi şeyler yaptığımı biliyorum, en son yaptığım zaman Solaris 8 idi. Temel olarak, yapı yönergesi bir düğüm (sayı), bir kayıt uzunluğu, bir ad uzunluğu ve hatırladığım gibi ASCII-Nul sonlandırılabilen veya sonlandırılabilen bir dize içerir.
Bruce Ediger

@Bruce: Tamam. Ve bu C yapısı içerdiği dosyalar ve alt dizinler hakkındaki tüm bilgileri bu alanlara almayı başarıyor mu?
Faheem Mitha

Ext2 veya BSD FFS gibi dosya sistemlerindeki veya orijinal Unix dosya sistemindeki bir dizin, inode numaralarının ve karşılık gelen dosya adlarının bir listesini içeriyordu. Bağımsız değişkenler olmadan "ls" çağırmak sadece size bir dosya adları listesi kazandı. Eğer "ls -l" yaptıysanız, "ls" dosya adında bir stat (2) sistem çağrısı yaparak her dosya adını arar ve struct stat'den izinler, boyut, "dosya türü" vb. Yani, hayır, bir dizin dosyası tüm bilgilere sahip değildir, sadece bir isim listesi içerir.
Bruce Ediger

2
ext2.sourceforge.net/2005-ols/paper-html/node3.html , dir_index özelliğinin dosya adını ve dosya sistemine özgü bir sırrı içerdiğini açıklar. dump2efs, özellik etkinleştirilmişse Dosya Sistemi özellikleri satırına dir_index'i ekler.
Martin Dorey

3

Gerçekten de, beklenecek belirli bir düzen yoktur. Girişleri istediği gibi sipariş etmek OS ve dosya sistemi uygulamasına bağlıdır. Bu seçeneğin bir amacı, çok büyük dizinlerle önemli bir faktör olabilecek daha hızlı listelemeyi elde etmektir.


Çekirdek ve dosya sistemi sürücülerinde tam olarak veriler diske yazıldığında etkileyen zamanlama / önbellek algoritmaları vardır. Bu performansı artırmak için yapılır. Bu optimizasyon sayesinde yazma işlemlerinin ne zaman gerçekleşeceğini tam olarak söyleyemezsiniz. Ayrıca, dosya sistemlerindeki eski inode'lar yeniden kullanılabilir, böylece eski dosyaların olduğu dizin yuvalarında yeni dosyalar görünebilir. Bu nedenle, oluşturma sırası "dizin sırası" gerekli değildir.
LawrenceC

@ultrasawblade: Bunu neden tek başına cevap yerine kendi cevabım için yorum olarak yazdığınızdan emin değilim.
jlliagre

@ultrasawblade: Kesinlikle söylemek gerekirse, "eski inodes [reused] reused" eski dizin yuvalarının yeniden kullanımı ile ilgisi yoktur. Bu, eski dizin girişlerinin bağlantısı kaldırıldığında gerçekleşebilir; hepsi sabit bağlantılar ise, bu inode'ların yeniden konumlandırılmasına neden olmaz.
G-Man, 'Monica'yı Yeniden Başlat' diyor

2

Girişlerin dahili olarak dosya sisteminde depolanma sırasıdır. Bu, dosya sisteminden dosya sistemine değişir. Örneğin, girişler Kırmızı-Siyah Ağaç gibi bir çeşit dengeli ağaçta saklanabilir . Az sayıda girişi olan dizinler için veya ekleme ve kaldırma işlemleriyle verimli bir şekilde ilgilenmek için başka optimizasyonlar olabilir.


-1

Dizin, gerçek dosyaların meta verilerini listeleyen başka bir dosyadır. "ls -U" sadece girişleri dizin dosyasında aynı sırada listeler.

Sipariş, işletim sistemi ve dosya sistemi uygulaması tarafından belirlenir.

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.