Como usar / dev / (u) random

32

Como posso usar /dev/(u)randomno Ubuntu ou em qualquer sistema * nix?

Eu tentei isso, mas diz permissão negada.
Nota: Eu também tentei como root.

/dev/(u)random
sudo /dev/(u)random
sudo -s; /dev/(u)random
Caner Korkmaz
fonte
2
Observe que esses comandos devem ser usados ​​apenas quando você realmente precisar de dados aleatórios de alta qualidade, geralmente para criar boas senhas. Caso contrário, existem mais alternativas leves, por exemplo, o ambiente do shell 'variável' RANDOMpara criar números inteiros positivos aleatórios: echo $RANDOMe o programa shufpara gerar permutações aleatórias, por exemplo, reproduzir em ordem aleatória a partir de uma lista de reprodução.
sudodus

Respostas:

54

É um arquivo como dispositivo, para que você possa fazer coisas como copiá-lo ou copiá-lo. Por exemplo:

dd if=/dev/urandom of=~/urandom_test count=4 bs=1024

Cria um arquivo que contém 4K de bytes aleatórios.

cat /dev/urandom > ~/urandom_test2 

Continuará a escrever bytes aleatórios nesse arquivo até você pressionar Ctrl-C. Não faça isso em um sistema de baixo desempenho ...

head -30 /dev/urandom > ~/urandom_test3

Escreve 30 linhas de bytes aleatórios

aychedee
fonte
1
Sinta-se livre para votar em seguida!
aychedee
5
Eu faria se meu representante> 15
Caner Korkmaz
1
Nota: Não faça cat / dev / urandom> ~ / urandom_test2 em sistemas de baixo desempenho -> que congela o sistema
Caner Korkmaz
1
Bem ... isso realmente depende da sua definição de linha. Minha definição é bytes terminated by a \n. O que é seu? head -30 /dev/urandomlhe dará 30 linhas de bytes aleatórios. O comprimento dessas linhas certamente será aleatório. Tente executar wc -lo arquivo de saída se não estiver convencido.
aychedee
3
Observe que /dev/urandomé limitado a 32 MiB por read()e ddnão tentará ler mais uma vez que /dev/urandomproduz esses 32 MiB, portanto, você deve ligar ddcom iflag=fullblock. Veja dd está produzindo um arquivo aleatório de 32 MB em vez de 1 GB
Sergiy Kolodyazhnyy
14

Obter bytes aleatórios

Se você precisar de um certo número de bytes aleatórios, leia esse número de bytes em /dev/urandom.
É um "arquivo especial" criado para ser como um arquivo para leitura de números aleatórios.

Usar catpara ler /dev/urandomé uma péssima idéia, porque tentará ler /dev/urandomaté o fim - mas não termina.

Você pode usar head. Mas lembre-se de ler por byte, não por linha - porque as linhas seriam aleatoriamente separadas por bytes de nova linha aleatórios.

Portanto, para ler 30 bytes aleatórios em um arquivo random.bytes, use:

head -c 30 /dev/urandom > random.bytes

Você pode ler como um usuário normal.

Deixe em paz / dev / random

Normalmente, você deseja usar /dev/urandom, não /dev/random.

O problema é que /dev/randomé difícil de usar da maneira certa - e fácil de usar da maneira errada. Usá-lo errado funciona no começo, mas cria problemas de desempenho estranhos - mesmo aleatórios - depois. As vezes.

Quando você usa /dev/urandom, ele faz uso /dev/randominterno, cuidando das partes complicadas.

Volker Siegel
fonte
4

Se você quiser apenas ler com números reconhecidos, pode fazer

od -d /dev/random
Seraf
fonte
0

Eu pessoalmente uso isso para gerar tokens:

dd if=/dev/urandom  count=1 bs=128 | sha512sum
Farsheed
fonte