Назад | Перейти на главную страницу

Определить, какие скрипты используют старые интерпретаторы

У меня есть несколько машин Debian с некоторыми почти осиротевшими интерпретаторами скриптов, например /bin/bash3 и /usr/bin/perl510. Как я могу обнаружить те скрипты, у которых все еще есть вышеупомянутые интерпретаторы в своей строке shebang?

#!/bin/bash3

или

#!/usr/bin/perl510

Рекурсивный поиск в файловой системе не является жизнеспособным вариантом. Переименование интерпретаторов, чтобы скрипты не работали, тоже не в картах.

Что мне удалось, так это использовать incrond для root с IN_OPEN обнаружить использование этих старых интерпретаторов. Оттуда я вызвал простой сценарий оболочки, чтобы узнать больше, но 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}

Создайте сценарий оболочки следующим образом:

#!/bin/sh

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

/bin/bash3.bin "$@"

Затем переименуйте bash3 в bash3.bin и назовите этот скрипт «/ bin / bash3»

Вам может потребоваться дополнительная информация, например рабочий каталог.