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

http://www.yunweipai.com/archives/558.html

在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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值