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

news/2024/7/20 11:03:34 标签: list, linux内核, linux, 测试, unix, dos

这篇文章是回复前几天在论坛一个朋友提出的问题,今天有空,整理了一下,发布出来,供大家参考!

当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。

 

 

 

关于Linux下提示 “Argument list too long

September 4th, 2008 . by hacder

当你Linux下试图传递太多参数给一个系统命令(ls *; cp *; rm *; cat *; etc…)时,就会出现”Argument list too long”错误,这个是Unix系统一直以来都有的限制。察看这个限制可以通过命令

  1.  getconf ARG_MAX

得到。解决的办法 可以使用xargs。

  1. find . -print0 | xargs -0 chown nobody:nobody
  2. find . -print0 | xargs -0 rm

(注意。上面的0是数字,不是字母o)

另外,也可以用下面的办法来解决:

  1.  find $directory -type f -name ‘*’ -exec mv {} $directory2/. /;

http://www.niftyadmin.cn/n/808248.html

相关文章

Javascript+DOM编程艺术——学习笔记

一.语法:(语法的广义含义包括语句、单词、标点符号等各个方面,它的狭义含义则特指语句结构方面的各项规则.) 1.语句:用Javascript或任何一种其他程序设计语言编写出来的脚本都是由一系列指令构成的,这些指令…

Cocos Creator 3D 正式开放公测,赶紧上车!

大家好,转眼距离上一篇公测版本发布的帖子已经过去两个月,Cocos Creator 3D 终于要正式面向所有开发者开放了!如果你已经迫不及待想要尝试,请直接拉到文章末尾,你会找到所有你需要的内容。我想首先感谢所有参与公测的开…

狂热「小工」的9款Creator游戏源码及图文教程,等你来拿!

公众号有幸邀请到「小工」,Cocos论坛ID:「№蒲公英」他在 Cocos 论坛上公开了自己9款小游戏作品,完成度相当之高,是不可多得的Creator学习资源,下面是论坛链接地址:https://forum.cocos.com/t/cocoscreator…

Cells(Rows.Count, 1).End(xlUp).Row的含义

在看一本书的时候没搞明白例子上写的一句话,如上。经调试才搞明白。分享给大家。NextRow ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 1这句话的意思是 取活动单元表的第一列最后一个有值的行的下一行行号。Rows.Count是指当前活动工作表的行数,为…

教你完全理解IO流里的 read(),read(byte[]),read(byte[],int off,int len)以及write

好的我们先来讲它们的作用,然后再用代码来实现给大家看 read(): 1.从读取流读取的是一个一个字节 2.返回的是字节的(0-255)内的字节值 3.读一个下次就自动到下一个,如果碰到-1说明没有值了. read(byte[] bytes) 1.从读取流读取一定数量的字节,如果比如文件总共是102个字节 2.我…

ubuntu下内核的升级与卸载

用apt-get dist-upgrade发现内核升级了。直接安装然后查看/boot/grub/menu.1st发现以前的内核还在,应该是从安全考虑可既然我正常启动了,就不需要了。留着占空间。卸载!首先,执行#uname -a显示了当前的内核然后用#dpkg -l|grep li…

全志平台boot框架中增加设备驱动过程分析

全志平台boot框架中增加设备驱动过程分析 在boot启动阶段,大家都知道他的主要目的就是引导uboot,uboot在引导内核,从而让整个系统运作起来。全志的boot阶段,对应平板这一块,它会驱动LCD,显示一些开机LOGO&a…

漫画,如何给小学生讲Creator游戏开发!

Shawn一直在思考怎么为零基础的人群讲懂 Cocos Creator 游戏开发,通过一种轻松愉悦的方式,在毫无我知觉的过程中接受组件化的思维方式。我经常会以我女儿为实验对象,尝试传授他游戏开发中的一些概念和知识。如果你作为程序员,能将…