Here's one that creates base64 strings, note that even though they are limited to base64 strings, the padding is removed from them, so you can't decode them, you probably won't need it anyway.
cat /dev/urandom | base64 | head -c 5
Replace 5 with the number of chars you'd like.
If you however need to decode them for some reason, move base64 to the end of the pipe. It will then collect 5 chars from urandom and base64 encode it with the right padding, but the final string may be longer than what you wanted due to padding.
(If you want literal dash characters, the dash character must go at the end of the string as done above, as opposed to
*-_
).And to explain what gets done due to the above set of commands:
head -c 500 /dev/urandom
: Obtain the first 500 characters (bytes) from/dev/urandom
.tr -dc 'a-zA-Z0-9~!@#$%^&*_-'
: Remove all but the characters specified in'a-zA-Z0-9~!@#$%^&*_-'
from the output of the first command.fold -w 3
: Format the output of the second command such that it has 3 characters per line.head -n 1
: Display the first line of the result of the third command onstdout
.if
specifies the input file,bs
the block size (3 bytes), andcount
the number of blocks (1 * 3 = 3 total bytes)Please check
man od
.You can use, for example
od -vAn -N4 -tu4 < /dev/urandom
to generate unsigned decimal 4 bytes random numbers.
Here's one that creates base64 strings, note that even though they are limited to base64 strings, the padding is removed from them, so you can't decode them, you probably won't need it anyway.
Replace
5
with the number of chars you'd like.If you however need to decode them for some reason, move
base64
to the end of the pipe. It will then collect 5 chars from urandom and base64 encode it with the right padding, but the final string may be longer than what you wanted due to padding.The easiest solution would be as simple as:
Try this:
dd if=/dev/urandom bs=1 count=3
If you want to put the result in $variable:
Do note that it'll probably not be printable.