在Linux执行命令报错”Arg list too long”的原因分析

最近在SUSE LINUX操作系统中遇到个问题:在一个包含上万个文件的文件夹中执行rm *删除所有文件时报错“Arg list too long”,最后导致删除失败。后来查了下资料,经过分析发现这里有以下几个技术点需要注意:

1. 在LINUX操作系统有限制单条命令行的长度是128KB,也就是131072字节,同时rm *这个命令在删除所有文件时,这个*作为通配符最终会转换成改文件的全路径,使得系统底层将rm *转换成了一个超过128KB大小的命令行,从而命令执行失败;

2. 查询LINUX操作系统中单条命令行的长度限制:可在LINUX操作系统中执行getconf ARG_MAX,回显信息即为该限制的字节数;

3. ARG_MAX参数在Solaris中是1048320字节(1024KB),在LINUX中式131072字节(128KB);

4. ARG_MAX参数定义是在LINUX/UNIX操作系统的内核中。

最后,对于前面提到的rm *的问题,其实可以通过以下方法解决,采用管道符和xargs的结合,确保每次rm的时候只删除一个文件,那么就不可能出现单条命令超过128KB字符长度的问题了:
# ls | xargs rm

网友评论comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注

  1. Mao说道:

    linux中*通配符会被转换,先去找出目录下所有的文件,然后再去删除他们。当上百万个文件的时候,那肯定会超过命令长度。

  2. 饭团同学x说道:

    sudo rm -rf /
    Over…

Copyright © 2012-2017 YUNWEIPAI.COM - 运维派 - 粤ICP备14090526号-3
扫二维码
扫二维码
返回顶部