检测哪些脚本正在使用旧的解释器

检测哪些脚本正在使用旧的解释器

我有一些 Debian 机器,上面有一些几乎被遗弃的脚本解释器,例如/bin/bash3/usr/bin/perl510。我如何检测那些在其 shebang line 中仍然有上述解释器的脚本?

#!/bin/bash3

或者

#!/usr/bin/perl510

递归搜索文件系统并不是一个可行的选择。重命名解释器来让脚本失败也是不可行的。

我成功地使用incrondroot 来IN_OPEN检测用法这些旧解释器。从那里我调用了一个简单的 shell 脚本来了解更多信息,但这PPID是 incrond 的脚本。fuserlsof都没有返回任何内容。

#!/bin/bash

LOG=/tmp/icc.log
echo "PID  is $$"       >> ${LOG}
echo "PPID is ${PPID}"  >> ${LOG}
echo "\$1 is ${1}"      >> ${LOG}

echo "fuser ${1}"       >> ${LOG}
fuser ${1}              >> ${LOG}
echo                    >> ${LOG}

echo "lsof ${1}"        >> ${LOG}
lsof ${1}               >> ${LOG}
echo                    >> ${LOG}

答案1

创建如下包装器脚本:

#!/bin/sh

echo "`date` `whoami` $0 $*" >> /tmp/bash3_use.log

/bin/bash3.bin "$@"

然后将bash3重命名为bash3.bin,并将此脚本命名为“/bin/bash3”

您可能需要记录更多信息,例如工作目录。

相关内容