2015-10-12 2 views
0

Мне нужно удалить некоторые правила из iptables, который предоставляется для порта. Я пытаюсь удалить правила, используя номера строк. Таким образом, для порта может быть несколько правил, поэтому там может быть несколько номеров строк. Как я могу достичь этого в одной команде с помощью xargs?Как использовать xargs для удаления правил iptables?

Это то, что я пытался (порт Num 69):

Iptables -L FORWARD --line номер | grep "dpt: 69" | cut -d '' -f1 | xargs iptables -D FORWARD

Это будет работать, если существует только одно правило. Но будет выдавать ошибку «Плохой аргумент» на несколько номеров строк.

ответ

1

По умолчанию xargs будет считать, что команда может принимать несколько входных данных по одной команде. Например, echo file1 file2 file3 | xargs rm может испустить только одну команду rm, чтобы удалить 3 файла, и это будет нормально.

Если команда имеет предел, то вам необходимо сообщить об этом xargs:

xargs -n1 iptables -D FORWARD 

... что означает «предел 1 аргумента в команде». Если вы используете -i, чтобы вставить аргумент где-то конкретным, что это тоже будет работать.

BTW, если вы помещаете это в скрипт, вам также следует рассмотреть вопрос о добавлении --no-run-if-empty, иначе он все равно выполнит команду, даже если grep ничего не найдет.

 Смежные вопросы

  • Нет связанных вопросов^_^