Я не могу понять, почему я получаю следующие результаты:
ls -l
говорит мне, что размер данного файла (ИСТОРИЯ) "581944":
$ ls -l HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 581944 Feb 22 10:59 HISTORY
ls -s
говорит, что это "572":
$ ls -s HISTORY
572 HISTORY
Очевидно, мне нужно, чтобы значения использовали сопоставимый масштаб. Итак, сначала я подтверждаю, что использование --block-size 1
in ls -l
дает мне тот же результат, что и раньше:
$ ls -l --block-size 1 HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 581944 Feb 22 10:59 HISTORY
Затем я делаю то же самое, чтобы ls -s
получить значение в том же масштабе:
$ ls -s --block-size 1 HISTORY
585728 HISTORY
Разные результаты! 581944 ≠ 585728 .
Я попытался сгенерировать сопоставимые значения наоборот, используя -k
, но я получаю:
$ ls -lk HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 569 Feb 22 10:59 HISTORY
$ ls -sk HISTORY
572 HISTORY
Опять же, разные результаты, 569 ≠ 572 .
Я попытался указать --si, чтобы убедиться, что оба варианта используют один и тот же масштаб, но безрезультатно:
$ ls -lk --si HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 582k Feb 22 10:59 HISTORY
$ ls -sk --si HISTORY
586k HISTORY
... опять же, разные значения: 582k ≠ 586k .
Я пытался искать в Интернете , но единственное , что я мог найти , что казалось уместным было это :
В некоторых файлах есть «дыры», поэтому использование, указанное в
ls -s
(...), меньше размера файла, указанного в «ls -l
.»
(обратите внимание, что в моих результатах происходит обратное: ls -s
возвращает размеры больше, чем ls -l
, не меньше.)
Между тем на этой странице написано, что
элегантного способа обнаружить дыры в файлах Unix не существует.
Итак, как я могу справиться с этим расхождением? Какие из этих значений можно считать правильными? Может ли это быть ошибка в ls
?
источник
ls -s
считается?sudo tune2fs -l /dev/sdaX|grep Inode
илиdf -i
для всех разделов.ls -lsh ~/Downloads/torrents
дает мне, например,92K -rw-r--r-- 1 waldir waldir 350M Sep 15 2012 video.avi.part
. То есть, 92K, возвращаемый параметр -s, является фактическим пространством файла занимает, файловая система мудра, и 350M, возвращаемый параметр -l, является полным размером файл будет иметь , если он был полностью загружен (т.е. если все байты, от начала до конца, были ненулевыми). См. Lists.freebsd.org/pipermail/freebsd-questions/2012-June/…ls -s
говорит вам о выделенном размере файла, всегда кратном единице выделения.ls -l
говорит реальный размер. Простой способ проверить:источник