LINUX.ORG.RU

Как вывести все насмерть деинсталлированные пакеты?

 


0

1

У меня есть файлы /var/log/emerge.log (длинные, за три года и более).

Я хочу узнать, были ли такие программы, которые однажды были установлены (потому что зачем-то понадобились), затем были удалены (скорее всего потому что они ломали апдейт) и потом никогда больше не были установлены снова.

Вдруг я посмотрю и захочу их доустановить снова? Что-нибудь вроде x11-misc/psensor

А, да, надо ещё написать, что пробовал, и что не получилось.

Пробовал { (grep "unmerge success" emerge.log | sed -E 's#^([0-9]*)(.*) ([a-zA-Z0-9-]*/[a-zA-Z0-9-]*)-(.*)$#\3 \1 u#g') && (grep "completed emerge" emerge.log | sed -E 's#^([0-9]*)(.*) ([a-zA-Z0-9-]*/[a-zA-Z0-9-]*)-(.*)$#\3 \1 m#g') } | sort -r | sed -E 's#^([a-zA-Z0-9-]*/[a-zA-Z0-9-]*) ([0-9]*) (u|m)$#\3 \2 \1#g' | uniq --skip-fields=2 | grep "^u " | sort | less

не получилось.

Shushundr ★★★
() автор топика

У команды genlop есть вывод удалявшихся пакетов, но он выводит всё, что удалялось и даты.

Можешь попробовать выделить из его вывода список пакетов, отсортировать, сделать uniq, сравнить со списком установленных на данный момент.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от grem

Я бы не хотел сравнивать со списком установленных на данный момент. Хотел бы обойтись только анализом файла emerge.log

Верно, что genlop -u выводит и установленные, и деинсталлированные с датами. Но у меня вызывает затруднение отделение ревизии и версии от имени, в общем не знаю я как его вывод преобразовать в список, который мне нужен. А на питоне программировать не умею.

Shushundr ★★★
() автор топика
Ответ на: комментарий от Shushundr

genlop и так анализирует emerge.log, но если так хочется возиться с многоэтажными регулярками, то вперёд.

Какие могут быть сложности с командой cut в bash для отделения того, что идёт до «-»?

grem ★★★★★
()
Ответ на: комментарий от grem

genlop и так анализирует emerge.log

Он выводит не то, что мне нужно. Нужно ещё обработать его вывод.

пример:

     Mon May 22 05:31:59 2023 <<< sys-apps/xdg-desktop-portal-1.16.0
     Mon May 22 05:32:08 2023 >>> sys-apps/xdg-desktop-portal-1.16.0-r1

вот такого там много, и мне про это знать совсем не надо.

Shushundr ★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)
Ответ на: комментарий от grem

у меня вызывает затруднение отделение ревизии и версии от имени, в общем не знаю я как его вывод преобразовать в список, который мне нужен. А на питоне программировать не умею.

Shushundr ★★★
() автор топика
Ответ на: комментарий от grem

Да, стало лучше:

qlop -mu --machine --nocolor | sort -r | uniq --skip-fields=2 | grep "<<<" | sort

Спасибо.

Но только и это не вполне решение. Потому что сортировка происходит по датам, а uniq по именам пакетов. Надо попереставлять поля sed-ом, а потом обратно…

Shushundr ★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)

Вобщем вот:

qlop -mu --machine --nocolor | sed -E 's#^([^ ]*) ([^ ]*) (.*)$#\3 \1 \2#g' | sort -r | sed -E 's#^([^ ]*) ([^ ]*) (.*)$#\3 \2 \1#g' | uniq --skip-fields=2 | grep "<<<" | sort

Сначала строки выглядят так
1684728322 <<< app-text/stardict

Первая перестановка ставит имя пакета на первое место, а дату на второе.
app-text/stardict 1684728322 <<<

Сортировка в обратном порядке сводит вместе все строки, относящиеся к одному пакету, причём самая «свежая» - сверху.

Вторая перестановка ставит название пакета на последнее место
<<< 1684728322 app-text/stardict
>>> 1658389207 app-text/stardict
>>> 1658388076 app-text/stardict

После выполнения uniq для каждого пакета остаётся по одной строчке (последнее действие с пакетом)

И затем грепом остаются только деинсталляции.

Ну и потом они сортируются по времени.

Но я всё ещё не доволен результатом. Какие деинсталлированные пакеты являются самостоятельными, а какие деинсталлированны как зависимости предыдущих и не важны для меня?

Shushundr ★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 3)
Ответ на: комментарий от grem

Пакетов всё равно слишком много. Бо́льшая часть из них это библиотеки haskell. Откуда они взялись? Надо убрать их из вывода
Как вывести пакеты только самого верхнего уровня?

Shushundr ★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 2)