Linux - 命令alias grep “grep -r“引起的卡慢报错问题

Linux - 命令alias grep "grep -r"引起的卡慢报错问题

问题描述

用户环境下有别名ml,实际命令是module load与其它包含grep的命令组成。
用户执行ml python会停住,过了很久报了一堆奇怪的报错,加载失败。

问题分析

由于现象是加载工具时卡住,需要找到卡在哪里。然后再分析为何报错。

用户先开好两个shell,称为shellA与shellB,shellA进程ID为pid_A。

在shellB中,执行strace -ttTffy -o /tmp/${USER}_strace.log -p pid_A

在shellA中执行ml python

同时在shellB中,查看strace的日志,看生成的子进程分别是什么。有awk,grep等。
其中grep进程持续了很久,我觉得有问题。细看grep命令的调用,是grep -r后面没有跟参数。这就引起了我的警觉:加载工具的过程,为何要递归过滤整个目录?这不合理!

等shellA报错退出后,我检查grep的别名设置,它是grep -r,定义语句alias grep "grep -r"是用户的初始化文件里头source的一个文件的语句。这个语句的问题在于,它仅仅支持文件夹递归过滤了,而不接收从stdin接收的字符串内容了。由于ml命令中包含了管道后接grep命令,这个命令失效,并从当前文件夹递归过滤文件内容,由于当前目录文件层级过深、文件很多,耗时当然很长。至于最后报错,因为要处理的不是期望的字符串,奇怪的报错也就意料之中了。

问题解决

本案要从两个方面来解决问题

  1. 告知用户,grep的别名不能加-r;
  2. 管理员的基础环境调用的命令,应不要受用户的alias影响,否则状况百出。具体可以使用绝对路径,或是在命令前加上反斜杠,如\grep

相关案例

Linux - C SHELL报错提示“Missing }.“

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王万林 Ben

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值