Я могу использовать, ls -lчтобы получить логический размер файла, но есть ли способ получить физический размер файла?
Я могу использовать, ls -lчтобы получить логический размер файла, но есть ли способ получить физический размер файла?
Ответы:
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.
du покажет, сколько данных действительно можно прочитать, и lsпокажет, в какой степени распределены сектора диска.
duпоказывает объем диска, фактически используемый файлом, в то время как видимый размер (логический размер), который показывает, ls- это сколько байтов программа сможет прочитать с него. Если файл является разреженным, некоторые из прочитанных байтов будут нулевыми, но они все равно будут доставлены в программу, которая их читает (только не с диска).