我要检查,如果一个iptables规则存在(如看到这里),但我得到了以下错误:
$ 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
Run Code Online (Sandbox Code Playgroud)
也许我必须逃脱一些角色?
grep“ -A OUTPUT -p tcp --tcp-flags RST RST -j DROP”
使用许多Shell工具,某些参数可能会错误地解释为标志。根据您的grep版本,以下内容将帮助grep理解“标志”并不是真正的标志,而是您要搜索的表达式的一部分。
例如,考虑:
$ echo "-Afoo" | grep "-Afoo"
grep: Invalid argument
Run Code Online (Sandbox Code Playgroud)
使用特殊--标志指示没有标志跟随。
grep -- "-A OUTPUT -p tcp --tcp-flags RST RST -j DROP"
Run Code Online (Sandbox Code Playgroud)使用该-e标志可显式标识引号后面的文本,以作为要搜索的表达式。
grep -e "-A OUTPUT -p tcp --tcp-flags RST RST -j DROP"
Run Code Online (Sandbox Code Playgroud)这对我来说对BSD grep都有效。考虑以下示例:
$ echo "-Afoo" | grep -- "-Afoo"
-Afoo
$ echo "-Afoo" | grep -e "-Afoo"
-Afoo
Run Code Online (Sandbox Code Playgroud)
尽管示例确实是人为设计的,但它们可以更清楚地说明问题(和解决方案),即使在没有iptables用作输入文本的系统上,也可以轻松对其进行测试。