Jak uzyskać Rozmiar pliku lub katalogu w Linuksie

  • Dave McKay

    @TheGurkha

  • 19 grudnia 2019 r., 8:00 rano EDT
Fatmawati Achmad Zaenuri/

gdy używasz polecenia du, uzyskujesz zarówno rzeczywiste użycie dysku, jak i rzeczywisty rozmiar pliku lub katalogu. Wyjaśnimy, dlaczego te wartości nie są takie same.

rzeczywiste użycie dysku i rzeczywisty rozmiar

Rozmiar pliku i miejsce, które zajmuje na dysku twardym, rzadko są takie same., Miejsce na dysku jest przydzielane w blokach. Jeśli plik jest mniejszy niż blok, cały blok jest do niego przypisany, ponieważ system plików nie ma mniejszej jednostki nieruchomości do wykorzystania.

O ile Rozmiar pliku nie jest dokładną wielokrotnością bloków, przestrzeń używana na dysku twardym musi być zawsze zaokrąglona w górę do następnego całego bloku. Na przykład, jeśli plik jest większy niż dwa bloki, ale mniejszy niż trzy, przechowywanie go nadal zajmuje trzy bloki miejsca.

Reklama

w stosunku do rozmiaru pliku stosowane są dwa wymiary., Pierwszy to rzeczywisty rozmiar pliku, czyli liczba bajtów zawartości, które składają się na plik. Drugi to efektywny Rozmiar Pliku na dysku twardym. Jest to liczba bloków systemu plików niezbędnych do przechowywania tego pliku.

przykład

spójrzmy na prosty przykład., W ten sposób możemy utworzyć mały plik:

echo "1" > geek.txt

teraz użyjemy długiej listy formatu, ls, aby spojrzeć na długość pliku:

ls -l geek.txt

długość jest wartością liczbową, która następuje po

ls -l geek.txt

div id = „9c6e6dbf8e” > wpisy, czyli dwa bajty. Dlaczego są dwa bajty, skoro wysyłamy tylko jeden znak do pliku? Przyjrzyjmy się, co dzieje się w aktach.,

Reklama

użyjemy polecenia hexdump, które da nam dokładną liczbę bajtów i pozwoli nam „zobaczyć” niedrukowalne znaki jako wartości szesnastkowe. Użyjemy również opcji -C (canonical), aby wymusić wyświetlanie wartości szesnastkowych w treści wyjścia, a także ich odpowiedników alfanumerycznych:

hexdump -C geek.txt

wyjście pokazuje nam, że począwszy od offsetu 00000000 w pliku, jest bajt, który zawiera wartość szesnastkową z 31, oraz taki, który zawiera wartość szesnastkową 0a., Prawa część wyjścia przedstawia te wartości jako znaki alfanumeryczne, o ile to możliwe.

wartość szesnastkowa 31 jest używana do reprezentowania cyfry 1. Wartość szesnastkowa 0A jest używana do reprezentowania znaku linii, który nie może być wyświetlany jako znak alfanumeryczny, więc jest wyświetlany jako kropka (.) zamiast. Znak kanału linii jest dodawany przez echo . Domyślnie echo uruchamia nową linię po wyświetleniu tekstu, który ma być zapisany w oknie terminala.,

to oblicza się z wyjściemls I ZGADZA się z długością pliku wynoszącą dwa bajty.

podobne: jak używać polecenia ls do wyświetlania plików i katalogów w Linuksie

Reklama

teraz użyjemy polecenia du aby spojrzeć na rozmiar pliku:

du geek.txt

mówi, że rozmiar to cztery, ale cztery z czego?

są bloki, a następnie są bloki

gdydu raportuje rozmiary plików w blokach, rozmiar, którego używa, zależy od kilku czynników., Możesz określić rozmiar bloku, którego powinien użyć w wierszu poleceń. Jeśli nie wymusisz du, aby użyć określonego rozmiaru bloku, należy ustawić zestaw reguł, aby zdecydować, którego z nich użyć.

najpierw sprawdza następujące zmienne środowiskowe:

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • BLOCKSIZE

jeśli którakolwiek z nich istnieje, rozmiar bloku jest ustawiony idu przestaje sprawdzać. Jeśli nie są ustawione, du domyślnie rozmiar bloku wynosi 1024 bajtów., Chyba że ustawiona jest zmienna środowiskowa o nazwie POSIXLY_CORRECT. W takim przypadku du domyślnie rozmiar bloku wynosi 512 bajtów.

Reklama

Jak więc dowiedzieć się, która z nich jest używana? Możesz sprawdzić każdą zmienną środowiskową, aby ją rozwiązać, ale jest szybszy sposób. Porównajmy wyniki do rozmiaru bloku, którego używa system plików.

aby odkryć rozmiar bloku, którego używa system plików, użyjemy programu tune2fs., Następnie użyjemy opcji -l(list superblock), przekierujemy wyjście przez grep, a następnie wydrukujemy linie zawierające słowo ” Block.”

w tym przykładzie przyjrzymy się systemowi plików na pierwszej partycji pierwszego dysku twardego, sda1 I będziemy musieli użyć sudo:

sudo tune2fs -l /dev/sda1 | grep Block

rozmiar bloku systemu plików wynosi 4096 bajtów. Jeśli podzielimy to przez wynik, który otrzymaliśmy z du (cztery), wyświetli się du domyślny rozmiar bloku wynosi 1024 bajty., Wiemy teraz kilka ważnych rzeczy.

Reklama

Po pierwsze, wiemy, że najmniejsza ilość zasobów systemu plików, jaką można przeznaczyć na przechowywanie pliku, wynosi 4096 bajtów. Oznacza to, że nawet nasz mały, dwubajtowy plik zajmuje 4 KB miejsca na dysku twardym.

drugą rzeczą, o której należy pamiętać, są aplikacje dedykowane do raportowania statystyk na dysku twardym i systemie plików, takie jak du, lsI tune2fs, mogą mieć różne pojęcia, co oznacza” blok”., Aplikacjatune2fs zgłasza prawdziwe rozmiary bloków systemu plików, podczas gdy lsI du może być skonfigurowana lub zmuszona do używania innych rozmiarów bloków. Te rozmiary bloków nie mają na celu odnosić się do rozmiaru bloku systemu plików; są to po prostu „kawałki”, których polecenia używają w swoim wyjściu.

wreszcie, poza używaniem różnych rozmiarów bloków, odpowiedzi z duItune2fs mają to samo znaczenie., Wynik tune2fs wynosił jeden blok 4096 bajtów, a wynik du wynosił cztery bloki 1024 bajtów.

używając du

bez parametrów lub opcji linii poleceń,du wyświetla całkowitą ilość miejsca na dysku w bieżącym katalogu i wszystkich podkatalogach.

spójrzmy na przykład:

du
Reklama

rozmiar jest zgłaszany w domyślnym rozmiarze bloku wynoszącym 1024 bajty na blok. Całe drzewo podkatalogów jest przejechane.,

używając du w innym katalogu

Jeśli chcesz du aby zgłosić katalog inny niż bieżący, możesz przekazać ścieżkę do katalogu w wierszu poleceń:

du ~/.cach/evolution/

używając du w określonym pliku

Jeśli chcesz du aby zgłosić konkretny plik, podaj ścieżkę do tego pliku w wierszu poleceń., Możesz również przekazać wzorzec powłoki do wybranej grupy plików, na przykład *.txt:

du ~/.bash_aliases

raportowanie plików w katalogach

aby mieć du raportowanie plików w bieżącym katalogu i podkatalogach, użyj du raportowanie plików w bieżącym katalogu i podkatalogach div id=”81dcfa86a6″>(wszystkie pliki) opcja:

du -a
Reklama

dla każdego katalogu raportowany jest rozmiar KAŻDEGO pliku, a także suma dla każdego katalogu.,

ograniczenie głębokości drzewa katalogów

możesz powiedziećdu, aby wyświetlić listę drzewa katalogów do określonej głębokości. Aby to zrobić, użyj opcji -d (max depth) i podaj wartość głębokości jako parametr. Zauważ, że wszystkie podkatalogi są skanowane i używane do obliczania zgłoszonych wartości całkowitych, ale nie wszystkie są wymienione. Aby ustawić maksymalną głębokość katalogu na jednym poziomie, użyj polecenia:

du -d 1

wyjście wyświetla całkowitą wielkość tego podkatalogu w bieżącym katalogu, a także podaje całkowitą dla każdego z nich.,

aby wyświetlić listę katalogów o jeden poziom głębiej, użyj polecenia:

du -d 2

Ustawianie rozmiaru bloku

Możesz użyć opcjiblock aby ustawić rozmiar bloku dladu dla bieżącej operacji.,d w najbardziej odpowiednim rozmiarze bloku w zależności od miejsca na dysku używanego przez katalogi i pliki, użyj opcji -h (czytelne dla człowieka):

du -h

aby zobaczyć pozorny Rozmiar Pliku, a nie ilość miejsca na dysku twardym używanego do przechowywania pliku, użyj --apparent-size opcja:

du --apparent-size
Reklama

możesz połączyć to z opcją -a (wszystkie), aby zobaczyć pozorny Rozmiar KAŻDEGO pliku:

du --apparent-size -a

każdy plik jest wymieniony wraz z jego pozornym rozmiarem.,

wyświetlanie tylko Sumy

Jeśli chceszdu aby zgłosić tylko sumę dla katalogu, użyj opcji-s (summarize)., Możesz również połączyć to z innymi opcjami, takimi jak -h (czytelna dla człowieka) opcja:

du -h -s

tutaj użyjemy go z opcją --apparent-size:

du --apparent-size -s

wyświetlanie czasu modyfikacji

aby zobaczyć czas i datę utworzenia lub ostatniej modyfikacji, użyj opcji --time:

du --time -d 2

dziwne wyniki?,

Jeśli widzisz dziwne wyniki zdu, zwłaszcza gdy porównujesz rozmiary do wyjścia z innych poleceń, zwykle wynika to z różnych rozmiarów bloków, dla których można ustawić różne polecenia lub tych, dla których są domyślne. Może to być również spowodowane różnicami między rzeczywistymi rozmiarami plików i miejscem na dysku wymaganym do ich przechowywania.

Jeśli chcesz dopasować wyjście innych poleceń, eksperymentuj z opcją--blockwdu.,

Dave McKay
Dave McKay po raz pierwszy użył komputerów, gdy perforowana taśma papierowa była w modzie i od tego czasu programuje. Po ponad 30 latach pracy w branży IT, obecnie pracuje jako dziennikarz technologiczny. W trakcie swojej kariery pracował jako niezależny programista, menedżer międzynarodowego zespołu programistów, kierownik projektów usług IT, a ostatnio jako Inspektor Ochrony Danych. Dave jest ewangelistą Linuksa i orędownikiem open source.Czytaj całość „

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *