Qual é a melhor maneira de obter uma sequência aleatória (ish) de caracteres imprimíveis / alfanuméricos?

1

Eu sei que posso obter caracteres aleatórios (bem, pseudo-aleatórios), sem restrição, de '/dev/random' (ou /dev/urandom ). Mas e se eu precisar desses caracteres para gerar um nome de arquivo? Eu preciso de alguma forma ter um fluxo ou uma seqüência de caracteres imprimíveis, ou alfanuméricos para estar no lado seguro. Qual é a melhor maneira de fazer isso no shell?

(Eu sei que eu poderia teoricamente fazer um tr em caracteres de /dev/random , mas isso não parece ser a coisa certa a se fazer.)

    
por einpoklum 19.04.2013 / 08:53

3 respostas

1

Um ajuste na solução do @ dawud:

dd if=/dev/urandom bs=124 count=1 2>/dev/null | sha256sum | cut -c1-64

você recebe 64 caracteres; e você pode usar /dev/random em sistemas UN * X sem /dev/urandom .

Uma abordagem diferente e mais simples, baseada na sugestão do @ NevinWilliam: faça

date +%s.%N

Nenhum caractere alfabético é um caso especial de alfanumérico ... isso não cobre todo o intervalo de strings possíveis, e é limitado a 9 caracteres, e não é muito aleatório - exceto talvez os últimos 2-4 dígitos ou mais - mas como não estamos fazendo criptografia, isso deve ser bom o suficiente.

    
por 20.04.2013 / 10:05
2

Eu vejo que /usr/bin/jot é capaz de fornecer uma contagem especificada de caracteres aleatórios restritos, que podem ser reconfigurados para uma palavra adequada para um nome de arquivo. Há provavelmente uma maneira mais eloquente de especificar todos os caracteres imprimíveis, mas estou um pouco enferrujado no meu script de shell.

[mini-nevie:~] nevinwilliams% jot -r -c 25 A Z | rs -g
EUCGGSIOIDMPCHXCHIGYXBYWJ
[mini-nevie:~] nevinwilliams% jot -r -c 25 A Z | rs -g
PMKQQZOCYETVIHIMTIQFYTFZK
[mini-nevie:~] nevinwilliams% jot -r -c 25 A Z | rs -g
CXBKEFSIRCOOGUICJPOMZKMSG
[mini-nevie:~] nevinwilliams% jot -r -c 25 A Z | rs -g
MEHSFOSHLKKJRKQLRCXUCBJAD
[mini-nevie:~] nevinwilliams% jot -r -c 25 A Z | rs -g
ZCCGKYIWLBTJUVIHQBCHXCVEU
    
por 20.04.2013 / 00:03
1

$ dd if=/dev/urandom of=/dev/stdout bs=124 count=1 2>/dev/null | sha256sum | awk '{print $1}'

    
por 19.04.2013 / 08:55