Короче говоря, printf %100s
напечатает 100 пробелов, а tr " " "="
преобразует эти пробелы в знаки равенства, фактически напечатав 100 знаков равенства.
Разрушение:
printf
— это оболочка, встроенная в -. Обычно она принимает два или более аргумента, первый из которых является «строкой формата», а остальные будут использоваться для заполнения заполнителей в этой строке формата. Как только этот шаблон будет полностью заполнен, он распечатает результат. Если осталось больше аргументов, он начнет сначала, заполнив дополнительные аргументы и распечатав результирующую строку.
Строка формата, используемая для printf
, принимает спецификации формата, которые начинаются с %
и заканчиваются одной буквой, поэтому %d
означает целое число (с использованием десятичной системы счисления, поэтому "d" ), %f
означает число с плавающей запятой -, а %s
означает строку символов. Символы, отличные от букв после %
, являются модификаторами спецификации формата, и, в частности, числа используются для указания требуемой длины поля на выходе. Таким образом, %100s
отформатирует строку так, чтобы она содержала не менее 100 символов, дополнит ее пробелами и сохранит правильное выравнивание (, другими словами, добавит пробелы в начале строки.)
Если передать дополнительный аргумент, он будет использовать его для этого поля %s
, поэтому, например, printf %100s abc
будет печатать 97 пробелов (, чтобы получить общее количество 100, учитывая 3 в "abc" ), за которыми следует фактической строкой "abc". Но если аргумент не указан, то спецификация формата заполняется пустым или нулевым аргументом (, который является пустой строкой для %s
, это будет 0 для %d
и т. д. )То же самое как если бы была передана пустая строка, например printf %100s ''
. Конечным результатом является то, что печатается только заполнение из 100 символов.
Таким образом, если сложить все вместе, printf %100s
будет напечатано 100 пробелов.
Теперь tr
— это инструмент для перевода символов из ввода в вывод. Он принимает два аргумента, SET1 и SET2, каждый из которых является набором символов, а затем переводит первый символ SET1 в первый символ SET2, второй символ SET1 во второй символ SET2 и так далее. tr
считывает ввод из стандартного ввода и записывает его обратно в стандартный вывод (, поэтому он очень полезен в конвейерах, подобных приведенному выше.)tr
всегда переводит все вхождения этого символа в заданную строку.
Например, tr aeiou 12345
будет переводить гласные в нижнем регистре в числа от 1 до 5 в указанном порядке, поэтому слово «queueing» будет переведено, например, в «q52523ng». Вы также можете передать ему диапазоны символов, например tr a-z A-Z
, чтобы превратить любую строчную букву в соответствующую прописную.
Таким образом, tr " " "="
просто переводит пробелы в знаки равенства по всей строке. Первый пробел должен быть заключен в кавычки, чтобы его можно было распознать как аргумент. =
на самом деле не нужно цитировать, но это не повредит. tr " " =
сработало бы так же.
Собрав все вместе, выведите 100 пробелов, затем переведите каждый из них в знаки равенства.
Надеюсь, это объясняет это достаточно подробно, но если вы все еще что-то не понимаете, пожалуйста, оставьте комментарий, и я постараюсь решить эту проблему.
/etc/ssl/certs/ca-certificates.crt
— это длинный текстовый файл с объединенными сертификатами, каждый в формате PEM. Чтобы просмотреть детали каждого из них, вам нужно что-то вроде:
openssl crl2pkcs7 -nocrl -certfile /etc/ssl/certs/ca-certificates.crt | openssl pkcs7 -print_certs -noout
При этом создается временный файл PKCS #7 со всеми сертификатами в файле, а затем печатаются только поля темы и издателя. Если вам нужны все подробности, добавьте -text
ко второй команде.