Po prostu wpadłem na coś i nie mogłem wymyślić właściwego wyjaśnienia. Jeśli utworzę pusty plik * .txt na moim komputerze, a następnie spojrzę na jego rozmiar, wyświetli się 0. Ale jak to możliwe? To znaczy, nawet jeśli sam plik jest pusty, nadal musi mieć jakiś rozmiar, tylko po to, aby zapisać własną nazwę. Jak można to wyjaśnić? (Nie dotyczy konkretnego systemu operacyjnego)
filesystems
Eugene S
źródło
źródło
Odpowiedzi:
Jest to możliwe, ponieważ naprawdę nie ma pliku. Jest tylko wpis w katalogu z nazwą i właścicielem. Wpis katalogu jest logicznie odmienny od pliku. Na przykład ten sam plik może mieć więcej niż jedną nazwę w więcej niż jednym katalogu.
Niestety, termin „plik” nie zawsze oznacza dokładnie to samo. Ale logika rozmiaru pliku pochodzi z modelu, w którym pozycja katalogu „dołącza” plik do katalogu, a nazwy plików i powiązane metadane są przechowywane w katalogu.
źródło
ls -ld <directory>
będą działać.Semantyczne znaczenie „rozmiaru pliku” różni się od tego, którego używasz.
Istnieje wiele rozmiarów plików, które mają znaczenie. Najpopularniejszym i tym, który tutaj widzisz, jest „liczba bajtów w pliku”. Jeśli plik jest pustym plikiem tekstowym, może rzeczywiście zawierać 0 bajtów. Ta liczba jest ważna dla programistów, ponieważ często musimy otworzyć plik, „odczytać wszystkie dane” i zamknąć go. Musimy wiedzieć, ile bajtów danych będzie w pliku, abyśmy mogli zaplanować z wyprzedzeniem.
Inne znaczenie wynika ze sposobu przechowywania danych przez większość systemów plików. Większość systemów plików zapisuje dane w blokach. Na przykład system plików może przechowywać dane w blokach 64 kB, co oznacza, że nigdy nie przydzieli niczego, co nie jest równą wielokrotnością 64 kB. Brzmi to nieefektywnie, ale może sprawić, że księgowość stanie się dużo prostsza, a często prostsza oznacza szybszą.
Trzecim znaczeniem, które szarpiesz, jest rzeczywista liczba bitów wymaganych na dysku twardym, aby opisać obecność pliku. Obejmuje to informacje, które zazwyczaj są przechowywane oddzielnie od pliku. Na przykład w Linuksie pojęcie „nazwa_pliku” jest przechowywane w i-węzle dla katalogu zawierającego plik (edycja: z komentarzy, technicznie jest to przechowywane w danych katalogu. Kiedy to napisałem, myślałem o małym -directory case Dane mniejsze niż 156 bajtów mogą być przechowywane bezpośrednio w i-węzle). Nie jest to powszechnie używane znaczenie, ponieważ niezwykle trudno jest określić bez znajomości niezwykle głębokich wewnętrznych funkcji systemu plików (czy uwzględniłeś miejsce potrzebne do przechowywania wszystkich uprawnień do pliku?). Jeśli jednak masz dysk twardy o pojemności 1 000 000 bajtów,
źródło
Nazwa pliku jest przechowywana w innym miejscu.
Twój dysk będzie miał „system plików”, po prostu metodę wyboru sposobu, w jaki nazwy plików i pliki są reprezentowane i interpretowane na dysku fizycznym.
Na większości dysków z systemem Windows używasz systemu plików o nazwie „NTFS” (New Technology File System), który przechowuje informacje o plikach w głównej tabeli plików (MFT) oddzielnie od zawartości pliku, patrz artykuł w Wikipedii na temat głównej tabeli plików .
Sam plik będzie zatem miał długość 0 bajtów, ale jego wpis w MFT nadal będzie zajmował trochę miejsca.
źródło
To dość interesujące pytanie ontologiczne ...
Sam plik jest zawartością pliku. Jeśli plik nie zawiera treści, ma rozmiar zero. Nazwa pliku jest tak samo częścią pliku, jak twoja własna nazwa jest fizycznie częścią ciebie (tzn. Nie jest).
Tak jak twoje imię istnieje jako idea w głowach ludzi (i twoja własna), która odsyła / wskazuje na ciebie, nazwa pliku istnieje w drzewie katalogów systemu plików i odnosi się do / punktów do pliku.
źródło
(Trochę za późno na odpowiedź ...)
W jaki sposób plik może mieć rozmiar zero jest nieco bardziej skomplikowany niż w przypadku powyższych odpowiedzi. Pytanie jest oznaczone jako Win7, ale patrząc na inne „prostsze” systemy plików, takie jak FAT lub NTFS , może być przydatne, ponieważ koncepcje są podobne.
Dysk nie „wie”, co to jest plik i jaki jest katalog; to wszystkie dane w małych blokach. System operacyjny rozróżnia znaczenie bloków danych. Pierwsze kilka specjalnych, ale pozostałe bloki zawierają informacje o danych (np. Nazwa pliku, długość pliku, pierwszy blok danych zawierający dane) lub same dane.
Katalog jest specjalnym „plikiem”, którego „dane” rozumiane przez system operacyjny to blok informacyjny zawierający informacje o plikach, a nie o zawartości plików. Dobrą analogią jest fizyczna biblioteka i katalog kart. Pomyśl o blokach informacyjnych jako katalogu kart i półkach jako blokach danych (katalog kart również ma strukturę półkową).
Kiedy „tworzysz” plik (powiedzmy z
touch
poleceniem UNIX ), system operacyjny najpierw tworzy wpis w bloku informacyjnym (katalogu), z następującym:Tylko wtedy, gdy istnieją jakieś dane do „zapisu”, próbuje on znaleźć pusty blok danych do przechowywania danych. Ale bloki danych są w stałych rozmiarach (powiedzmy 32K), które są wygodne dla dysku i systemu operacyjnego do odczytu. Jeśli piszesz tylko „Hello”, większość bloku jest „pusta” (właściwie nie może być zerami, ale śmieciami z tego, co było wcześniej), więc tabela również aktualizuje rozmiar do długości (powiedzmy 5 znaków + Koniec Plik), więc nie dostaniesz złych rzeczy.
Po zaktualizowaniu rozmiaru pliku do rozmiaru bloku system operacyjny zapisuje dane w nowym bloku i aktualizuje blok danych, aby powiedzieć, że plik jest kontynuowany w następnym bloku PO pierwszej (i tak dalej), a długość jest aktualizowana. nowa długość (szczegóły różnią się).
W rezultacie otrzymujesz zbiór bloków danych informacyjnych (katalogów lub list) z informacjami o łańcuchach bloków danych (zawartość pliku).
Logicznie wyjaśnia to również, dlaczego plik przesuwa się na tym samym systemie plików szybko miga, podczas gdy kopia zajmuje dużo czasu. System operacyjny musi jedynie edytować 2 bloki katalogów, aby usunąć wpis z jednego katalogu (bloku danych informacji) i dodać go do innego. Usuń plik: po prostu usuń wpis w bloku katalogu, uwalniając bloki danych pliku do ponownego przydzielenia.
ps: Tylko dlatego, że katalog kart ma wpis do książki, nie oznacza, że jest na półce (być może sprawdzony lub zagubiony); rozmiar pliku 0.
pps: źle umieszczona książka w bibliotece oznacza bibliotekę wyszukiwania lub w kategoriach komputerowych: chkdsk lub dysk naprawczy!
Lepsze zrozumienie można uzyskać, czytając o i-węzłach systemu UNIX lub doceniając, w jaki sposób systemy kontroli wersji (ClearCase, TFS, Git itp.) Zarządzają nie tylko plikami i katalogami, ale także wersjami plików, a nawet wersjami katalogów. W większości przypadków wszystko jest przechowywane w bazie danych i prezentowane użytkownikowi jako klasyczna struktura katalogów i plików!
źródło
Mamy tutaj kilka doskonałych odpowiedzi - dodam tylko wersję obrazu (tysiąc słów i tak dalej).
Tak wygląda jeden z moich dysków twardych w formacie NTFS, jeśli wizualizujesz go za pomocą narzędzia do defragmentacji dysku. MFT (Master File Table) ma kolor fioletowy:
Ten mały fioletowy kwadrat opisuje listę plików obecnych w moim HD. W przybliżeniu jest to, dla dysku NTFS, co spis treści jest dla książki; zamiast stron wskazuje ich fizyczną lokalizację na pozostałej części dysku 1 .
Plik o rozmiarze zero bajtów można wizualizować jako wpis spisu treści, który nie wskazuje żadnej strony:
Wpis znajduje się na liście - ale ponieważ nie wskazano żadnej strony, możemy założyć, że treść nie istnieje.
1 - Z pewnością jest to trochę bardziej skomplikowane; ale punkty takie jak mapy sektorów, lustrzane MFT itp. są poza zakresem tego pytania.
źródło
Systemy plików przechowują wiele informacji o pliku, takich jak nazwa pliku, rozmiar pliku, czas utworzenia, czas dostępu, czas modyfikacji, utworzony użytkownik, uprawnienia użytkownika i grupy, fragmenty, wskaźnik do klastrów przechowujących plik, twarde / miękkie łącza, atrybuty ... Nazywane są metadanymi plików . Dlaczego liczysz te metadane na rozmiar pliku, gdy użytkownicy nie muszą o nie dbać i o nich nie wiedzą? Bardzo zależy im na zawartości plików
Ponadto każdy system plików przechowuje różne typy metadanych, które zajmują różną ilość miejsca na dysku. Na przykład uprawnienia POSIX bardzo różnią się od uprawnień NTFS,
inode
aw systemie POSIX są też liczby, które nie istnieją w systemie Windows. Nawet systemy plików POSIX bardzo się różnią, jak ext3 z 32-bitowym adresem bloku, ext4 z 48-bitowym, Btrfs z 64-bitowym i ZFS z 128-bitowym adresem. Jak więc policzyć te metadane do rozmiaru pliku?Weźmy inny przykład ze 100-bajtowym plikiem, którego metadane zużywają 56 bajtów w bieżącym systemie plików. Kopiujemy plik do innego systemu plików, a teraz zajmuje on 128 bajtów metadanych. Jednak zawartość pliku jest dokładnie taka sama , liczba bajtów w plikach również jest taka sama. Zatem wyświetlanie rozmiaru pliku jako 156 bajtów w systemie, ale 228 bajtów w innym jest bardzo mylące i sprzeczne z intuicją .
źródło
Rozmiar pliku
0
jest podobny do powiedzenia: Mam na nim papier ze5
słowami. I na innym papierze ma0
na nim słowa. Więc0
jest całkowicie możliwe.Metadane pliku (data utworzenia, data ostatniej modyfikacji, właściciel pliku, uprawnienia) są przechowywane w innym miejscu i nie są uwzględniane jako część rozmiaru pliku.
źródło
Zrozum to w prosty sposób ... kiedy tworzysz plik .. generowany jest wpis katalogu, który działa jako wskaźnik lokalizacji pamięci pliku identyfikowanego przez podaną nazwę pliku. Rozmiar katalogu wzrasta wraz z tworzeniem coraz większej liczby wskaźników lub mówieniem plików ... podczas gdy rozmiar pliku zwiększa się tylko wtedy, gdy umieścisz dane SSome w wskazanym miejscu, tj. Wewnątrz samego pliku. Do tego czasu rozmiar będzie wynosił zero. :)
źródło
Tak to działa:
Po utworzeniu dowolnego pliku na woluminie tworzy rekord pliku w pliku mata NTFS, np. $ MFT (główna tabela plików). Ponieważ w MFT znajduje się FRS (segment rekordów plików), zobaczysz rekord. Każdy rekord pliku ma domyślnie rozmiar 1 KB w przypadku NTFS FileSystem. Ale ta przestrzeń jest zastrzegana tylko wtedy, gdy przechowujesz jakieś informacje wewnątrz pliku. Nawet jeśli napiszesz tylko jedną literę „a”, biorąc pod uwagę, że jest to plik tekstowy, otrzymasz 1 KB miejsca, ponieważ jest to domyślny rozmiar FRS. Litera „a” przechodzi do domyślnego i nienazwanego strumienia danych tego FRS, $ Data, który jest atrybutem, w którym przechodzą wszystkie dane, jeśli nie masz ADS (alternatywny strumień danych).
Daj mi znać, jeśli masz jakieś pytania.
źródło