操作系统: dc50 sp2
问题描述:
ftp服务器,下载文件执行mget *.bz2提示如下信息:200 type set to i
在服务器本机下载目录下执行ls -l *.bz2
显示:
bash:/bin/ls:参数列表过长 000
执行ls -l |wc
显示:
134879 1213904 14899859
从执行的命令可以看出,该目录下文件数超过10万,文件名也比较长。
问题的根源在于,内核会为每个进程的参数分配固定大小的空间,如果该进程启动时附带的参数超过了这个空间大小,就会出现这个错误。即在执行ls -l *.bz2时,虽然使用通配符看似只有一个参数,但bash会把*展开,把包含的所有文件列出,这样就导致参数列表过长,超出了内核分配的空间,因此报错。
如果命令是在本地执行,可以通过脚本换一种方式达到同样的效果,比如ls >/dev/null|xargs ls -l
但此例中,用户实际需求是通过客户端在ftp服务器上下载大量文件,在不能修改客户端的情况下,只能修改核心增大这个空间。默认情况下,这个空间的大小是0.1m。以10个字节的文件为例,在当前目录下(即列出文件时不包含绝对路径),最大可以列出的文件数为1.6万个。修改后的核心将此空间大小增大到8位,以10个字节的文件为例,在当前目录下(即列出文件时不包含绝对路径),最大可以列出的文件数为9万个。如果文件名更长,则文件数会相应减少。
核心下载地址:
阅读(3921) | 评论(1) | 转发(1) |