Jak uzyskać rozmiar pliku lub katalogu w systemie Linux

Wykorzystując polecenie du w systemie Linux, można uzyskać zarówno rzeczywiste wykorzystanie przestrzeni dyskowej, jak i faktyczny rozmiar pliku lub katalogu. W tym artykule wyjaśnimy, dlaczego te dwa parametry mogą się różnić.

Rzeczywiste wykorzystanie przestrzeni dyskowej a rozmiar pliku

Rozmiar pliku oraz przestrzeń, jaką on zajmuje na dysku twardym, rzadko są tożsame. Przestrzeń na dysku jest przydzielana w blokach. W sytuacji, gdy plik jest mniejszy niż jeden blok, to mimo to cały blok jest mu przypisany, ponieważ system plików nie dysponuje mniejszymi jednostkami alokacji.

W przypadku gdy rozmiar pliku nie jest wielokrotnością rozmiaru bloku, przestrzeń, którą zajmuje na dysku, jest zawsze zaokrąglana do najbliższego większego bloku. Na przykład, jeśli plik ma rozmiar większy niż dwa bloki, ale mniejszy niż trzy, to jego przechowywanie zajmie nadal trzy bloki.

W kontekście rozmiaru pliku wyróżniamy dwa kluczowe wskaźniki. Pierwszym z nich jest rzeczywisty rozmiar pliku, który odnosi się do liczby bajtów, które tworzą jego zawartość. Drugim wskaźnikiem jest efektywny rozmiar pliku na dysku, określający liczbę bloków systemu plików potrzebnych do jego przechowywania.

Przykład

Rozważmy prosty przykład. Przekierujemy pojedynczy znak do pliku w celu utworzenia niewielkiego pliku:

echo "1" > geek.txt

Następnie skorzystamy z polecenia ls w trybie długim, aby sprawdzić rozmiar pliku:

ls -l geek.txt

Wynik to wartość numeryczna, która pojawia się po danych użytkownika, wskazująca, że plik zajmuje dwa bajty. Dlaczego zatem widzimy, że zajmuje on dwa bajty, skoro zapisaliśmy tylko jeden znak? Przyjrzyjmy się dokładniej zawartości pliku.

Użyjemy polecenia hexdump, które pozwoli nam dokładnie określić liczbę bajtów oraz umożliwi „zobaczenie” niedrukowalnych znaków w postaci wartości szesnastkowych. Dodatkowo wykorzystamy opcję -C (kanoniczna), aby wymusić wyświetlanie wartości szesnastkowych w wyniku.