Es parece que el strings
ahora respeta la configuración regional en el medio ambiente En particular
LC_CTYPE
Esta variable determina la categoría de localización para el manejo de caracteres como tolower(), toupper() e isalpha(). Esta variable de entorno determina la interpretación de secuencias de bytes de datos de texto como caracteres (por ejemplo, caracteres de un solo byte en lugar de caracteres multibyte), la clasificación de los caracteres (por ejemplo, alfa, dígito, gráfico) y el comportamiento de las clases de caracteres. La semántica adicional de esta variable, si la hay, depende depende de la implementación.
Configurar LC_CTYPE
a C
restablece el comportamiento anterior:
% cat /dev/urandom | LC_CTYPE=C strings -n 16
X! \*H=:e9c1`nzWk
$Hr/Q9q_b:BE-tS,[
/]59=+fPU"x-B9kk
:"*J9{5Q-tFpL=Xm$>
...
Un enfoque alternativo (tomado de Shell script /dev/urandom en Stack Overflow con pequeñas modificaciones) es filtrar los caracteres no imprimibles con el tr
y tomar los primeros 16 caracteres con dd
:
% cat /dev/urandom | LC_CTYPE=C tr -dc '[:print:]' | dd bs=16 count=1 2> /dev/null
Esto es mucho más rápido porque no espera 16 consecutivos caracteres imprimibles de la fuente aleatoria.