Как создать файл с заданным размером в Linux?
В целях тестирования мне нужно сгенерировать файл определенного размера (чтобы проверить лимит загрузки).
Что такое команда для создания файла определенного размера в Linux?
14 ответов
dd if=/dev/zero of=upload_test bs=file_size count=1
куда file_size
размер вашего тестового файла в байтах
Пожалуйста, современнее проще и быстрее. В Linux (выберите один)
truncate -s 10G foo
fallocate -l 5G bar
Надо сказать, что truncate
в файловой системе, поддерживающей разреженные файлы, создаст разреженный файл и fallocate
не буду. Разреженный файл - это файл, в котором единицы выделения, составляющие файл, фактически не выделяются до использования. Метаданные для файла , однако, будут занимать некоторое значительное пространство, но, вероятно, не там, где находится фактический размер файла. Вам следует обратиться к ресурсам о разреженных файлах для получения дополнительной информации, поскольку у этого типа файлов есть свои преимущества и недостатки. Не разреженный файл имеет свои блоки (единицы размещения), выделенные заранее, что означает, что пространство зарезервировано настолько, насколько его видит файловая система. Также fallocate
ни truncate
не будет устанавливать содержимое файла в указанное значение, как dd
вместо содержимого файла, выделенного с fallocate
или же truncate
может быть любым значением мусора, которое существовало в выделенных единицах во время создания, и такое поведение может быть или не быть желательным. dd
является самым медленным, поскольку фактически записывает значение или порцию данных во весь файловый поток, как указано в его параметрах командной строки.
Это поведение может потенциально отличаться - в зависимости от используемой файловой системы и соответствия этой файловой системы какому-либо стандарту или спецификации. Поэтому рекомендуется проводить надлежащие исследования, чтобы убедиться, что используется соответствующий метод.
Просто чтобы следить за постом Тома, вы также можете использовать dd для создания разреженных файлов:
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
Это создаст файл с "дырой" в большинстве юниксов - данные на самом деле не будут записываться на диск или занимать место, пока в него не будет записано что-то отличное от нуля.
Используйте эту команду:
dd if = $ INPUT-FILE of = $ OUTPUT-FILE bs = $ BLOCK-SIZE count = $ NUM-BLOCKS
Чтобы создать большой (пустой) файл, установите $INPUT-FILE=/dev/zero
,
Общий размер файла будет $BLOCK-SIZE * $NUM-BLOCKS
,
Новый созданный файл будет $OUTPUT-FILE
,
На OSX (и Solaris, по-видимому) mkfile
команда также доступна:
mkfile 10g big_file
Это делает файл размером 10 ГБ с именем "big_file". Нашел этот подход здесь.
Вы можете сделать это программно:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main() {
int fd = creat("/tmp/foo.txt", 0644);
ftruncate(fd, SIZE_IN_BYTES);
close(fd);
return 0;
}
Этот подход особенно полезен для последующего преобразования файла в память.
используйте следующую команду, чтобы убедиться, что файл имеет правильный размер:
# du -B1 --apparent-size /tmp/foo.txt
Быть осторожен:
# du /tmp/foo.txt
вероятно, напечатает 0, потому что он выделен как разреженный файл, если поддерживается вашей файловой системой.
смотрите также: человек 2 открыт и человек 2 урезан
Некоторые из этих ответов вы используете /dev/zero
для источника ваших данных. Если скорость загрузки в вашей тестовой сети не самая лучшая, если ваше приложение выполняет какое-либо сжатие, файл, заполненный нулями, сжимается очень хорошо. Используя эту команду для генерации файла
dd if=/dev/zero of=upload_test bs=10000 count=1
Я мог сжать upload_test
до примерно 200 байтов. Таким образом, вы можете оказаться в ситуации, когда вы думаете, что загружаете файл размером 10 КБ, но на самом деле это будет намного меньше.
Я предлагаю использовать /dev/urandom
вместо /dev/zero
, Я не мог сжать вывод /dev/urandom
очень сильно.
Вы могли бы сделать:
[dsm@localhost:~]$ perl -e 'print "\0" x 100' > filename.ext
Где вы заменяете 100 на количество байтов, которое вы хотите записать.
Использовать fallocate
если вы не хотите ждать диск.
Пример:
fallocate -l 100G BigFile
Применение:
Usage:
fallocate [options] <filename>
Preallocate space to, or deallocate space from a file.
Options:
-c, --collapse-range remove a range from the file
-d, --dig-holes detect zeroes and replace with holes
-i, --insert-range insert a hole at range, shifting existing data
-l, --length <num> length for range operations, in bytes
-n, --keep-size maintain the apparent size of the file
-o, --offset <num> offset for range operations, in bytes
-p, --punch-hole replace a range with a hole (implies -n)
-z, --zero-range zero and ensure allocation of a range
-x, --posix use posix_fallocate(3) instead of fallocate(2)
-v, --verbose verbose mode
-h, --help display this help
-V, --version display version
В результате будет сгенерирован текстовый файл размером 4 МБ со случайными символами в текущем каталоге и его именем "4mb.txt". Вы можете изменить параметры для создания разных размеров и имен.
base64 /dev/urandom | head -c 4000000 > 4mb.txt
Есть много ответов, но никто не объяснил, что еще можно сделать. Просматривая справочные страницы для dd, можно лучше указать размер файла.
Это создаст /tmp/zero_big_data_file.bin заполненный нулями, который имеет размер 20 мегабайт:
dd if=/dev/zero of=/tmp/zero_big_data_file.bin bs=1M count=20
Это создаст /tmp/zero_1000bytes_data_file.bin заполненный нулями, который имеет размер 1000 байтов:
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1kB count=1
или же
dd if=/dev/zero of=/tmp/zero_1000bytes_data_file.bin bs=1000 count=1
- Во всех примерах bs - это размер блока, а count - это количество блоков.
- За блоками и байтами могут следовать следующие мультипликативные суффиксы: c =1, w =2, b =512, кБ =1000, K =1024, MB =1000*1000, M =1024*1024, xM =M GB =1000*1000*1000, G =1024*1024*1024 и т. Д. Для T, P, E, Z, Y.
Пожалуйста, запустите приведенную ниже команду для быстрого создания большего файла определенного размера в Linux.
for i in {1..10};do fallocate -l 2G filename$i;done
Объяснение:-Вышеупомянутая команда создаст 10 файлов размером 10 ГБ всего за несколько секунд.