Объединить два grep в один

Многие люди действительно не понимают GPGME, и, вероятно, не помогает то, что существующая документация в основном представляет собой комментарий кода, написанный в то время.Однако он будет обеспечивать полный или почти полный программный доступ ко всему набору GNU Privacy Guard, а также должен обеспечивать доступ к таким вещам, как libassuan, gpg-agent и различным другим компонентам. Вот почему по умолчанию он также включает реализацию S / MIME, которую почти никто, за исключением нескольких компаний, громко восклицавших в конце 90-х, не использует.

В настоящее время GPGME включает около 500 отдельных функций или больше и определенно охватывает практически все, что вы делаете с GPG в командной строке. Однако он также содержит некоторые пережитки предыдущих вариантов дизайна, которые впоследствии были определены как неправильные. Например, это API с большими фрагментами GTK 2. Очевидно, это нужно прекратить (и это произойдет, когда позволит время). Другая проблема, с которой он сталкивается в наши дни, возможно, самое большое препятствие для принятия состоит в том, что, когда кто-то говорит «API», большинство кодеров не сразу думают о файлах заголовков C, которые нужно скомпилировать с их собственным кодом, чтобы получить доступ к этому; Давайте посмотрим правде в глаза, в наши дни большинство людей думают о чем-то, что является RESTful или, по крайней мере, позволяет им взаимодействовать с данными в формате JSON. GPGME настолько далек от этого, насколько это возможно. Обратите внимание, что хотя должно быть возможно заставить его хорошо работать с JSON, он никогда не может быть RESTful, потому что не могут быть ключи редактирования. Кроме того, управление ключами через Интернет вызывает проблемы.

Есть также много недокументированных функций и аспектов, так что даже люди, работающие с программным обеспечением с момента его создания, все еще могут быть удивлены некоторыми вещами.Как, скажем, формат XML для данных связки ключей, который имел все, кроме формальной схемы (до тех пор, пока это не было создано пару месяцев назад).

С другой стороны, несмотря на все хорошее, что делает Матт, он также делает некоторые довольно шокирующие вещи. Например, независимо от того, используется ли GPGME или нет, у Mutt не должно быть никаких причин для кэширования парольных фраз; в любом случае его следует передать GPG (с gpg-agent или без него). Точно так же он должен учитывать параметры конфигурации в файле ~ / .gnupg / gpg.conf (и других файлах в этом каталоге). Конечно, установка альтернативного идентификатора ключа для разных учетных записей для изменения способа вызова команд или даже возможность указать альтернативные файлы конфигурации или целые каталоги (например, gpg --homedir ~ / .gnupg-work / gpg.conf ). Однако при нынешнем положении дел Mutt тратит время, пытаясь решить проблемы, которые уже решены программой, с которой он взаимодействует, например, парольную фразу или управление ключами, но не дает доступа к обычным функциям GPG, многие из которых отлично подходят для электронной почты. например, использовать групповые строки для нескольких получателей или переопределить выбор ключа для определенных получателей (потому что всегда есть один парень, который постоянно теряет свой секретный ключ или забывает кодовую фразу, и теперь у вас есть 15 открытых ключей с тем же адресом, что и UID, и по умолчанию выбирается первое совпадение, что, скорее всего, неверно). Emacs там немного лучше, но даже он не может найти файл gpg.conf , который обычно автоматически отвечает на вопросы, которые он хочет запрашивать.

Теперь, для чего-то более полезного и косвенно связанного, GPGME поставляется с еще одной изящной маленькой недокументированной штукой, называемой gpgme-tool. Это элементарный интерфейс к GPGME, который будет работать на сокете UNIX (и, конечно, вы можете использовать ncat или что-то еще, чтобы заставить его работать на сетевом порту, если хотите).Хотя это недокументировано, это довольно очевидно, если вы запустите его, немного поработаете с ним и начнете с команды справки. В качестве альтернативы это работает очень хорошо:

echo help | gpgme-tool > gpgme-tool-cheatsheet.txt

Он с радостью выполнит все основные операции (шифрование, дешифрование, подпись, проверка, изменение парольных фраз, генерация ключей, список ключей, список секретных ключей, поиск или выбор определенных ключей и т. . Если вы хотите увидеть «скрытый» формат XML, попробуйте следующее:

echo "KEYLIST --secret-only" | gpgme-tool > secret-key-list.xml

Это не будет экспортировать секретные ключи, просто перечислите их и данные о них. Кроме того, он будет экспортировать с некоторыми отходами формата вывода, которые необходимо будет отфильтровать, прежде чем что-либо действительно распознает его как XML (удалите верхнюю строку, первые два символа каждой последующей строки и% 0A из конца каждой строки ). В любом случае, gpgme-tool может дать лучшее представление о том, на что действительно способен GPGME. Привязки PyME Python для GPGME, например, пытаются автоматически сопоставить функции GPGME (и обычно это удается без проблем); текущий список функций в pyme.core.pygpgme составляет 534. Сравните это с командной строкой: в GPG 1.4.20 есть 322 параметра, а в 2.1.11 - 347 (я пропустил 2.0, поэтому не могу проверить, но он должен быть где-то между этими двумя).

Что касается предыдущего ответа, касающегося сопоставления ключевых команд, это должно определяться исключительно параметрами конфигурации и тем, «разрешает» ли Mutt полный доступ к GPG или нет. В настоящее время я использую Mutt с GPGME, и две упомянутые функции (почтовый ключ и ключи извлечения) в порядке, хотя у Mutt действительно есть проблемы с распознаванием PGP / встроенного содержимого, если он назначил или взял текстовый / простой тип содержимого из где-то.Когда это происходит, тогда да, обычно необходимо переключиться на Emacs или что-то в этом роде. Тем не менее, это, похоже, проблема с тем, как Mutt проверяет, действительно ли контент является просто текстом, или как он иначе проверяет содержимое формата OpenPGP. Хотя мне бы не хотелось ничего лучше, чем просто сказать, что мы все должны вместо этого использовать PGP / MIME (а мы должны это делать), к сожалению, многие люди придерживаются встроенного ПО, потому что хотят (например, пользователи The Bat! В Windows ) или необходимо (например, им нужно отправить зашифрованное электронное письмо с устройства Android).

По сути, похоже, что Mutt полагается исключительно на то, что сообщение состоит из нескольких частей MIME с одной или несколькими частями, содержащими ключ, подписи и / или зашифрованный контент, с которыми он может что-либо делать. Он не будет просто искать в любой простой электронной почте соответствующий контент, но это не вина GPG или GPGME. Решение состоит в том, чтобы либо добавить эти функции в Mutt, либо открыть сообщение в чем-то с такой возможностью (например, Emacs с EPA / EasyPG, который в наши дни должен быть включен по умолчанию), либо передать сообщение прямой команде (или gpgme-tool если хотите, но при пайпинге, как правило, проще сразу перейти к обычной команде).

Что касается GPGME, не у всех он доступен, потому что он всегда должен быть скомпилирован из той же исходной версии, что и установлен в системе. Если вы обновите GPG и не перекомпилируете GPGME, вероятно, возникнут проблемы.С другой стороны, по возможности обычно рекомендуется установка GPG из исходного кода, поэтому при переходе по маршруту GPGME хорошей практикой становится просто запустить эту перекомпиляцию при обновлении GPG, и все должно быть в порядке.

Принимая во внимание, что те люди, которые полагаются исключительно на пакеты, предоставленные их выбранным дистрибутивом, также будут подчиняться всем, что могут беспокоить сопровождающие этих пакетов, и они могут или не всегда могут понимать требования GPG и GPGME, работающих вместе. Например, пакет MacPorts для GPGME настроен на зависимость от GPG 2.0.x, который, в свою очередь, настроен на конфликт с GPG 2.1.x, поэтому большинство людей, устанавливающих 2.1, также не могут установить GPGME, даже если они явно работают вместе. Чтобы заставить GPGME работать в этом сценарии, нужно делать то, что MacPorts не рекомендует (компилировать вещи вне системы управления портами, но в пределах / opt / local ). В некоторых дистрибутивах Linux могут быть похожие проблемы.

Итак, если вы собираетесь использовать только PGP / MIME, не должно возникнуть проблем с использованием интеграции GPGME, и это будет означать, что вам никогда не придется настраивать определенные команды в вашем файле .muttrc . Если вы имеете дело с PGP / in-line, вы столкнетесь с проблемами, но их невозможно избежать с помощью Mutt, поэтому я бы рекомендовал использовать GPGME, если вы все равно можете.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я участвую в разработке API для API, чтобы все разработчики, не работающие на C, могли использовать эту вещь после капитального ремонта. Я также портировал PyME 0.9 с Python 2 на Python 3 (в настоящее время он находится в ветке GPGME , и только версия Python 2 доступна через PyPI и pip).

ОБНОВЛЕНИЕ: этот порт PyME на Python 3 теперь находится в основной ветке GPGME и доступен в PyPI как pyme3.

3
12.04.2019, 04:02
1 ответ

Чтобы получить шестнадцатеричное число в конце строки, начинающейся с Successfully built, я бы, вероятно, использовалsed:

sed -n -E 's/^Successfully built ([[:xdigit:]]+)$/\1/p'

Это заменяет совпадающую строку хешем и печатает ее (и никакую другую строку ).

илиawk:

awk '/^Successfully built [[:xdigit:]]+$/ { print $NF }'

Это печатает последнее разделенное пробелом -поле каждой строки, соответствующей регулярному выражению.

В обоих регулярных выражениях выражение [[:xdigit:]]+будет соответствовать не -пустой строке шестнадцатеричных цифр.

7
27.01.2020, 21:07

Теги

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