dd if=/dev/urandom of=a.log bs=1M count=2
Question: si ce code ^ me donne des nombres aléatoires, comment puis-je obtenir des non-mots aléatoires (inintelligibles) tels que "hgcqw".
Question 2: La commande shuf peut-elle être utilisée conjointement avec la commande dd?
Merci!
6/21 Mise à jour. (Fête des pères)
@ Serg Mon objectif était d'obtenir des chiffres au début. Disons, des nombres aléatoires de deux chiffres de 01 à 100. Donne la commande et lance le code. Finalement, cela me donnera 14, 17, 21, 35 (je compose les nombres aléatoires que je reçois). Ensuite, je voulais obtenir une moyenne de ces chiffres. Dans ce cas, la moyenne serait de 21,75 (22). L'objectif serait d'arrêter la boucle jusqu'à ce qu'il trouve une moyenne spécifique que je cherchais. Dans ce cas, il serait de 25. Mon deuxième objectif était d'obtenir des mots aléatoires, puis de compter le nombre de mots utilisés.
@ terdon
Un mot est "buck", "canard" ou "bonne vieille chance". Fondamentalement, tout ce qui est trouvé dans le dictionnaire. Les longueurs seraient encore si nous devions limiter la limite à 5 lettres, cela ne me dérangerait pas d'apprendre comment?
C'est quoi un mot? Je suppose que vous voulez dire seulement a-z et a-z mais quelles longueurs? Liwyduglashvdbalishfvgapivflakhf serait-il un mot? Que diriez-vous de ksjdas-asd-asd-asd? - peut être en mots. Veuillez éditer et clarifier. - terdon hier
Générez un caractère alphabétique aléatoire.
tr -cd '[:alpha:]' < /dev/urandom | fold -w1 | head -n1
Générez une chaîne alphabétique aléatoire de 10 caractères.
tr -cd '[:alpha:]' < /dev/urandom | fold -w10 | head -n1
Certaines des classes de caractères POSIX alternatives à utiliser à la place de alpha
dans [:alpha:]
sont les suivantes: alnum - caractères alphanumériques
caractères alphabétiques
digit - digits
graph - caractères visibles
minuscule - minuscule
majuscule - caractères majuscules
Générez des nombres aléatoires dans une plage spécifique (exemple 1-10).
shuf -i 1-10 -n1
Comparée aux deux premiers exemples bash, la commande shuf
offre moins d'options pour générer des chaînes aléatoires, bien que shuf
puisse être utilisée pour générer des permutations aléatoires.
dd if=/dev/urandom of=a.log bs=1M count=2
Cela ne vous donne pas des nombres aléatoires. Cela vous donne au hasard octets. Vous pouvez l'encoder en nombres:
hexdump -v -e '"%d\n"' /dev/urandom | dd of=a.log bs=1M count=2
(La version antérieure utilisait od
, mais le format de sortie de od
est plutôt inflexible.)
Utiliser directement /dev/random
pourrait être une perte de temps puisqu'il s'agit d'un flux d'octets. Vous pouvez le coder en base64
, puis supprimer les caractères non alphabétiques, ce qui devrait vous permettre d'obtenir, en moyenne, 80% des données en entrée:
base64 /dev/urandom | tr -cd '[[:alpha:][:space:]]'
Cela tend à laisser des lignes plutôt longues. Vous pouvez, au lieu de cela, remplacer les nombres par des nouvelles lignes:
base64 /dev/urandom | sed 's/[^[:alpha:]]\+/\n/g'
Pour générer une chaîne alphabétique minuscule aléatoire (espaces compris) de 2 Mo:
< /dev/urandom tr -dc 'a-z ' | head -c 2000000 > a.log
Pour un flux constant:
< /dev/urandom tr -dc 'a-z '
Pour générer une chaîne alphabétique mixte à casse aléatoire (espaces compris) de 2 Mo:
< /dev/urandom tr -dc 'A-Za-z ' | head -c 2000000 > a.log
Pour un flux constant:
< /dev/urandom tr -dc 'A-Za-z '
Une autre version (-c${1:-10}
= longueur de 10):
< /dev/urandom tr -dc A-Za-z | head -c${1:-10} > out
ou (head -n 10
= longueur de 10)
strings /dev/urandom | grep -o '[[:alpha:]]' | head -n 10 | tr -d '\n' > out
ou avec dd
(count=10
= longueur de 10)
dd if=/dev/urandom bs=1 count=10 2>/dev/null | base64 | grep -o '[[:alpha:]]' | head -n 30 | tr -d '\n' > out
ou ca
openssl Rand -base64 32| grep -o '[[:alpha:]]' | head -n 10 | tr -d '\n' > out
ou ca
date +%s | sha256sum | base64 | grep -o '[[:alpha:]]'| head -n 10 | tr -d '\n' > out
Voici mon idée. mkpasswd
est souvent utilisé pour générer des mots de passe cryptés. Par conséquent, les chaînes qui y figurent ne devraient pas déjà être intelligibles. Le petit problème est qu'il génère des chaînes avec des nombres. En utilisant sed, nous pouvons nous en débarrasser.
mkpasswd | sed 's/[0-9]/YOLO/g'
YOLO peut être ce que vous voulez remplacer par des chiffres. Vous pouvez aussi simplement les supprimer:
mkpasswd | sed 's/[0-9]//g'
Voici un autre moyen:
$ date | md5pass | sed 's/[0-9]//g'
$$NG.dLw$vcpGCylnDtmptDtogDr/
Comme suggéré dans les commentaires ci-dessous, vous pouvez également installer pwgen
avec Sudo apt-get install pwgen
et exécuter pwgen -0
. L'indicateur -0 indique à la commande d'éviter les chiffres
Et voici sha1pass + sed combo:
sha1pass | sed 's/[[:digit:]]//g' | sed 's/[[:punct:]]//g'
Résultat: PoXGAlAWjzMHgmfzHiYHGpemzqE
Une autre méthode avec la variable $ RANDOM: echo $RANDOM | tr '0-9' 'a-z'
Globalement, si votre objectif est de générer un mot de passe, je vous suggère de lire cet article:
http://www.howtogeek.com/howto/30184/10-ways-to-generate-a-random-password-from-the-command-line/
Utiliser 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
Nous avons défini une fonction Rand_gen(number_of_words, length)
qui prendra deux paramètres en entrée, number_of_words
contiendra le nombre de mots aléatoires que vous souhaitez générer, length
contiendra la longueur de chaque mot aléatoire.
string.ascii_lowercase
et string.ascii_uppercase
ont respectivement toutes les ASCII lettres minuscules et majuscules
random.choice
choisira un seul caractère parmi [A-Za-z]
à chaque fois et length
s'assurera que cette itération continue jusqu'au nombre length
. join()
joindra ensuite les personnages pour obtenir un mot de la longueur souhaitée
Ce processus sera poursuivi jusqu'à number_of_words
Exemple:
Rand_gen(5, 3)
PDI
qKQ
Dvu
kwr
wDz
Rand_gen(2, 5)
GLKXr
uOaHj