10

Я пытаюсь понять вывод команды dd . Я старался

dd if=/dev/zero of=/dev/null bs=512 count=1

и получил (как и ожидалось):

 1+0 records in
 1+0 records out
 512 bytes (512 B) copied, 2e-05 seconds, 26 MB/s

Однако когда я пытался

dd if=/dev/random of=/dev/null bs=512 count=1

я получил

 0+1 records in
 0+1 records out
 128 bytes (128 B) copied, 0.00012 seconds, 1.1 MB/s

Почему он копирует только 128 байтов?

2 ответа2

8

Вам нужно использовать /dev/urandom или "разблокирующий" случайный источник.

/dev/random использует своего рода пул энтропии для увеличения случайности источника битов. Этот метод будет возвращать только столько случайных битов / байтов, сколько может быть возвращено на основе состояния пула энтропии в данный момент, поэтому, если используется аппаратный генератор случайных чисел, это иногда может быть константой. Из справочной страницы Linux:

Генератор также сохраняет оценку количества битов шума в энтропийном пуле. Из этого энтропийного пула создаются случайные числа.

Файл /dev/urandom повторно использует внутренний пул как есть для генерации числа столько, сколько вам нужно. Побочным эффектом этого является: не используйте /dev/urandom для криптографических целей, так как он менее случайный, чем биты, создаваемые /dev/random . Смотрите ссылку на страницу руководства выше для деталей.

3

Поскольку чтение /dev/random возвращает только количество байтов , которое доступно, вы должны указать размер блока 1. В вашем примере вы устанавливаете размер блока на 512, который не выполняется после первого чтения.

Следовательно, правильные аргументы, которые читают ровно 512 байт:

dd if=/dev/random of=filename bs=1 count=512

Обратите внимание, что команда будет блокироваться до тех пор, пока в системе не будет достаточно энтропии для генерации всех данных. Вот как работает /dev/random . Если вы не хотите ждать и с энтропией у вас все в порядке, используйте вместо этого /dev/urandom . В подавляющем большинстве случаев использование /dev/urandom является предпочтительным.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .