- Dave McKay
@TheGurkha
- 19 grudnia 2019 r., 8:00 rano EDT
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.
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.,
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
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.
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.
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
, ls
I tune2fs
, mogą mieć różne pojęcia, co oznacza” blok”., Aplikacjatune2fs
zgłasza prawdziwe rozmiary bloków systemu plików, podczas gdy ls
I 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 du
Itune2fs
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
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
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
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ą--block
wdu
.,
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ść „