Вот скрипт, который печатает только установленные в данный момент пакеты верхнего уровня , где «пакеты верхнего уровня» определены как пакеты atp, от которых не зависят никакие другие пакеты atp. Если такие программы верхнего уровня были установлены с помощью atp или менеджера пакетов, такого как synaptic, то они были выбраны пользователем вручную.
#!/bin/sh
NumDaysAgo=18
find /var/lib/dpkg/info -name "*.list" -mtime -$NumDaysAgo \
-exec stat -c $'%y\t%n' {} \; | \
sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list,,' | \
sort -r | \
while read Date Time Xxx Pkg
do
lncnt=$(apt-cache --installed rdepends $Pkg | wc -l)
if [ $lncnt -eq "2" ]
then echo "$Date $Time $Pkg"
fi
done
echo "JOB COMPLETED: $BASH_SOURCE"
Пакеты печатаются в обратном порядке в предположении, что пользователь с большей вероятностью захочет получить более новую информацию раньше, и потому что программа работает медленно.
Ход программы:
- Программа сначала собирает в список все установленные пакеты, читая имена файлов под
/var/lib/dpkg/info/
. Время мода файла - время установки.
- Этот список отсортирован в обратном порядке.
- Для каждого установленного пакета
$Pkg
вызов apt-cache rdepends $Pkg
запрашивает обратные зависимости $Pkg
. Если нет никаких зависимостей, то это пакет верхнего уровня, и информация о пакете печатается: дата и время имя_пакета
Примечания:
- Сценарий зависит от формата вывода,
apt-cache rdepends $Pkg
который предназначен для человеческих глаз и может измениться в будущих версиях apt.
- Код для части, собирающей имена файлов в / var / lib / dpkg / info /, взят из
этого поста unix.stackexchange . Как указывал этот плакат «mikel», журналы
dpgk
истории не являются надежными, потому что они будут развернуты после достижения определенного объема.
- Справочная страница для
apt-chache
- Вызов,
apt-cache rdepends ...
по-видимому, очень медленный, потому что каждый вызов вычисляется путем итерации всех зависимостей. Следовательно, приведенный выше скрипт начинается с самых новых установок, чтобы предложить пользователю как можно больше мгновенного вознаграждения.
--installed
Флаг после apt-cache
проверки , что DPKG установленных пакетов также склонные установлено. Если бы пользователь или другая инсталляционная программа обошли apt и использовали dpkg напрямую, это было бы возможно. ЭТОТ СЛУЧАЙ НЕ БЫЛ ПРОВЕРЕН, но я думаю, что что-то заметное будет напечатано в стандартном выводе или выводе ошибки
- Вывод не включает выбранные вручную пакеты, которые впоследствии стали зависимыми от более высокого пакета. Вывод также может включать пакеты, которые были установлены через apt другим сторонним программным обеспечением и, следовательно, не установлены вручную. Однако, если цель вывода - это основа для установки восстановленного linux из
/home
каталога резервной копии, который включает в себя упомянутое стороннее программное обеспечение, тогда этот вывод будет подходящим.
- Некоторые из имен пакетов включают номера версий, а некоторые нет. Упоминается только для того, чтобы привлечь внимание к факту.