Ось сценарій, який друкує тільки встановлені на даний момент пакети верхнього рівня , де "пакунки верхнього рівня" визначаються як пакунки atp, від яких не залежать інші пакети atp. Якщо такі програми вищого рівня були встановлені програмою atp або менеджером пакунків, наприклад, синаптичним, вони були вибрані користувачем вручну.
#!/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 . Як вказував цей «микель» на плакаті , журнали
dpgk
історії не є надійними, оскільки вони будуть повернуті після досягнення певного обсягу.
- Сторінка людини для
apt-chache
apt-cache rdepends ...
Імовірно, виклик дуже повільний, тому що кожен виклик обчислюється ітерацією через всі залежності. Отже, вищезазначений сценарій починається з новітніх встановлень, щоб запропонувати користувачеві якомога більше миттєвого задоволення.
--installed
Прапор після apt-cache
перевірки , що DPKG встановлених пакетів також схильні встановлено. Якщо користувач або інше встановити програмне забезпечення обійшли apt і використали dpkg безпосередньо, це було б можливо. ЦЕ СПРАВУ НЕ ВИБУЛЯЄТЬСЯ, але я думаю, що щось помітне було б надруковано як у стандартному, так і у вихідному помилку
- Вихідні дані не включають вибрані вручну пакунки, від яких згодом залежав більш високий пакет. Вихід також може включати пакети, які були встановлені через apt іншим програмним забезпеченням для встановлення третьої сторони, а отже, не справді встановлені вручну. Однак, якщо мета виводу є основою для встановлення відновленого Linux з резервного
/home
каталогу, який включає вказане програмне забезпечення сторонніх виробників, то такий вихід був би придатним.
- Деякі назви пакетів включають номери версій, а деякі ні. Згадується лише для того, щоб довести до відома факт.