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
Слово «buck», «утка» или «хорошая старая удача». В основном все, что содержится в словаре. Длины были бы любыми, но если бы мы ограничили ограничение на 5 букв, я бы не прочь узнать, как это сделать?
Что это за слово? Предполагаю, вы имеете в виду только a-z и A-Z, но какие длины? Может ли быть лиглайшвальбалишфвгапивфлахф слово? Как насчет ksjdas-asd-asd-asd? - может быть в словах. Пожалуйста, отредактируйте и уточните. - Тердон вчера
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'
Чтобы генерировать случайную буквенную строчную строку (включая пробелы) 2MB:
< /dev/urandom tr -dc 'a-z ' | head -c 2000000 > a.log
Для постоянного потока:
< /dev/urandom tr -dc 'a-z '
Чтобы создать случайный алфавитный смешанный -case string (включая пробелы) 2MB:
< /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/
Как показано в комментариях к комментариям, вы также можете установить pwgen, с sudo apt-get install pwgen и запустить pwgen -0. Флаг -0 сообщает команде избегать цифр
И вот sha1pass + sed combo:
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-пути-к-генерировать-а-случайный-пароль-из-командной строки /
Используя 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 будет содержать количество случайных слов, которые вы хотите сгенерировать, [ f6] будет содержать длину каждого случайного слова string.ascii_lowercase и string.ascii_uppercase, все буквы ASCII и верхние буквы соответственно 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