Навеяно темой:
https://forum.altlinux.org/index.php?topic=40184.msg317831#msg317831Ну и тут
https://forum.altlinux.org/index.php?topic=32361.msg317832#msg317832Что делает исполняемый скрипт:
При вводе имени установленного пакета, отображает имена установленных в системе пакетов у которых указанный пакет в зависимостях.
Интерактивная версия# cat ./apt-rdependsi
#!/bin/bash
#
# Reverse dependencies of the installed package
# Interactive version
#
RDEPPKG=""
ENABLEPKG=""
echo
echo "Поиск пакетов требующих указанный установленный пакет."
echo "Ввод в формате:"
echo "имя[-версия-релиз-платформа]"
echo
read -p "Введите имя пакета: " RDEPPKG
ENABLEPKG=`rpm -q --qf '%{NAME}\n' $RDEPPKG 2>/dev/null|wc -l`
echo
# Отладочная строка
# RDEPPKG='rpm'
if [[ "$ENABLEPKG" = 1 ]]
then
echo -e 'Поиск установленных пакетов у которых пакет' $RDEPPKG 'в зависимостях\nПодождите пожалуйста...\n'; \
apt-get remove $RDEPPKG -s|grep Remv|grep -v $RDEPPKG|awk '{print $2}'|\
while read LINE; \
do STR=`apt-cache depends $LINE|grep '^ '|grep -o $RDEPPKG|wc -w`; \
if [ "$STR" != 0 ]; \
then rpm -qi $LINE|grep ^Name|awk '{print $3}';\
fi; \
done; echo
exit 0
else
if [[ "$ENABLEPKG" = 0 ]]
then
echo -e "Пакета" $RDEPPKG "в системе нет.\n"
fi
fi
Время работы скрипта сильно зависит от мощности компьютера и количества зависимостей:
см. вывод time в конце каждого вывода [часы:]минуты:секунды.доли_секунд
# time -f %E sh apt-rdepends
Поиск пакетов требующих указанный установленный пакет.
Ввод в формате:
имя[-версия-релиз-платформа]
Введите имя пакета: rpm
Поиск установленных пакетов у которых пакет rpm в зависимостях
Подождите пожалуйста...
alterator
python3
guile22-devel
alternatives
eepm
apt
basesystem
bash-completion
browser-plugins-npapi-devel
cmake
menu
etcskel
python-module-setuptools
glib2-devel
hcl-get
update-kernel
kernel-headers-common
service
control
gtk-update-icon-cache
shared-mime-info
6:15.08
# time -f %E sh apt-rdepends
Поиск пакетов требующих указанный установленный пакет.
Ввод в формате:
имя[-версия-релиз-платформа]
Введите имя пакета: libx265
Поиск установленных пакетов у которых пакет libx265 в зависимостях
Подождите пожалуйста...
gst-plugins-bad1.0
libavcodec56
libavcodec57
0:22.52
# time -f %E sh apt-rdepends
Поиск пакетов требующих указанный установленный пакет.
Ввод в формате:
имя[-версия-релиз-платформа]
Введите имя пакета: libx267
Пакета libx267 в системе нет.
0:04.43
Версия для командной строки# cat ./apt-rdepends
#!/bin/bash
#
# Reverse dependencies of the installed package
# Command line version
#
RDEPPKG=""
ENABLEPKG=""
usage()
{
echo -e "\nUsage: $0 <package_name>\n" >&2
exit 1
}
[ -z "$1" ] && usage
export RDEPPKG=$1
ENABLEPKG=`rpm -q --qf '%{NAME}\n' $RDEPPKG 2>/dev/null|wc -l`
if [[ "$ENABLEPKG" = 1 ]]
then
echo -e '\nПоиск установленных пакетов у которых пакет' $RDEPPKG 'в зависимостях\nПодождите пожалуйста...\n'; \
apt-get remove $RDEPPKG -s|grep Remv|grep -v $RDEPPKG|awk '{print $2}'|\
while read LINE; \
do STR=`apt-cache depends $LINE|grep '^ '|grep -o $RDEPPKG|wc -w`; \
if [ "$STR" != 0 ]; \
then rpm -qi $LINE|grep ^Name|awk '{print $3}';\
fi; \
done; echo
exit 0
else
if [[ "$ENABLEPKG" = 0 ]]
then
echo -e "\nПакета" $RDEPPKG "в системе нет.\n"
fi
fi
Скрипт обрабатывает:
Отсутствие параметра
# ./apt-rdepends
Usage: ./apt-rdepends <package_name>
Указание имени пакета как параметра
# ./apt-rdepends libx265
Поиск установленных пакетов у которых пакет libx265 в зависимостях
Подождите пожалуйста...
gst-plugins-bad1.0
libavcodec56
libavcodec57
Неверно указанное имя пакета
# ./apt-rdepends libx267
Пакета libx267 в системе нет.
Вот только с ядром не смог справиться...
# ./apt-rdepends make-initrd
Поиск установленных пакетов у которых пакет make-initrd в зависимостях
Подождите пожалуйста...
пакет kernel-image-std-def#1:4.4.31-alt1 не установлен
пакет kernel-image-std-def#1:4.4.35-alt1 не установлен
пакет kernel-image-std-def#1:4.4.27-alt1 не установлен
пакет kernel-image-un-def#1:4.13.3-alt1 не установлен
пакет kernel-image-std-def#1:4.9.52-alt1 не установлен
пакет kernel-image-std-def#1:4.4.34-alt1 не установлен
пакет kernel-image-std-def#1:4.9.20-alt1 не установлен
пакет kernel-image-std-def#1:4.4.30-alt1 не установлен
пакет kernel-image-std-def#1:4.4.44-alt1.1 не установлен
пакет kernel-image-std-def#1:4.4.53-alt1 не установлен
пакет kernel-image-std-def#1:4.4.55-alt1 не установлен
пакет kernel-image-std-def#1:4.4.47-alt1.1 не установлен
пакет kernel-image-std-def#1:3.14.79-alt0.M70P.2 не установлен
disable-usb-autosuspend
Если бы показал не так
Remv kernel-image-std-def#1:4.4.55-alt1 (1:4.4.55-alt1 )
а так
Remv kernel-image-std-def (1:4.4.55-alt1 )
awk бы распарсил абсолютно всё.
А проверка по условию, это вообще тяжёлая по тактам операция. И чем меньше их, тем лучше.