Сегодня с удивлением обнаружил, что гугл не выдаёт ничего хорошего на тему быстрого генерирования рандомной строки в консоли. Кошмар.
У нас задача — сгенерировать 8 рандомных символов — англ букв и цифр. Буквы будут только мелкие. Всё очень просто:
head -c 100 /dev/random | md5 | tail -c9
В комментариях Civil (тоже с #yakit, кстати) предложил ещё такой вариант:
head -c 100 /dev/urandom | base64 | sed 's/[+=/A-Z]//g' | tail -c 9
Доля здравого смысла в его словах есть.
Обратите внимание, что у tail -с 9, а не 8.
Записал больше для себя, но вам тоже пригодится =)
А разве в вашем дистрибутиве нет apg?
А не проще использовать pwgen?
Для ваших требований будет
pwgen -A 8 1
root@inky-kit:~# apg
-bash: apg: command not found
root@inky-kit:~# pwgen
-bash: pwgen: command not found
Иногда нет возможности поставить софт. Тем более писать скрипты, которые зависят от утилит, не входящих в состав coreutils и иже с ними вообще не стоит.
Тут два недостатка есть. Первый — md5 это hex-число, поэтому буковки будут не из полного a-z. Второй — /dev/random, как минимум на Linux’ах, при не очень большой нагрузке может эти 100 символов генерировать порядка минут.
Может лучше использовать что-нибудь такое: head -c 100 /dev/urandom | base64 | sed ‘s/[+=/A-Z]//g’ | tail -c 9 ?
Да и head от /dev/random не назовешь быстрым на Linux’ах.
Добавил твой вариант, спасиб)
А как перемешать (вывести в рандомном порядке) строки в файле.
sort -R для кирилличного файла почему-то сортирует строки.
Подскажите, можно на мыло, уже запарился искать.
Попробуйте cat file | sort | sort -R
cat /dev/urandom | tr -dc ‘a-zA-Z0-9’ | head -c10
Господа и Civil, подскажите, почему /dev/random так долго генерит случайные символы?
Я пользователям меняю пароли скриптом со строкой randpswd=`dd if=/dev/random bs=1 count=20 2>/dev/null`. И эта строка самая времязатратная :-(
Потому что random’у нужна энтропия.
http://ru.wikipedia.org/wiki//dev/random_%D0%B8_/dev/urandom вот тут написано, почему он медленный.
Спасибо. Попробую мышей елозить для создания «шума» — может тогда минимизурется время генерации случайных чисел.
head -c 100 /dev/random | md5 | tail -c9
bash: md5: команда не найдена
md5sum, если дистр новый
Доброе утро.
$ date | sha256sum
> $ date | sha256sum
Во-первых, это не рандомная.
Во-вторых, статья 2011 года, сейчас можно смело делать pwgen 40 1 и не думать )