Так и должно быть
sudo rpm --import linux_signing_key.pub
Обратите внимание на эти два тире.
Вот достаточно близкий способ сделать то, что вы просите. iptables
имеет опцию-C/--check
:
-C, --check chain rule-specification
Check whether a rule matching the specification does exist in the selected chain. This command uses the same logic as -D to find a matching entry, but does not alter the existing iptables configuration and uses its exit code to indicate success or failure.
Итак, если, например, у вас есть какой-то автоматический скрипт, пытающийся сделать что-то подобное:
iptables -I FORWARD -s 10.0.3.0/24 -d 10.0.4.0/24 -j ACCEPT
и вы не хотите нарушать свои правила, вы можете сделать это вместо этого:
iptables -C FORWARD -s 10.0.3.0/24 -d 10.0.4.0/24 -j ACCEPT || \
iptables -I FORWARD -s 10.0.3.0/24 -d 10.0.4.0/24 -j ACCEPT
, который проверит, существует ли правило. Если он возвращает true, ничего не происходит, если он возвращает false, оболочка выполнит второе правило iptables
. Если бы это всегда делалось так, вы идемпотентно получаете один и только один раз это правило (, но см. позже о порядке ). Вы могли бы использовать -A
, но -I
, скорее всего, поможет.
Если положение правила имеет значение, но вы не знаете точно, где оно сейчас находится из-за других изменений, для выполнения этой операции следует использовать заданную пользователем цепочку. Таким образом, правило всегда будет вызываться в месте перехода :
.iptables -N mychain
iptables -A FORWARD -m comment --comment first_rule
iptables -A FORWARD -m comment --comment initially_second -j mychain
iptables -C mychain -s 10.0.3.0/24 -d 10.0.4.0/24 -j ACCEPT || \
iptables -A mychain -s 10.0.3.0/24 -d 10.0.4.0/24 -j ACCEPT
Таким образом, если раньше было вставлено исключение:
iptables -I FORWARD 2 -s 10.0.3.10 -d 10.0.4.20 -m comment --comment now_second -j DROP
ваш скрипт не будет повторно вставлять правило перед этим исключением и отменит его.