Мне трудно понять, как правильно читать размер файлов, так как каждая команда дает разные результаты. Я также наткнулся на пост на http://forums.devshed.com/linux-help-33/du-and-ls-generating-inconsistent-file-sizes-42169.html, в котором говорится следующее;
du дает вам размер файла, который находится в файловой системе. (IE всегда будет давать вам результат, который делится на 1024).
ls даст вам фактический размер файла.
То, на что вы обращаете внимание, - это разница между фактическим размером файла и объемом занимаемого на диске места. (также называется эффективностью файловой системы).
В чем разница между тем, как он находится в файловой системе, и фактическим размером файла
du
как он показывает вамd
isku
sage, он смотрит на пространство, занимаемое текущим диском, и, таким образом, показывает размер резидента.df -h
?df
сообщает количество оставшихся блоков * размер блока файловой системы. В этом случае это было бы больше похоже на тоdu
, что даже частично используемые блоки считаются полностью выделенными.df
в основном переводит statvfs , так что вы можете взглянуть на этот системный вызов, чтобы лучше понять, что происходит.Здесь есть еще один вариант, который не был рассмотрен - разреженные файлы . В этом случае,
du
будет показан меньший размер, чем простойls -l
, потому чтоls
сообщает о «размере» файла как о видимом размере (число байтов, которые вы можете прочитать, если вы хотите получить много нулей), в то время какdu
будет продолжать использовать фактическое количество используемых дисковых блоков.Забавный трюк: создайте очень много больших разреженных файлов, а затем поразите своих друзей тем, сколько у вас дискового пространства («смотри, я храню файлы объемом одиннадцать миллиардов 1 ТБ на моем жестком диске!»). ОК, может быть, не так весело.
источник
Файловые системы состоят из блоков. Файлы не должны аккуратно вписываться в блоки. Если файл имеет размер 1024 байта, его размер в ls и du будет 1024. Если размер файла равен 1025, размер будет 1025 в ls и 2048 в du.
Обратите внимание, что в приведенном выше примере предполагается, что размер блока равен 1024. В настоящее время большие размеры блоков являются нормой e, g,
источник
Есть еще одна причина, по которой они могут отличаться. du -h знает, когда он увидит тот же файл под другим именем (жесткие ссылки, а не символические), и сообщит каждый файл о его размере, но только один раз добавит размер в общий родительский каталог.
источник