Argument list too long 错误解决方法汇总

  这篇文章是回复前几天在论坛一个朋友提出的问题,今天有空,整理了一下,发布出来,供大家参考!
  当Linux下试图传递太多参数给一个系统命令(ls *; cp *; rm *; cat *; etc…)时,就会出现"Argument list too long"错误。本文将提供4种解决方法,按复杂程度由低到高排列。
  方法#1: 手动把命令行参数分成较小的部分
  例1 mv [a-l]* ../directory2 mv [m-z]* ../directory2 这是4种方法里最简单的,但是远非理想的方法。你必须有办法平均分割文件,而且对于文件数目极多的情况,需要输入N遍命令。
  方法#2: 使用find命令
  例2
  
  方法2通过find命令筛选文件列表,把符合要求的文件传递给一系列命令。
  优点是find命令有很强大的筛选功能,而且,也许是最重要的,这个方法只需要1行命令。
  唯一的缺点是, 方法2需要遍历文件,因此耗时较多。
  方法#3: 建立函数
  例3
  #!/bin/bash
  # 设定需要删除的文件夹
  RM_DIR='/data/files'
  cd $RM_DIR
  for I in `ls`
  do
  rm -f $I
  done
  方法#4:重新编译Linux内核
  最后一个方法需要2个字:谨慎,这个方法很高级,因此没有经验的linux用户最好不要尝试。此外,在永久使用前,务必在系统环境中全面测试。
  方法4只需要手动增加内核中分配给命令行参数的页数。打开include/linux/binfmts.h文件,在文件起始附近位置有以下几行:
  /*
  * MAX_ARG_PAGES defines the number of pages allocated for arguments
  * and envelope for the new program. 32 should suffice, this gives
  * a maximum env+arg of 128kB w/4KB pages!
  */
  #define MAX_ARG_PAGES 32
  为了增加分配格命令行参数的内存,只需要赋给MAX_ARG_PAGES一个更大的值,保存,重新编译,安装,重启,搞定
  在我的系统中,我把MAX_ARG_PAGES的值增加到64,就解决了所有问题。在改变这个值后,我还没有遇到任何问题。这是可以理解的,当MAX_ARG_PAGES被改为64,最长的参数行仅占用256KB系统内存 对于现在的硬件标准不算什么。
  方法4的优点很明显,现在你只要像通常一样运行命令。缺点也很明显,如果分配给命令行的内存大于可用的系统内存,可能导致对系统自身的拒绝服务攻击(DoS attack),引起系统崩溃。尤其是对于多用户系统,即使增加很小的内存分配都会有很大影响,因为每个用户都被分配到额外内存。因此一定要充分测试来决定是否你的系统可以使用方法4。 September 4th, 2008 . by hacder 当你Linux下试图传递太多参数给一个系统命令(ls *; cp *; rm *; cat *; etc…)时,就会出现"Argumentlisttoolong"错误,这个是Unix系统一直以来都有的限制。察看这个限制可以通过命令 得到。解决的办法 可以使用xargs。 (注意。上面的0是数字,不是字母o)
  另外,也可以用下面的办法来解决:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值