Moje pytanie brzmi: w jaki sposób wdrażane są katalogi? Wierzę w strukturę danych taką jak zmienna, np. Tabela, tablica lub podobne. Ponieważ UNIX jest Open Source, mogę sprawdzić w źródle, co robi program, gdy utworzył nowy katalog. Czy możesz mi powiedzieć, gdzie szukać lub rozwinąć temat? Czy katalog „jest” plikiem, który mógłbym zrozumieć i czy katalog jest rzeczywiście plikiem? Nie jestem pewien, czy to prawda, że pliki są przechowywane „w” plikach, ale nadal można powiedzieć słowo plik o prawie wszystkim i nie jestem pewien, co absolutnie nie jest plikiem, ponieważ można nazwać nawet zmienną plik. Na przykład link z pewnością nie jest plikiem, a link jest jak katalog, ale to narusza to, że katalog jest plikiem?
filesystems
files
directory
architecture
Niklas
źródło
źródło
Odpowiedzi:
Wewnętrzna struktura katalogów zależy od używanego systemu plików. Jeśli chcesz dokładnie wiedzieć, co się dzieje, spójrz na implementacje systemu plików.
Zasadniczo w większości systemów plików katalog jest tablicą asocjacyjną między nazwami plików (klucze) a numerami i-węzłów (wartości). Coś takiego :¹:
Ta lista jest zakodowana w mniej lub bardziej wydajny sposób w łańcuchu (zwykle) bloków 4KB. Zauważ, że zawartość zwykłych plików jest przechowywana podobnie. W przypadku katalogów nie ma sensu wiedzieć, jaki rozmiar jest rzeczywiście używany w tych blokach. Dlatego rozmiary katalogów zgłaszane przez
du
są wielokrotnościami 4KB.I-węzły służą do wiązania bloków ze sobą, tworząc jeden byt, mianowicie „plik” w sensie ogólnym. Są one identyfikowane przez numer, który jest jakimś adresem, a każdy z nich jest zwykle przechowywany jako pojedynczy, specjalny blok.
Zarządzanie tym wszystkim odbywa się w trybie jądra. Oprogramowanie prosi tylko o utworzenie katalogu z funkcją o nazwie
int mkdir(const char *pathname, mode_t mode);
prowadzącej do wywołania systemowego, a cała reszta odbywa się za kulisami.Informacje o strukturze linków:
Twardy link nie jest plikiem, to po prostu nowy wpis do katalogu (tj. Skojarzenie nazwa - numer i-węzła ) odnoszący się do istniejącej jednostki i-węzła². Oznacza to, że do tego samego i-węzła można uzyskać dostęp z różnych nazw ścieżek. W szczególności, ponieważ metadaty (uprawnienia, własność, znaczniki czasu…) są przechowywane w obrębie i-węzła, są one unikalne i niezależne od nazwy ścieżki wybranej do uzyskania dostępu do pliku.
Dowiązanie symboliczne to plik, który różni się od celu. Oznacza to, że ma swój własny i-węzeł. Kiedyś był traktowany jak zwykły plik: ścieżka docelowa była przechowywana w bloku danych. Ale teraz, ze względu na wydajność w najnowszych systemach plików ext , ścieżki krótsze niż 60 bajtów są przechowywane w samym i-węzle (za pomocą pól, które normalnie byłyby używane do przechowywania wskaźników do bloków danych).
-
1. uzyskano to przy użyciu
ls -ai1 testdir
.2. którego typ musi być obecnie inny niż „katalog”.
źródło
Aby rozwinąć post od Stéphane Gimeneza, utworzenie nowego katalogu to proces tworzenia nowego i-węzła o wartości st_mode S_IFDIR (z trybem uprawnień), tworząc dwa wpisy w pierwszym bloku danych nowego i-węzła za pomocą linku ( 2) wywołanie systemowe: „.” który wskazuje na ten nowy i-węzeł i „..”, który wskazuje na katalog nadrzędny, a następnie tworzy pozycję w katalogu nadrzędnym z i-węzłem i nazwą nowego katalogu - pierwsza i ostatnia część są wykonywane przez wywołanie systemowe mknod ( 2). Poza tym obecnie tylko root może używać mknod (2) do takich zadań, o których mówimy.
Na przykład
mkdir("/home/larry.user/xyzzy", 0666)
jest zasadniczo następujący (był to kod C z dni SysV [1]):Było to zbyt podatne na błędy (i jeden z głównych powodów fsck), dlatego utworzono wywołanie systemowe mkdir (2), aby móc to zrobić za Ciebie.
Zauważ, że za pomocą mknod (2) można utworzyć obiekt amy systemu plików: zwykły plik, katalog, plik urządzenia, dowiązanie symboliczne itp. Tak więc, aby odpowiedzieć na jedno z pytań OP, tak, katalog jest plikiem, co oznacza powiedzenie „it to obiekt reprezentowany przez i-węzeł, rezydujący w systemie plików, który zachowuje się z interfejsem we / wy ".
źródło
touch
który tworzy pusty plik i zobaczyć, co robi.jeśli chcesz uzyskać więcej informacji na temat systemów plików Unix / Linux, polecam 2 książki Zrozumienie jądra systemu Linux i rozwoju jądra systemu Linux . To są najlepsze książki do zrozumienia jądra Linuksa.
W systemach uniksowych „Common File Model” każdy katalog jest traktowany jako plik zawierający listę plików i katalogów.
W VFS (Virtual File Systems) katalogi są reprezentowane w strukturze o nazwie
dentry
. Jestdentry
to struktura C z nazwą łańcucha ( d_name ), wskaźnikiem do i-węzła ( d_inode ) i wskaźnikiem do protezy macierzystej ( d_parent ). I-węzeł to struktura do obsługi informacji o pliku w systemie plików. Na przykład, jeśli masz katalog/tmp/test/foo
, VFS utworzy obiekt dentry dla każdego komponentu w nazwie ścieżki. SO utworzy zatem obiekt dentystyczny/
, drugi obiekt dentystyczny dotest
wpisania katalogu głównego i trzeci obiekt dentystyczny dofoo
wpisu katalogu testowego.źródło
Możesz zacząć od przeczytania http://www.freebsd.org/doc/en/books/design-44bsd/book.html#OVERVIEW-FILESYSTEM . Aby uzyskać więcej informacji, skorzystaj z doskonałej klasycznej książki „Projektowanie i wdrażanie systemu operacyjnego 4.4 BSD”.
źródło
locate
działa i jak to się wiąże z aktualizacją programu do zlokalizowania poprzez uruchomienieupdatedb
(spec używam PC-BSD, DragonflyBSD i Ubuntu Natty podczas uruchamiania z Live CD i testowania różnych instalacji i interfejsy)