Можно ли применить подстановку к нескольким аргументам в команде?

Вы можете получить случайные байты криптографического -качества из /dev/urandom. (Он существует с Solaris 9. Он также существует в Linux. )Сюда входят непечатаемые символы, поэтому их необходимо удалить. Следующая команда извлекает 10 случайных печатных символов ASCII без пробела -.

Я не рекомендую использовать в паролях специальные символы. Они не делают пароли более безопасными. Что делает пароль безопасным, так это его энтропия. Пароль из 10 -символов имеет 10×log 2(94 )≈ 65,5 бит энтропии. Вы можете получить такое же количество энтропии из 9 произвольных байтов и закодировать их как хотите, например, как шестнадцатеричное.

Или как Base64, что короче.

Если есть какое-то жесткое ограничение, что «пароли должны содержать хотя бы один специальный символ» (, что является сомнительным способом сделать пароли , выбираемые обычными людьми более безопасными, и совершенно неверно для случайно генерируемых passwords ), то вы не можете просто использовать случайный пароль, потому что есть шанс, что он не будет содержать ни одного символа в требуемом классе. Если вы отклоняете пароли, которые не соответствуют ограничениям, вы снижаете безопасность пароля. Вместо этого сделайте пароль длиннее, например.

Если вам нужно, чтобы пароль запоминался, это другая проблема. Лучше всего запоминаются пароли кодовые фразы .

0
27.02.2020, 06:49
2 ответа

Конечно. Вы могли бы попробовать это сами за меньшее время, чем потребовалось, чтобы задать вопрос.

Оболочка Unix, такая как bash, расширяет подстановочные знаки перед вызовом программы. Сама программа не видит версию аргументов до расширения -.

Таким образом, в вашем примере fooбудет вызываться с несколькими аргументами, первые будут расширением *.txt, а последнее будет расширением *.dat.

Обычно расширением *.txtбудет список имен файлов из текущего каталога, оканчивающихся на .txt. Если их нет, то расширение *.txtесть просто неизменное *.txt. Это можно изменить кнопками shopt -s nullglobи set -f

.
4
28.04.2021, 23:22

Развертывание глобуса в массив может быть полезным. Это вызовет fooдля каждой пары:

shopt -s nullglob

txts=(*.txt)
dats=(*.dat)

for txt in "${txts[@]}"; do
    for dat in "${dats[@]}"; do
        foo "$txt" "$dat"
    done
done
1
28.04.2021, 23:22

Теги

Похожие вопросы