Proszę zdefiniować, co rozumiesz przez „fizyczny” rozmiar.
Jörg W Mittag,
Odpowiedzi:
28
ls -lpoda pozorny rozmiar pliku, czyli liczbę bajtów, które program odczytałby, gdyby odczytał plik od początku do końca. dudałby ci rozmiar pliku „na dysku”.
Domyślnie dupodaje rozmiar pliku w liczbie bloków dysku, ale -hzamiast tego można użyć jednostki czytelnej dla człowieka. Zobacz także instrukcję dudotyczącą twojego systemu.
Zauważ, że w GNU coreutil du(który jest prawdopodobnie tym, co masz w Linuksie), -bpobranie bajtów oznacza --apparent-sizeopcję. Nie tego chcesz użyć, aby uzyskać liczbę bajtów faktycznie używanych na dysku. Zamiast tego użyj --block-size=1lub -B 1.
Z GNU lsmożesz także zrobić ls -s --block-size=1na pliku. To da taki sam numer jak du -B 1dla pliku.
Przykład:
$ ls -l file
-rw-r--r-- 1 myself wheel 536870912 Apr 8 11:44 file
$ ls -lh file
-rw-r--r-- 1 myself wheel 512M Apr 8 11:44 file
$ du -h file
24K file
$ du -B 1 file
24576 file
$ ls -s --block-size=1 file
24576 file
Oznacza to, że jest to plik 512 MB, który zajmuje około 24 KB na dysku. Jest to rzadki plik (głównie zera, które w rzeczywistości nie są zapisywane na dysku, ale reprezentowane jako logiczne „dziury” w pliku). Pliki rzadkie są powszechne podczas pracy z wstępnie przydzielonymi dużymi plikami, np. Obrazami dysków dla maszyn wirtualnych lub plików wymiany itp. Tworzenie pliku rzadkiego jest szybkie, a wypełnianie go zerami jest powolne (i niepotrzebne).
Zobacz także instrukcję fallocatedotyczącą systemu Linux.
w którym przypadku ta różnica jest ważna? czy możesz podać praktyczny przykład? z góry dziękuję.
D'Arcy Nader
1
@ D'ArcyNader Zobacz zaktualizowaną odpowiedź.
Kusalananda
Popraw mnie, jeśli coś źle zrozumiem, ale wydaje się, że pierwsze zdanie jest na odwrót: stackoverflow.com/a/31437673/3701431du pokaże, ile danych można faktycznie odczytać, a jednocześnie lspokaże zakres przydzielonych sektorów dysku.
Sergiy Kolodyazhnyy
2
@SergiyKolodyazhnyy (przepraszam, że odpowiadam późno) Nie, dupokazuje ilość dysku faktycznie używanego przez plik, podczas gdy pozorny rozmiar (rozmiar logiczny) pokazany przez lsto liczbę bajtów, które program mógłby z niego odczytać. Jeśli plik jest rzadki, niektóre z odczytanych bajtów byłyby zerami, ale nadal byłyby dostarczane do programu, który je odczytuje (tylko nie z dysku).
Odpowiedzi:
ls -l
poda pozorny rozmiar pliku, czyli liczbę bajtów, które program odczytałby, gdyby odczytał plik od początku do końca.du
dałby ci rozmiar pliku „na dysku”.Domyślnie
du
podaje rozmiar pliku w liczbie bloków dysku, ale-h
zamiast tego można użyć jednostki czytelnej dla człowieka. Zobacz także instrukcjędu
dotyczącą twojego systemu.Zauważ, że w GNU coreutil
du
(który jest prawdopodobnie tym, co masz w Linuksie),-b
pobranie bajtów oznacza--apparent-size
opcję. Nie tego chcesz użyć, aby uzyskać liczbę bajtów faktycznie używanych na dysku. Zamiast tego użyj--block-size=1
lub-B 1
.Z GNU
ls
możesz także zrobićls -s --block-size=1
na pliku. To da taki sam numer jakdu -B 1
dla pliku.Przykład:
Oznacza to, że jest to plik 512 MB, który zajmuje około 24 KB na dysku. Jest to rzadki plik (głównie zera, które w rzeczywistości nie są zapisywane na dysku, ale reprezentowane jako logiczne „dziury” w pliku). Pliki rzadkie są powszechne podczas pracy z wstępnie przydzielonymi dużymi plikami, np. Obrazami dysków dla maszyn wirtualnych lub plików wymiany itp. Tworzenie pliku rzadkiego jest szybkie, a wypełnianie go zerami jest powolne (i niepotrzebne).
Zobacz także instrukcję
fallocate
dotyczącą systemu Linux.źródło
du
pokaże, ile danych można faktycznie odczytać, a jednocześniels
pokaże zakres przydzielonych sektorów dysku.du
pokazuje ilość dysku faktycznie używanego przez plik, podczas gdy pozorny rozmiar (rozmiar logiczny) pokazany przezls
to liczbę bajtów, które program mógłby z niego odczytać. Jeśli plik jest rzadki, niektóre z odczytanych bajtów byłyby zerami, ale nadal byłyby dostarczane do programu, który je odczytuje (tylko nie z dysku).Otrzymuję rozmiar pliku w bajtach takich jak ten:
źródło