Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1735811
  • 博文数量: 220
  • 博客积分: 8531
  • 博客等级: 中将
  • 技术积分: 4971
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-18 13:33
文章分类

全部博文(220)

文章存档

2017年(1)

2015年(1)

2014年(5)

2013年(6)

2012年(6)

2011年(30)

2010年(37)

2009年(53)

2008年(41)

2007年(40)

分类: LINUX

2008-12-11 11:52:53


操作系统: 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万个。如果文件名更长,则文件数会相应减少。

核心下载地址:

阅读(3184) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2008-12-26 23:53:23

但实际上在想验证lftp时却发现FTP下载文件时根本没有这个限制啊。