„du -s.” i „du -hs.” dają różne wyniki (w OS X)

12

Różnica zi bez -hpowinna być tylko czytelnymi dla człowieka jednostkami, prawda?

Cóż, najwyraźniej nie ...

$ du -s .
74216696    .
$ du -hs .
 35G    .

A może się mylę i wyniku du -s .nie ma w KB?

Skrzypienie
źródło
3
Spróbuj użyć du --block-size=1024 -s .. Może twój BLOCK_SIZEjest ustawiony na512
Echoes_86
6
Na stronie podręcznika (OSX): „Jeśli nie ustawiono opcji BLOCKSIZE i nie podano opcji -k, liczby bloków zostaną wyświetlone w blokach 512-bajtowych”
użytkownik4556274
Co nie jest zbyt pomocne, jeśli system plików jest w rzeczywistości w blokach 4096-bajtowych.
DopeGhoti
Więc nie ma sposobu, aby rozmiar w bajtach? Myślałem, że -hpo prostu dzielę przez 1024 i dodaje kilka jednostek
Creak
2
echo "74216696*512" | bcwyjścia, 37998948352. I tak, -hkonwertuje się do postaci czytelnej dla ludzi, dzieląc w kółko przez 1024. Otrzymałem 35.3887, co jest strasznie bliskie temu, co duzgłasza. Jeśli chodzi o rozmiar w bajtach, po prostu użyj --block-size=1. W Linuksie jest na to -bopcja, ale nie znam OS Xdu
Sergiy Kolodyazhnyy,

Odpowiedzi:

23

dubez specyfikatora formatu wyjściowego pozwala na użycie dysku w blokach po 512 bajtów, a nie w kilobajtach . Zamiast tego możesz użyć opcji -kwyświetlania w kilobajtach. W systemie OS X (lub macOS, MacOS lub Macos; cokolwiek zechcesz) możesz dostosować domyślną jednostkę, ustawiając zmienną środowiskową BLOCKSIZE(dotyczy to również innych poleceń).

DopeGhoti
źródło
1
Nie wiedziałem, że ... Jaki jest sens posiadania liczby bloków? Nigdy nie widziałem, żeby jedna osoba używała bloków , mówiąc o rozmiarach na dysku ...
Creak
2
Bloki są jednostką atomową systemów plików. Każdy plik zużyje całą liczbę bloków na dysku. Blok może być tylko częściowo wypełniony rzeczywistymi danymi, ale cały blok jest przypisany do pliku. Codzienne użytkowanie większości ludzi nie przejmuje się blokami innymi niż w sensie wykorzystania procentowego w porównaniu z wolnym. Ale media niskim poziomie (na przykład fdisk, dfi du) praca w blokach, chyba że zaleci inaczej, ponieważ jest to urządzenie, w którym liczą się one wewnętrznie.
DopeGhoti
1
@Creak Właściwie ta część odpowiedzi była błędna. Jednostka nie ma wielkości bloku systemu plików. Do celów klasycznych komend uniksowych, takich jak du„blok” oznacza 512 bajtów. Zobacz rozmiar bloku pliku - różnica między stat a ls , Różnica między rozmiarem bloku a rozmiarem klastra
Gilles 'SO - przestań być zły'
3
„Każdy plik zajmie całą liczbę bloków na dysku”. Cóż, ogólnie tak - chyba że twój system plików używa pakowania ogona . Ale tak, bloki są podstawową jednostką systemu plików (chociaż rzeczywisty rozmiar bloku niekoniecznie musi być zgodny z rozmiarem używanego przez du.) :)
Wildcard
3

Problem polega na tym, że duzwraca liczbę bloków 512 bajtów.

Aby mieć rozmiar w KB, możesz użyć -kopcji wykorzystującej zamiast tego 1024-bajtowe bloki:

$ du -ks .                            
43351596    .
$ du -khs .
 41G    .
Skrzypienie
źródło