最近在SUSE LINUX操作系统中遇到个问题:在一个包含上万个文件的文件夹中执行rm *删除所有文件时报错“Arg list too long”,最后导致删除失败。后来查了下资料,经过分析发现这里有以下几个技术点需要注意:
-
在LINUX操作系统有限制单条命令行的长度是128KB,也就是131072字节,同时rm 这个命令在删除所有文件时,这个作为通配符最终会转换成改文件的全路径,使得系统底层将rm *转换成了一个超过128KB大小的命令行,从而命令执行失败;
-
查询LINUX操作系统中单条命令行的长度限制:可在LINUX操作系统中执行getconf ARG_MAX,回显信息即为该限制的字节数;
-
ARG_MAX参数在Solaris中是1048320字节(1024KB),在LINUX中式131072字节(128KB);
-
ARG_MAX参数定义是在LINUX/UNIX操作系统的内核中。
最后,对于前面提到的rm *的问题,其实可以通过以下方法解决,采用管道符和xargs的结合,确保每次rm的时候只删除一个文件,那么就不可能出现单条命令超过128KB字符长度的问题了:
ls | xargs rm
※部分文章来源于网络,如有侵权请联系删除;更多文章和资料|点击后方文字直达 ↓↓↓
100GPython自学资料包
阿里云K8s实战手册
阿里云CDN排坑指南
ECS运维指南
DevOps实践手册
Hadoop大数据实战手册
Knative云原生应用开发指南
OSS 运维实战手册
云原生架构白皮书
Zabbix企业级分布式监控系统源码文档
10G大厂面试题戳领