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。














本文转自南非蚂蚁51CTO博客,原文链接: http://blog.51cto.com/ixdba/526428,如需转载请自行联系原作者




相关文章
|
8月前
|
缓存 资源调度 DataWorks
DataWorks操作报错合集之DataWorks节点报错:OSError: [Errno 7] Argument list too long,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
112 1
|
7月前
|
分布式计算 DataWorks 监控
DataWorks操作报错合集之遇到“OSERROR: argument list too long”的错误,该如何处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
72 1
|
7月前
|
Java API
将`List<String>`转换为`List<Long>`
将`List<String>`转换为`List<Long>`
|
8月前
|
Java
Intellij IDEA运行报Command line is too long的解决办法
Intellij IDEA运行报Command line is too long的解决办法
522 1
|
Java
IDEA-解决Command line is too long. Shorten command line for SpringBootMainApplication or also for App
IDEA-解决Command line is too long. Shorten command line for SpringBootMainApplication or also for App
209 0
|
8月前
四种解决”Arg list too long”参数列表过长的办法
这些方法都可以帮助你避免因参数列表过长而导致的错误。选择方法取决于具体情况和需求。
328 0
|
Java
IDEA-解决Command line is too long. Shorten command line for SpringBootMainApplication or also for App
IDEA-解决Command line is too long. Shorten command line for SpringBootMainApplication or also for App
103 0
|
8月前
|
JSON JavaScript 前端开发
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
671 0
|
8月前
|
编译器 C语言
c语言中long的作用类型
c语言中long的作用类型
228 0
|
2月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
40 3