Включите extglob
опция оболочки и затем cd /home/!(user*)/asdf
Это ваша локаль и TR проблема.
В настоящее время GNU TR полностью поддерживает только однобайтовые символы. Таким образом, в локах с использованием многобайтовых кодировков вывод может быть странным:
$ </dev/urandom LC_ALL=vi_VN.tcvn tr -dc '[:print:]' | head -c 64
`�pv���Z����c�ox"�O���%�YR��F�>��췔��ovȪ������^,<H ���>
Оболочка будет правильно печатать многобайтовые символы, но GNU TR
удалит байты, которые он думает, что не является печати.
Если вы хотите, чтобы это было стабильным, вы должны установить локаль:
$ </dev/urandom LC_ALL=C tr -dc '[:print:]' | head -c 64
RSmuiFH+537z+iY4ySz`{Pv6mJg::RB;/-2^{QnKkImpGuMSq92D(6N8QF?Y9Co@
Другие люди уже указали, что локаль определяет, что [: Печать:]
означает. Однако не все печатные символы подходят для паролей (даже в ASCII). Вы действительно не хотите пробелы, вкладки и # $% ^? В вашем пароле - это не просто трудно запомнить, также потенциально опасно для базовой системы аутентификации, может быть невозможно войти в поле ввода и так далее. В этом случае вы должны просто выбирать символы «Sane»:
LC_ALL=C </dev/urandom tr -dc '[:alnum:]_' | head -c 64
или просто
</dev/urandom tr -dc 'A-Za-z0-9_' | head -c 64
или даже лучше, используйте base64
, как предложено в других ответах.
Как насчет
tr -dc [:print:] < /dev/urandom | head -c 64 | strings
строк следует распечатать вывод увала в формате печати
Я не знаю, есть ли какие-либо причина, по которой вы используете / dev / Random
для генерации пароля, но я бы порекомендовал вам использовать Pwgen, чтобы облегчить вашу боль.
$ pwgen -s 10 1
Где 10 - длина пароля.
Рассмотрим вместо этого
$ dd if=/dev/urandom bs=48 count=1 status=none | base64
imW/X60Sk9TQzl+mdS5PL7sfMy9k/qFBWWkzZjbYJttREsYpzIguWr/uRIhyisR7
Это имеет два преимущества:
Вы читаете только 48 байт со случайного устройства, а не ~8KB; если другим процессам на том же самом хосте нужны случайные числа, то 8KB дренированные все сразу могут стать серьезной проблемой. (Да, возможно, никто не должен использовать случайное устройство , блокирующее , но люди делают .)
Выход base64
практически не содержит символов со специальными значениями. (Совсем ни за что, прикрепите | tr +/ -_
к концу и (как в примере) убедитесь, что количество байтов входа к base64
кратно 3. )
Сгенерированный таким образом пароль имеет ровно 384 бита энтропии, что несколько меньше, чем то, что вы делали (log2 9664 ≈ 421. 4), но более чем достаточно для большинства целей (256 бит энтропии безопасно находится на территории "все еще гадающих, когда Солнце выгорает" , за исключением для ключей RSA, AFAIK).
#Chars allowed in password (I don't like l,o,O, etc):
P="0123456789ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz"
#Or such:
#P="a-zA-Z0-9"
head -c 8 < /dev/urandom | tr '\000-\377' "$P$P$P$P$P"
echo
Этот метод ИМХО более разумен при использовании данных из /dev/urandom. Строка, вставляемая как $P$P$P..., должна иметь длину не менее 256 символов.