Chinaunix首页 | 论坛 | 博客
  • 博客访问: 599213
  • 博文数量: 248
  • 博客积分: 52
  • 博客等级: 民兵
  • 技术积分: 1028
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-23 12:05
文章分类

全部博文(248)

文章存档

2016年(7)

2013年(241)

分类: LINUX

2013-04-09 04:59:19


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

核心下载地址:

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