Debian.pro

Блог для пользователей и администраторов Debian


Рандомная строка, linux random string, freebsd random string.

Сегодня с удивлением обнаружил, что гугл не выдаёт ничего хорошего на тему быстрого генерирования рандомной строки в консоли. Кошмар.
У нас задача — сгенерировать 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.

Записал больше для себя, но вам тоже пригодится =)

28.05.2011 byinkvizitor68sl|хинты
Метки: ,

Комментарии (11):

  1. Сергей Хватов :

    А разве в вашем дистрибутиве нет apg?

  2. yakim :

    А не проще использовать pwgen?
    Для ваших требований будет
    pwgen -A 8 1

  3. root@inky-kit:~# apg
    -bash: apg: command not found
    root@inky-kit:~# pwgen
    -bash: pwgen: command not found

    Иногда нет возможности поставить софт. Тем более писать скрипты, которые зависят от утилит, не входящих в состав coreutils и иже с ними вообще не стоит.

  4. Civil :

    Тут два недостатка есть. Первый — 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’ах.

  5. Добавил твой вариант, спасиб)

  6. random :

    А как перемешать (вывести в рандомном порядке) строки в файле.
    sort -R для кирилличного файла почему-то сортирует строки.
    Подскажите, можно на мыло, уже запарился искать.

  7. inkvizitor68sl :

    Попробуйте cat file | sort | sort -R

  8. Имя :

    cat /dev/urandom | tr -dc ‘a-zA-Z0-9′ | head -c10

  9. Juice :

    Господа и Civil, подскажите, почему /dev/random так долго генерит случайные символы?
    Я пользователям меняю пароли скриптом со строкой randpswd=`dd if=/dev/random bs=1 count=20 2>/dev/null`. И эта строка самая времязатратная :-(

  10. Потому что random’у нужна энтропия.
    http://ru.wikipedia.org/wiki//dev/random_%D0%B8_/dev/urandom вот тут написано, почему он медленный.

  11. Juice :

    Спасибо. Попробую мышей елозить для создания «шума» — может тогда минимизурется время генерации случайных чисел.

Написать комментарий