Если вы запустите ls -l для файла, который содержит одну букву, он будет указан как 2B. Если ваша файловая система состоит из блоков 4k, я думал, что она округляет файлы до размера блока? Это потому, что ls -l на самом деле читает число байтов из inode? При каких обстоятельствах вас округляют, чтобы заблокировать ответы по сравнению с ответами по фактическому количеству байтов в Linux 2.6 Kernel GNU?
linux
filesystems
ls
ext3
Грегг Левенталь
источник
источник
Ответы:
Я предполагаю, что вы поместили одну букву в файл с
echo a > file
илиvim file
, что означает, что у вас будет эта буква и дополнительный символ новой строки (два символа, то есть два байта).ls -l
показывает размер файла в байтах, а не в блоках (точнее, длину файла ):(обратите внимание, что
cat -A
новые строки отображаются в виде$
символов)В отличие от
ls -l
,du
покажет реальный размер занимаемого на диске:(фактически,
du
показывает размер в единицах 1 кБ, поэтому здесь размер равен 4 × 1024 байт = 4096 байт = 4 кБ, что является размером блока в этой файловой системе)Чтобы
ls
показать это, вы должны будете использовать-s
опцию вместо / в дополнение к-l
:Первый столбец - это выделенный размер, опять же в единицах 1 кБ. Последний можно изменить, указав
--block-size
, например,источник
Я думаю, что глубокий ответ заключается в следующем:
Как показывают другие ответы, в принципе, файл, созданный из двух байтов, имеет длину два байта (показывать по
ls -l
) и занимать 4 КиБ (показывать поdu
илиls -ls
).Видеть:
Хорошо,
test
имеет длину 1 и размер (на диске) 4 КиБ. Но:(первая команда добавляет 8191 нулевых байтов к
test
), теперь тест имеет длину 8192, но все еще занимает 4 КиБ на диске (в нем есть «дыра») (1).Некоторые файловые системы также могут сжимать короткие файлы, чтобы они занимали меньше места за счет совместного использования блоков (см., Например, пакетную компоновку ), а другие, такие как btrfs, копируют при записи , поэтому взаимосвязь между файлом, его логической длиной и объемом занимаемого пространства диск сложный.
Примечания:
(1) Это на самом деле не дыра , это в конце ... но, тем не менее, это работает до конца примера.
источник
ls -l
это просто длинный формат.ls -ls
используется для отображения размера блока.тестирование
Как мы видим, размер файла указан как 2B. Однако, если вам нужно проверить размер блока, вам нужно выполнить приведенную ниже команду.
4 выше отображает размер используемого блока. Мы также можем проверить то же самое с помощью
stat
команды.Теперь возникает вопрос: почему
ls -ls
размер блока указан как 4, аstat
размер блока - как 8. Причина такого поведения четко объяснена в ответе здесь .источник