我有一些 Debian 机器,上面有一些几乎被遗弃的脚本解释器,例如/bin/bash3
和/usr/bin/perl510
。我如何检测那些在其 shebang line 中仍然有上述解释器的脚本?
#!/bin/bash3
或者
#!/usr/bin/perl510
递归搜索文件系统并不是一个可行的选择。重命名解释器来让脚本失败也是不可行的。
我成功地使用incrond
root 来IN_OPEN
检测用法这些旧解释器。从那里我调用了一个简单的 shell 脚本来了解更多信息,但这PPID
是 incrond 的脚本。fuser
和lsof
都没有返回任何内容。
#!/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”
您可能需要记录更多信息,例如工作目录。