dd if=/dev/urandom of=a.log bs=1M count=2
Вопрос: если этот код ^ дает мне случайные числа, как я могу получить случайные неслова (неразборчиво), такие как "hgcqw".
Вопрос 2: можно ли использовать команду shuf вместе с командой dd?
Спасибо!
Обновление от 6/21. (День отца)
@ Serg Сначала моей целью было получение чисел. Скажем, случайные двузначные числа от 01-100. Дать команду и запустить код. В итоге он выдаст мне 14, 17, 21, 35 (я придумываю, какие случайные числа я получаю). Далее я хочу получить среднее значение этих чисел. В данном случае среднее значение будет 21,75 (22). Задача состоит в том, чтобы остановить цикл, пока он не найдет конкретное среднее значение, которое я искал. В данном случае это будет 25. Вторая цель - получить случайные слова, а затем подсчитать, какие слова были использованы.
@ terdon
Слово - это "бакс", "утка" или "старая добрая удача". В общем, все, что можно найти в словаре. Длина может быть любой, если мы ограничим лимит до 5 букв, я был бы не против узнать как?
Что такое слово? Я предполагаю, что вы имеете в виду только a-z и A-Z, но какой длины? Будет ли словом liwyduglashvdbalishfvgapivflakhf? Как насчет ksjdas-asd-asd-asd? - может быть в словах. Пожалуйста, отредактируйте и уточните. - terdon вчера
Генерируйте случайный буквенный символ.
tr -cd '[:alpha:]' < /dev/urandom | fold -w1 | head -n1
Генерируют случайную буквенную строку 10 символов в длине.
tr -cd '[:alpha:]' < /dev/urandom | fold -w10 | head -n1
Некоторые альтернативные классы символов POSIX для использования вместо alpha
в [:alpha:]
: alnum - алфавитно-цифровые символы
альфа - буквенные символы
цифра - цифры
график - видимые символы
ниже - символы нижнего регистра
верхний - символы верхнего регистра
Генерируют случайные числа в определенном диапазоне (пример 1-10).
shuf -i 1-10 -n1
По сравнению с первыми двумя примерами удара, shuf
команда предлагает меньше опций для генерации случайных строк, хотя shuf
может использоваться для генерации случайных перестановок.
dd if=/dev/urandom of=a.log bs=1M count=2
Это не дает Вам случайные числа. Это дает Вам случайный байты . Вы могли закодировать его к числам:
hexdump -v -e '"%d\n"' /dev/urandom | dd of=a.log bs=1M count=2
(Более ранняя версия использовала od
, но od
выходной формат довольно негибок.)
Используя /dev/random
непосредственно могло бы быть довольно расточительным, так как это - поток байтов. Вы могли закодировать его к base64
, и затем разделить неалфавиты, которые должны все еще получить Вас, в среднем, 80% входных данных:
base64 /dev/urandom | tr -cd '[[:alpha:][:space:]]'
Это имеет тенденцию оставлять довольно длинные линии. Вы могли, вместо этого, заменить числа новыми строками:
base64 /dev/urandom | sed 's/[^[:alpha:]]\+/\n/g'
Генерировать случайную алфавитную строчную строку (включая пробелы) 2 МБ:
< /dev/urandom tr -dc 'a-z ' | head -c 2000000 > a.log
Для постоянного потока:
< /dev/urandom tr -dc 'a-z '
Для генерации случайной алфавитной строки смешанного случая (включая пробелы) 2 МБ:
< /dev/urandom tr -dc 'A-Za-z ' | head -c 2000000 > a.log
Для постоянного потока:
< /dev/urandom tr -dc 'A-Za-z '
Другая версия (-c${1:-10}
= длина 10):
< /dev/urandom tr -dc A-Za-z | head -c${1:-10} > out
или (head -n 10
= длина 10)
strings /dev/urandom | grep -o '[[:alpha:]]' | head -n 10 | tr -d '\n' > out
или с dd
(count=10
= длина 10)
dd if=/dev/urandom bs=1 count=10 2>/dev/null | base64 | grep -o '[[:alpha:]]' | head -n 30 | tr -d '\n' > out
или это
openssl rand -base64 32| grep -o '[[:alpha:]]' | head -n 10 | tr -d '\n' > out
или это
date +%s | sha256sum | base64 | grep -o '[[:alpha:]]'| head -n 10 | tr -d '\n' > out
Вот моя идея. mkpasswd
используется часто для генерации зашифрованных паролей, следовательно строки, там уже не должно быть понятным. Небольшая проблема состоит в том, что это генерирует строки с числами. При помощи sed мы можем избавиться от тех.
mkpasswd | sed 's/[0-9]/YOLO/g'
YOLO мог быть тем, что Вы хотите заменить цифрами. Вы могли также просто удалить их:
mkpasswd | sed 's/[0-9]//g'
Вот иначе:
$ date | md5pass | sed 's/[0-9]//g'
$NG.dLw$vcpGCylnDtmptDtogDr/
Как muru предложенный в реве комментариев, можно также установить pwgen
, с sudo apt-get install pwgen
, и работать pwgen -0
. Эти-0 флагов говорят команде избегать цифр
И здесь являются sha1pass + sed комбинация:
sha1pass | sed 's/[[:digit:]]//g' | sed 's/[[:punct:]]//g'
Результат: PoXGAlAWjzMHgmfzHiYHGpemzqE
Другой метод с переменной $RANDOM: echo $RANDOM | tr '0-9' 'a-z'
В целом, если Вашей целью является поколение пароля, я предполагаю, что Вы читаете эту статью:
http://www.howtogeek.com/howto/30184/10-ways-to-generate-a-random-password-from-the-command-line/
Используя python
:
#!/usr/bin/env python2
import random, string
def rand_gen(number_of_words, length):
for i in range(number_of_words):
print ''.join(random.choice(string.ascii_lowercase + string.ascii_uppercase) for _ in range(length))
return
Мы определили функцию rand_gen(number_of_words, length)
, который возьмет два параметра в качестве исходных данных, number_of_words
будет содержать количество случайных слов, которые Вы хотите генерировать, length
будет содержать длину каждого случайного Word
string.ascii_lowercase
и string.ascii_uppercase
, имеют весь нижний регистр ASCII, и uppercse обозначает буквами соответственно
random.choice
, выберет отдельный символ от [A-Za-z]
, каждый раз и length
гарантирует, что это повторение продолжается до length
число. join()
тогда присоединится к символам для перебрасываний парой слов желаемой длины
, Этот процесс будет продолжен до number_of_words
Пример:
rand_gen(5, 3)
PDI
qKQ
Dvu
kwr
wDz
rand_gen(2, 5)
GLKXr
uOaHj