rm报错0403-027:The parameter list is too long

eg:
#find /agent4.0/swap/ "*" | xargs -n 10 rm {} \;
删除的过程会报文件或目录不存在的提示。但文件总算被删除了问题解决。

find: 0403-027 The parameter list is too long 这个错误信息很让人迷惑: 难道该目录
下文件太多了么? 其实不是的, 问题出在那个 "*" 上,Korn Shell 默认把 * 作为
Metadata 处理进行了扩展进而这条语句被错误的解析我的操作平台是 AIX 5.3. 我不
确定这是和这个平台的 Korn Shell 有关
 
使用 ls / grep / find 等命令时侯因为通配符的使用, 一不小心就会遇到这样的错误可
以通过对对象添加引号来禁止扩展 
 
另外有的时候 使用 rm 命令的时候也可能遇到:
 
rm:0403-027 The parameter list is too long.
这个错误的根本原因是因为 /usr/include/limits.h 定义系统核心 LINE_BUFSZ 限制如
果有大量文件数需要删除可以考虑用 xargs 的 -n 参数进行批量删除.参考如下示例:
 
find /backup/ -ctime 2 -print | xargs -n 10 rm {} \;

 

[DBAPP@root@/agent4.0/swap]#lsattr -E -l sys0 -a ncargs
ncargs 64 ARG/ENV list size in 4K byte blocks True
[DBAPP@root@/agent4.0/swap]#chdev -l sys0 -a ncargs=6
sys0 changed

0403-027 The parameter list is too long
时我们在执行rm或其它命令的时候,系统会报0403-027 The parameter list is too long的错,如:
#find ./ -mtime +10 -name *.trc   ksh: /usr/bin/find: 0403-027 The parameter list is too long.

出现这种情况主要是因为AIX内核参数ncargs控制,ncargs参数说明如下:

ncargs 用途: 指定运行 exec() 子例程时,ARG/ENU 列表(大小为 4 KB 的块)允许的最大大小。
值: 缺省值:6;范围:6 到 1024
显示: lsattr -E -l sys0 -a ncargs
更改: chdev -l sys0 -a ncargs=NewValue
更改会立即效而且在引导期间保存下来。
诊断: 用户不可以执行任何附加的进程,因为传递给 exec() 系统调用的变元表太长。低缺省值可能造成一些程序失败并出现幅角列表太长错误消息,在这种情况下,您可以尝试使用以上的 chdev 命令增加 ncargs 值,然后重新运行该程序。
调整: 这是为了防止变元表过长引起 exec() 子例程失败的一种机制。请注意,调整到一个较高 ncargs 值会对系统内存资源加一些额外的限制。

了解了0403-027错误,现在我们有讨论两种方法解决:
方法一:
  1.调高ncargs 值
#chdev -l sys0 -a ncargs=64

2.OK,可以删除了
#rm *

3.工作做完,把参数调回原值
chdev -l sys0 -ncargs=4


方法二:使用递归式参数传递
 find ./ -mtime +10 -exec rm {} \;

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值