Для тестування я повинен створити файл певного розміру (щоб перевірити обмеження на завантаження).
Що таке команда для створення файлу певного розміру в 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, якщо = $ INPUT-FILE = $ 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