Пожалуйста, определите, что вы подразумеваете под «физическим» размером.
Jörg W Mittag
Ответы:
28
ls -lдаст вам видимый размер файла, то есть число байтов, которые программа прочитала бы, если бы она прочитала файл от начала до конца. duдаст вам размер файла "на диске".
По умолчанию duуказывает размер файла в количестве блоков на диске, но вы можете использовать его, -hчтобы получить читабельную единицу. Смотрите также руководство duпо вашей системе.
Обратите внимание, что для GNU coreutil du(который, вероятно, используется в Linux) -bполучение байтов подразумевает --apparent-sizeвозможность. Это не то, что вы хотите использовать для получения количества байтов, фактически используемых на диске. Вместо этого используйте --block-size=1или -B 1.
С GNU ls, вы также можете сделать ls -s --block-size=1на файл. Это даст тот же номер, что и du -B 1для файла.
Пример:
$ ls -l file
-rw-r--r-- 1 myself wheel 536870912 Apr 8 11:44 file
$ ls -lh file
-rw-r--r-- 1 myself wheel 512M Apr 8 11:44 file
$ du -h file
24K file
$ du -B 1 file
24576 file
$ ls -s --block-size=1 file
24576 file
Это означает, что это файл 512 МБ, который занимает около 24 КБ на диске. Это разреженный файл (в основном нули, которые на самом деле не записываются на диск, а представлены в виде логических «дырок» в файле). Разреженные файлы распространены при работе с предварительно выделенными большими файлами, например, образами дисков для виртуальных машин или файлами подкачки и т. Д. Создание разреженного файла выполняется быстро, а заполнение его нулями - медленно (и не нужно).
Смотрите также руководство fallocateпо вашей системе Linux.
в каком случае эта разница важна? Вы можете сделать практический пример? заранее спасибо.
Д'Арси Надер
1
@ D'ArcyNader Смотрите обновленный ответ.
Кусалананда
Поправьте меня, если я что-то не так понял, но, похоже, первое предложение выглядит наоборот: stackoverflow.com/a/31437673/3701431du покажет, сколько данных действительно можно прочитать, и lsпокажет, в какой степени распределены сектора диска.
Сергей Колодяжный
2
@SergiyKolodyazhnyy (извините, что отвечаю поздно) Нет, duпоказывает объем диска, фактически используемый файлом, в то время как видимый размер (логический размер), который показывает, ls- это сколько байтов программа сможет прочитать с него. Если файл является разреженным, некоторые из прочитанных байтов будут нулевыми, но они все равно будут доставлены в программу, которая их читает (только не с диска).
Ответы:
ls -l
даст вам видимый размер файла, то есть число байтов, которые программа прочитала бы, если бы она прочитала файл от начала до конца.du
даст вам размер файла "на диске".По умолчанию
du
указывает размер файла в количестве блоков на диске, но вы можете использовать его,-h
чтобы получить читабельную единицу. Смотрите также руководствоdu
по вашей системе.Обратите внимание, что для GNU coreutil
du
(который, вероятно, используется в Linux)-b
получение байтов подразумевает--apparent-size
возможность. Это не то, что вы хотите использовать для получения количества байтов, фактически используемых на диске. Вместо этого используйте--block-size=1
или-B 1
.С GNU
ls
, вы также можете сделатьls -s --block-size=1
на файл. Это даст тот же номер, что иdu -B 1
для файла.Пример:
Это означает, что это файл 512 МБ, который занимает около 24 КБ на диске. Это разреженный файл (в основном нули, которые на самом деле не записываются на диск, а представлены в виде логических «дырок» в файле). Разреженные файлы распространены при работе с предварительно выделенными большими файлами, например, образами дисков для виртуальных машин или файлами подкачки и т. Д. Создание разреженного файла выполняется быстро, а заполнение его нулями - медленно (и не нужно).
Смотрите также руководство
fallocate
по вашей системе Linux.источник
du
покажет, сколько данных действительно можно прочитать, иls
покажет, в какой степени распределены сектора диска.du
показывает объем диска, фактически используемый файлом, в то время как видимый размер (логический размер), который показывает,ls
- это сколько байтов программа сможет прочитать с него. Если файл является разреженным, некоторые из прочитанных байтов будут нулевыми, но они все равно будут доставлены в программу, которая их читает (только не с диска).Я получаю размер файла в байтах, как это:
источник