В целях тестирования мне нужно сгенерировать файл определенного размера (чтобы проверить лимит загрузки).
Что такое команда для создания файла определенного размера в Linux?
В целях тестирования мне нужно сгенерировать файл определенного размера (чтобы проверить лимит загрузки).
Что такое команда для создания файла определенного размера в Linux?
Ответы:
dd if=/dev/zero of=upload_test bs=file_size count=1
Где file_sizeразмер вашего тестового файла в байтах
ddимеет предел 2 ^ 32 для его значений, так , чтобы создать файл размером более 4 Гб, есть одна хитрость: dd if=/dev/zero of=test bs=1M count=<size in megabytes>.
Пожалуйста, современнее проще и быстрее. В Linux (выберите один)
truncate -s 10G foo
fallocate -l 5G bar
Это необходимо , чтобы сказать , что truncateв файловой системе , поддерживающие разреженные файлы будут создать разреженный файл и fallocateне будут. Разреженный файл - это файл, в котором единицы выделения, составляющие файл, фактически не выделяются до использования. Метаданные для файла , однако, будут занимать некоторое значительное пространство, но, вероятно, не где-то рядом с фактическим размером файла. Вам следует обратиться к ресурсам о разреженных файлах для получения дополнительной информации, поскольку у этого типа файлов есть свои преимущества и недостатки. Не разреженный файл имеет свои блоки (единицы размещения), выделенные заранее, что означает, что пространство зарезервировано настолько, насколько его видит файловая система. Также fallocateни truncateне будет устанавливать содержимое файла в указанное значение, как ddвместо этого содержимое файла, выделенного с fallocateили truncateможет быть любым значением корзины, которое существовало в выделенных единицах во время создания, и такое поведение может быть или не быть желательным. Это ddсамый медленный способ, потому что он фактически записывает значение или порцию данных во весь файловый поток, как указано в параметрах командной строки.
Это поведение может потенциально отличаться - в зависимости от используемой файловой системы и соответствия этой файловой системы какому-либо стандарту или спецификации. Поэтому рекомендуется проводить надлежащие исследования, чтобы убедиться, что используется соответствующий метод.
truncate. Это произвело файл нулевого размера, используя синтаксис выше. «Man-страница» для fallocateговорит, что файлы, которые он создает, полны пустых, spaceа не данных. Похоже, что это было бы бесполезно для некоторых ожидаемых случаев, таких как «сколько времени занимает копирование файла 1G».
brew install coreutils. Это добавит г перед командой, так что вы должны запустить его так: gtruncate -s 10G foo. Надеюсь это поможет!
NTFSразделе.
Просто чтобы следить за постом Тома , вы также можете использовать dd для создания разреженных файлов:
dd if=/dev/zero of=the_file bs=1 count=0 seek=12345
Это создаст файл с «дырой» в большинстве юниксов - данные на самом деле не будут записываться на диск или занимать место, пока в него не будет записано что-то отличное от нуля.
count=0, bs * seekстановится размером файла
На OSX (и Solaris, по-видимому) mkfileкоманда также доступна:
mkfile 10g big_file
Это делает файл размером 10 ГБ с именем "big_file". Нашел этот подход здесь.
truncateи fallocateкоманды не доступны. ddтакже работает, как описано выше, хотя это mдля мегабайт, а не M.
Используйте эту команду:
dd if = $ INPUT-FILE of = $ OUTPUT-FILE bs = $ BLOCK-SIZE count = $ NUM-BLOCKS
Чтобы создать большой (пустой) файл, установите $INPUT-FILE=/dev/zero.
Общий размер файла будет $BLOCK-SIZE * $NUM-BLOCKS.
Новый файл будет создан $OUTPUT-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;
}
Такой подход особенно полезен для последующего MMAP файла в память.
используйте следующую команду, чтобы убедиться, что файл имеет правильный размер:
# 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очень сильно.
/dev/zero, так /dev/urandomчто хорошо.
dd if=/dev/zero of=my_file.txt count=12345
Есть много ответов, но никто не объяснил, что еще можно сделать. Просматривая справочные страницы для 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
Как команда оболочки:
< /dev/zero head -c 1048576 > output
Используйте, 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