Nie mogę zrozumieć, dlaczego otrzymuję następujące wyniki:
ls -l
mówi mi, że rozmiar danego pliku (HISTORIA) to „581944”:
$ ls -l HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 581944 Feb 22 10:59 HISTORY
ls -s
mówi, że jest to „572”:
$ ls -s HISTORY
572 HISTORY
Oczywiście muszę zastosować wartości w porównywalnej skali. Najpierw potwierdzam, że użycie --block-size 1
in ls -l
daje taki sam wynik jak poprzednio:
$ ls -l --block-size 1 HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 581944 Feb 22 10:59 HISTORY
Następnie robię to samo, aby ls -s
uzyskać wartość w tej samej skali:
$ ls -s --block-size 1 HISTORY
585728 HISTORY
Różne wyniki! 581944 585728 .
Próbowałem wygenerować porównywalne wartości na odwrót, używając -k
, ale otrzymuję:
$ ls -lk HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 569 Feb 22 10:59 HISTORY
$ ls -sk HISTORY
572 HISTORY
Ponownie różne wyniki, 569 ≠ 572 .
Próbowałem podać --si, aby upewnić się, że obie opcje używają tej samej skali, ale bezskutecznie:
$ ls -lk --si HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 582k Feb 22 10:59 HISTORY
$ ls -sk --si HISTORY
586k HISTORY
... znowu, różne wartości: 582 tys . ≠ 586 tys .
Próbowałem przeszukać sieć, ale jedyne, co wydawało mi się istotne, to :
Niektóre pliki mają „dziury”, więc użycie wymienione przez
ls -s
(...) jest mniejsze niż rozmiar pliku wymienione przezls -l
. ”
(zauważ, że w moich wynikach dzieje się odwrotnie: ls -s
zwraca rozmiary większe niż ls -l
, nie mniejsze).
Tymczasem ta strona to mówi
nie ma eleganckiego sposobu na wykrycie dziur w plikach uniksowych.
Jak więc poradzić sobie z tą rozbieżnością? Które z tych wartości można uznać za prawidłowe? Czy to może być błąd ls
?
źródło
ls -s
liczy?sudo tune2fs -l /dev/sdaX|grep Inode
lubdf -i
dla wszystkich partycji.ls -lsh ~/Downloads/torrents
na przykład daje mi92K -rw-r--r-- 1 waldir waldir 350M Sep 15 2012 video.avi.part
. Oznacza to, że 92K, zwrócone przez opcję -s, to rzeczywiste miejsce, które zajmuje plik, pod względem systemu plików, a 350M, zwrócone przez opcję -l, to pełny rozmiar pliku, który miałby , gdyby został całkowicie pobrany (tj. jeśli wszystkie bajty, od początku do końca, były niezerowe). Zobacz lists.freebsd.org/pipermail/freebsd-questions/2012-June/…ls -s
informuje o przydzielonym rozmiarze pliku, zawsze wielokrotności jednostki alokacji.ls -l
mówi rzeczywisty rozmiar. Łatwy sposób przetestować:źródło