Jaka jest „kolejność katalogów” plików w katalogu (używana przez `ls -U`)?

19

Według strony podręcznika dla ls ls -Uoznacza:

nie sortuj; wyświetlać wpisy w kolejności katalogowej.

Co oznacza „porządek katalogów” i jak się to określa?

Poniższy test (przeprowadzony w systemie plików ext3) pokazuje, że nie jest to kolejność, w jakiej pliki zostały utworzone:

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
Stefan
źródło

Odpowiedzi:

14

To zależy od systemu plików. W przypadku niektórych systemów plików (w tym między innymi ext3) katalog jest w rzeczywistości plikiem o dobrze znanym formacie, a bit „d” jest ustawiony w uprawnieniach lub trybie. W takim przypadku historia, jaką długość nazw plików utworzonych i usuniętych może mieć znaczenie. Jądro wypełni pierwszą pozycję w pliku katalogu, która ma wystarczająco dużo miejsca, aby pomieścić nazwę nowego pliku. Więcej informacji można znaleźć na stronie http://e2fsprogs.sourceforge.net/ext2intro.html w sekcji „Opis fizyczny”.

W przypadku niektórych innych systemów plików, w tym Reiserfs, katalog to tak naprawdę tylko niektóre wpisy w drzewie B +, które nie są widoczne w systemie plików, więc zwykły lskatalog w systemie plików Reiserfs ma porządek leksykalny.

Bruce Ediger
źródło
@Bruce: Więc jaka dokładnie jest zawartość tego pliku „katalogu”?
Faheem Mitha
Tradycyjnie coś bardzo podobnego do struct dirent, które znalazłem zdefiniowane w /usr/include/bits/dirent.h na pudełku RHEL i na pudełku Slackware 11.0. Oba komputery odmawiają otwarcia () katalogu bezpośrednio. Wiem, że robiłem takie rzeczy jak „cat.> Dot.as.file”, aby przekonwertować katalog na zwykły plik, myślę, że ostatnim razem, gdy to zrobiłem, był Solaris 8. Zasadniczo struct dirent zawiera i-węzeł (liczbę), długość rekordu, długość nazwy i ciąg znaków, które, jak pamiętam, mogą, ale nie muszą być zakończone ASCII-Nul.
Bruce Ediger
@Bruce: Ok. A ta struktura C zdoła uzyskać wszystkie informacje o plikach i podkatalogach w tych polach?
Faheem Mitha
Katalog w systemach plików, takich jak ext2, BSD FFS lub oryginalny system plików Unix, zawierał tylko listę numerów i-węzłów i odpowiadających im nazw plików. Wywołanie „ls” bez argumentów właśnie dało ci listę nazw plików. Gdybyś zrobił „ls -l”, „ls” sam sprawdziłby każdą nazwę pliku, wykonując wywołanie systemowe stat (2) dla nazwy pliku, i ze struktury struct, uzyskał uprawnienia, rozmiar, „typ pliku” itp Tak więc, nie, plik katalogu nie zawiera wszystkich informacji, tylko listę nazw.
Bruce Ediger,
2
ext2.sourceforge.net/2005-ols/paper-html/node3.html wyjaśnia, że ​​funkcja dir_index haszy nazwę pliku i klucz tajny dla systemu plików. dump2efs zawiera dir_index w linii funkcji systemu plików, jeśli funkcja jest włączona.
Martin Dorey
3

Rzeczywiście nie ma konkretnego zamówienia. To do systemu operacyjnego i implementacji systemu plików należy porządkowanie wpisów w dowolny sposób. Jednym z celów tej opcji jest uzyskanie możliwie szybszej listy, co może być znaczącym czynnikiem w przypadku bardzo dużych katalogów.

jlliagre
źródło
Algorytmy planowania / buforowania w jądrze i sterownikach systemu plików mają wpływ na to, kiedy dokładnie dane są zapisywane na dysku. Ma to na celu zwiększenie wydajności. Z powodu tej optymalizacji nie można dokładnie powiedzieć, kiedy nastąpi zapis. Ponadto, stare i-węzły w systemach plików mogą być ponownie użyte, aby nowe pliki mogły pojawiać się w szczelinach katalogów, w których znajdowały się stare pliki. Zatem kolejność tworzenia nie jest konieczna „kolejność katalogów”.
LawrenceC
@ultrasawblade: Nie jestem pewien, dlaczego napisałeś to jako komentarz do mojej własnej odpowiedzi zamiast odpowiedzi samej lub w ogóle.
jlliagre
@ultrasawblade: Ściśle mówiąc, „stare i-węzły [są ponownie wykorzystywane”) nie ma nic wspólnego z ponownym użyciem starych gniazd katalogów. Może się to zdarzyć, gdy stare wpisy katalogu zostaną odłączone; jeśli wszystkie są linkami twardymi, nie musi to powodować zwolnienia węzłów.
G-Man mówi „Reinstate Monica”
2

Kolejność, w której wpisy są przechowywane wewnętrznie w systemie plików. Będzie to różnić się w zależności od systemu plików. Na przykład, wpisy mogą być przechowywane w jakimś zrównoważonym drzewie, takim jak drzewo czerwono-czarne . Mogą istnieć dalsze optymalizacje katalogów z niewielką liczbą pozycji lub efektywne radzenie sobie z dodatkami i usunięciami.

KeithB
źródło
-1

Katalog to tylko kolejny plik, który zawiera metadane rzeczywistych plików. „ls -U” po prostu wyświetla wpisy w tej samej kolejności w pliku katalogu.

Kolejność zależy od systemu operacyjnego i implementacji systemu plików.

rajaganesh87
źródło