我想检查是否存在iptables规则(如here所示),但是我收到以下错误:
$ sudo iptables-save | grep "-A OUTPUT -p tcp --tcp-flags RST RST -j DROP"
grep: OUTPUT -p tcp --tcp-flags RST RST -j DROP: invalid context length argument
也许我不得不逃避一些角色?
答案 0 :(得分:6)
grep" -A OUTPUT -p tcp --tcp-flags RST RST -j DROP"
使用许多shell工具,一些参数可能被错误地解释为标志。根据您的grep版本,以下内容将帮助grep了解"标记"不是真正的标志,但它们是你正在寻找的表达方式的一部分。
例如,考虑:
$ echo "-Afoo" | grep "-Afoo"
grep: Invalid argument
使用特殊--
标志表示后面没有标记。
grep -- "-A OUTPUT -p tcp --tcp-flags RST RST -j DROP"
使用-e
标志明确标识随后作为要搜索的表达式的引用文本。
grep -e "-A OUTPUT -p tcp --tcp-flags RST RST -j DROP"
这适用于我使用BSD grep的方式。请考虑以下示例:
$ echo "-Afoo" | grep -- "-Afoo"
-Afoo
$ echo "-Afoo" | grep -e "-Afoo"
-Afoo
虽然这些例子很受欢迎,但它们更清楚地说明了问题(和解决方案),甚至可以在没有iptables用作输入文本的系统上轻松测试。