2

我有一个用 fwbuilder 生成的直接 bash 脚本,它嵌套了几个 echo 语句并将它们通过管道传递到 iptables-restore。我们以这种方式编译,而不是仅仅有多个“iptables -A xxx”行,因为它编译和部署速度更快,而且它也不会丢弃现有的连接。

问题是我们似乎已经达到了允许多次重定向的限制(~23'850 行不起作用,~23'600 行起作用)。在内核 2.6.18 (CentOS 5.x) 上运行它,它会崩溃,在 2.6.32 (6.x) 上运行它,它就像一个魅力。

脚本基本上看起来像这样,只有一条长线通过管道传输到命令:

(回声“1”;回声“2”;回声“3”;...;回声“25000”)| /做任何事情

所以我想问题是,有没有一种简单的方法可以在不重新编译内核的情况下增加这个限制?我想这是管道的某种标准输入字符限制。还是我必须进行操作系统升级?

编辑:哦,还想补充一点,在旧内核上运行时,不会显示任何错误,但 dmesg 中会显示段错误。

4

2 回答 2

1

您没有在 2.6.32 上观察到问题并在 2.6.18 上观察到问题的原因是从内核 2.6.23 开始,ARG_MAX限制已被删除。 是更改的提交。

为了找到一些绕过限制的方法,请参阅ARG_MAX

于 2013-07-16T13:11:50.977 回答
0

您可以使用 here-doc 代替吗?

cat <<EOF | /do/anything
1
2
3
...
25000
EOF
于 2013-07-16T13:02:05.597 回答