Операторы ИЛИ и И следуют булевой логике.
Для примитивов A = -name '*.c'
, B = -name '*.cpp'
, C = -print
имеем следующие уравнения
Ваш первый пример:(A+B ).C
Ваш второй пример:(A.C. )+ (B.C.)
Они имеют прямую математическую эквивалентность, т.е. они одинаковы. Но первый короче и лаконичнее.
Путь и исполняемый файл в конфигурации модуля systemd не соответствуют тому, что указано в файле sudoers.d.
В файле sudoers.d
упоминается/usr/local/bin/protonvpn
(обратите внимание на local
и отсутствие расширения -cli
после protonvpn
), что кажется мне правильным, поскольку это то, что ProtonVPN.com указывает в инструкциях, которые вы указали в своем вопрос, а что у меня на родной машине. (Я не могу проверить вашу первую ссылку, она не работает ).
С другой стороны, в описании модуля systemd указано/usr/bin/protonvpn-cli
(не local
, а расширение -cli
):
ExecStart=/usr/bin/protonvpn-cli last-connect
ExecReload=/usr/bin/protonvpn-cli disconnect && /usr/bin/protonvpn-cli last-connect
ExecStop=/usr/bin/protonvpn-cli disconnect*
Что побудило меня посмотреть в этом направлении, так это ваш журнал :systemd, похоже, не может запустить запрошенную программу в ExecStart:
Failed at step EXEC spawning /usr/bin/protonvpn-cli
, а потом сразу выходит ошибка.
Вы должны проверить правильный путь и исполняемый файл на вашем компьютере, выполнив команды which protonvpn
и which protonvpn-cli
. Для меня только первый возвращает путь, и это /usr/local/bin/
.
Обновите конфигурацию модуля sudoers.d и systemd, указав правильный файл и путь, указанные на предыдущем шаге.
Дополнительное примечание
Я бы порекомендовал быть более конкретным в вашем файле sudoers.d. На данный момент привилегий пользователя достаточно, чтобы полностью контролировать вашу VPN (, включая ее отключение или отключение выключателя ). Лучше всего предоставить доступ без пароля -только к определенным командам protonvpn connect
и protonvpn reconnect
.Вот как будет выглядеть строка (при условии, что /usr/local/bin/protonvpn — правильный путь):
teuton ALL = (root) NOPASSWD: /usr/local/bin/protonvpn connect,/usr/local/bin/protonvpn reconnect
Затем в конфигурации модуля systemd:
ExecReload=
на /usr/local/bin/protonvpn reconnect
, что, по сути, делает то же самое с тем преимуществом, что не нужно разрешать команду disconnect
. ExecStop=/usr/bin/protonvpn-cli disconnect
. Это не нужно (при выключении ваш VPN все равно отключится, как это происходит на моей машине без этой строки ). Теперь вам больше не нужна команда разъединения в вашем файле sudoers.d, и вы только что повысили безопасность своей машины!
;-)