在麒麟系统中用ps aux | grep '\.sh$'可精准定位后台.sh脚本进程,若无结果则改用ps aux | grep -e 'sh.*\.sh|bash.*\.sh';结合[s]cript.sh语法规避grep自身干扰,并通过ps -f -c sh查看cmd列确认完整路径,再按启动时间排序快速识别最新运行的脚本。

你需要在麒麟系统中快速定位那些正在后台悄悄执行的.sh脚本,避免它们占用CPU或内存却无法被图形界面任务管理器直接识别——因为这类进程通常不显示为“脚本名”,而是以/bin/sh或/bin/bash进程形式存在。
用ps配合grep精准筛选.sh脚本进程
打开终端(Ctrl+Alt+T),输入以下命令:
ps aux | grep '\.sh$'
这条命令会列出所有命令行结尾是“.sh”的进程,排除掉grep自身和路径中含sh但非脚本文件的干扰项。注意末尾的$符号确保只匹配真实以.sh结尾的执行命令,否则可能误抓到/tmp/shell/之类路径。
如果返回结果为空,但你知道脚本确实在跑,说明它可能被sh -c或bash -c方式调用,此时改用:
ps aux | grep -E 'sh.*\.sh|bash.*\.sh'
区分真实脚本进程与干扰项
方法一:用方括号绕过grep自身进程
ps aux | grep '[t]est1.sh' —— 将脚本名首字母用方括号包裹,例如想查run_backup.sh,就写[r]un_backup.sh。这样grep命令本身不会出现在结果里,避免误判。
方法二:检查进程完整命令行
执行 ps -f -C sh 后观察CMD列内容,真正运行.sh脚本的进程,其CMD字段会显示类似 /bin/sh /home/user/deploy.sh 这样的完整路径。而仅显示 /bin/sh 或 sh 的,很可能是交互式shell,不是脚本进程。
【关键提醒:若看到 /bin/sh ./script.sh 这类格式,说明脚本正通过相对路径执行,当前工作目录即为其所在目录】
按启动时间排序定位最新运行的.sh脚本
第一步:获取所有sh/bash进程并附加启动时间
ps -eo pid,comm,lstart,cmd --sort=-lstart | grep -E 'sh|bash' | head -n 20
第二步:从中人工筛查CMD列含“.sh”且非系统路径(如/usr/bin/sh)的行
第三步:确认PID后,可用 readlink -f /proc/PID/exe 查看该进程实际调用的解释器绝对路径,排除被伪装的可疑进程
这个排序能帮你一眼抓住最近1分钟内刚启动的.sh脚本,对排查定时任务或用户误操作特别有效。











