
Чем объясняется эта разница:
$ ls -l /Applications/Safari.app/Contents/Info.plist
-rw-r--r-- 1 root wheel 15730 11 jui 15:02 /Applications/Safari.app/Contents/Info.plist
$ du -sh /Applications/Safari.app/Contents/Info.plist
0B /Applications/Safari.app/Contents/Info.plist
После того, как файл скопирован в мою домашнюю папку, ls
сообщаю du
тот же номер.
$ cp /Applications/Safari.app/Contents/Info.plist .
$ du -sh Info.plist; ls -l Info.plist
16K Info.plist
-rw-r--r-- 1 ant staff 15730 17 oct 16:53 Info.plist
Оба каталога находятся на этом разделе ( / )
diskutil info /
Device Identifier: disk0s2
Device Node: /dev/disk0s2
Part of Whole: disk0
Device / Media Name: ml2013
Volume Name: OSX.10.8
Escaped with Unicode: OSX.10.8
Mounted: Yes
Mount Point: /
Escaped with Unicode: /
File System Personality: Journaled HFS+
Type (Bundle): hfs
Name (User Visible): Mac OS Extended (Journaled)
Journal: Journal size 40960 KB at offset 0xc83000
Owners: Enabled
Вот вывод stat:
$ stat Info.plist
16777218 8780020 -rw-r--r-- 1 root wheel 0 15730 "Oct 17 17:47:12 2013" \
"Jun 11 15:02:17 2013" "Jun 11 15:02:17 2013" "Apr 27 11:49:34 2013"\
4096 0 0x20 Info.plist
решение1
Возможно, я что-то нашел:
Команда ls в OS X имеет следующий переключатель:
-O Include the file flags in a long (-l) output.
Результат:
$ ls -O Info.plist
-rw-r--r-- 1 root wheel compressed 15730 11 jui 15:02 Info.plist
Я только что проверил (экспериментально), что du
всегда выдает отчеты 0
для сжатых файлов HFS+.
Копирование сжатых файлов приводит к их распаковке; поэтому логично, что du
при копировании несжатого файла отображается правильный файл.
Вот объяснение.для поведения du
:
Сжатие файлов HFS+
В Mac OS X 10.6 Apple представила сжатие файлов в HFS+. Сжатие чаще всего используется для файлов, установленных как часть Mac OS X; пользовательские файлы обычно не сжимаются (но, безусловно, могут быть сжаты!). Чтение и запись сжатых файлов прозрачны для API файловой системы Apple.
Сжатые файлы имеют пустую вилку данных. Это означает, что криминалистические инструменты, не знающие о сжатии файлов HFS+ (включая TSK до 4.0.0), не увидят никаких данных, связанных со сжатым файлом!
Обсуждение этой темы также содержится в Mac OS X and iOS Internals: To the Apple's Core
статье Джонатана Левина в главе 16: Быть B(-Tree) или не быть - Файловые системы HFS+.
Такжеafsctoolможет помочь увидеть, какие файлы сжаты в папке.
$ afsctool -v /Applications/Safari.app/
/Applications/Safari.app/.:
Number of HFS+ compressed files: 1538
Total number of files: 2247
Total number of folders: 144
Total number of items (number of files + number of folders): 2391
Folder size (uncompressed; reported size by Mac OS 10.6+ Finder): 29950329 bytes / 34.7 MB (megabytes) / 33.1 MiB (mebibytes)
Folder size (compressed - decmpfs xattr; reported size by Mac OS 10.0-10.5 Finder): 21287197 bytes / 23.8 MB (megabytes) / 22.7 MiB (mebibytes)
Folder size (compressed): 22694835 bytes / 25.2 MB (megabytes) / 24 MiB (mebibytes)
Compression savings: 24.2%
Approximate total folder size (files + file overhead + folder overhead): 26353338 bytes / 26.4 MB (megabytes) / 25.1 MiB (mebibytes)
решение2
При использовании du
и сравнении результатов двух разных запусков для файловых систем вам необходимо обязательно использовать переключатель --apparent-size
.
Пример
Вот смонтированный ресурс CIFS.
$ du -sh somedir
50M somedir
$ du -sh --apparent-size somedir
45M somedir
выдержка из страницы du man
--apparent-size
print apparent sizes, rather than disk usage; although the apparent
size is usually smaller, it may be larger due to holes in (‘sparse’)
files, internal fragmentation, indirect blocks, and the like
Так в чем дело?
Это сбивает с толку многих людей, но помните, что когда файлы сохраняются на диске, они занимают блоки пространства, даже если они используют только часть этих блоков. Когда вы работаете du
без , --apparent-size
вы получаете размер, основанный на объеме используемого пространства блока на диске, а не на фактическом пространстве, потребляемом файлом(ами).
А как насчет размера 0B?
0B /Приложения/Safari.app/Содержание/Info.plist
Скорее всего, это ссылка. Выполнение этой команды покажет, так ли это.
$ ls -l /Applications/Safari.app/Contents | grep Info.plist
решение3
Мой ответ совпадает с ответами других, но я пока не могу комментировать, поэтому начну новый:
Большинство файлов в /Applications сжаты, и при копировании они теряются. При использовании сжатия в HFS+ данные файлов сохраняются в Resource ForkИЛИрасширенный атрибут, если он достаточно мал (менее 4k). Если он находится в ресурсной ветке du (по крайней мере, в Yosemite), он покажет фактическое использование диска в блоках. Если он полностью в атрибуте, он покажет 0.