Как читать N случайных символов из /dev/urandom?
read /dev/urandom 3
Выше не работает.. Как я могу прочитать случайные байты из /dev/urandom
в баш?
7 ответов
head -c 500 /dev/urandom | tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
(Если вы хотите использовать буквенные тире, то дефис должен идти в конце строки, как сделано выше, в отличие от *-_
).
И чтобы объяснить, что делается благодаря вышеупомянутому набору команд:
head -c 500 /dev/urandom
: Получить первые 500 символов (байтов) из/dev/urandom
,tr -dc 'a-zA-Z0-9~!@#$%^&*_-'
: Удалить все символы, кроме указанных в'a-zA-Z0-9~!@#$%^&*_-'
с выхода первой команды.fold -w 3
: Отформатируйте вывод второй команды так, чтобы в каждой строке было 3 символа.head -n 1
: Показать первую строку результата третьей команды наstdout
,
Пожалуйста , проверьте man od
,
Вы можете использовать, например,
od -vAn -N4 -tu4 < /dev/urandom
генерировать случайные числа 4 байта без знака.
Вот тот, который создает строки base64, обратите внимание, что, хотя они ограничены строками base64, отступы удаляются из них, поэтому вы не можете их декодировать, возможно, вам это все равно не понадобится.
cat /dev/urandom | base64 | head -c 5
замещать 5
с количеством символов, которые вы хотели бы.
Однако если вам по каким-то причинам необходимо декодировать их, переместите base64
до конца трубы. Затем он соберет 5 символов из urandom и base64 закодирует его с правильным заполнением, но итоговая строка может быть длиннее, чем вы хотели из-за заполнения.
cat /dev/urandom | head -c 5 | base64
Самое простое решение будет таким простым:
$ head -cN /dev/urandom
Попробуй это: dd if=/dev/urandom bs=1 count=3
Если вы хотите поместить результат в переменную $:
variable=`dd if=/dev/urandom bs=1 count=3`
Обратите внимание, что это, вероятно, не будет для печати.
Следующая команда генерирует случайные символы
</dev/urandom tr -dc 'A-Za-z0-9!"#$%&\(\)*+,./: ;<=>?@\[\]^_`{|}~-' | head -c 15 ; echo
из всех печатных символов ASCII и занимает только 15 символов заголовка (или любое указанное вами число).