;
разделяет утверждения (грубо говоря). (Почти) всегда можно заменить ;
новой строкой.
Сказать, что ;
разделяет две программы, поэтому , если
и , то
должны быть «программами», слишком упрощенно, поскольку утверждение может быть сделано из зарезервированные слова, функции оболочки, встроенные утилиты и внешние утилиты, а также их комбинации с использованием каналов, логических операторов и т. д. и т. д.
Оба if
и , то
являются зарезервированными словами в грамматика оболочки , а не «программы». Здесь они используются для создания того, что технически называется составной командой .
echo
, вероятно, является встроенной утилитой в оболочке (но не обязательно), а ls
, вероятно, является внешней утилитой (или «программой», как вы говорите).
Сначала попытайтесь понять, что делает netfilter и каков путь пакета в пространстве ядра.(http://inai.de/images/nf-packet-flow.svg)И читайте документы из оригиналаhttp://netfilter.org/;ваше связанное руководство по iptables очень низкого качества.