Как перечислить все установленные пакеты от определенной категории (компонент)

Действительно ли возможно перечислить все установленные пакеты от определенного официального компонента репозитория (Основной, Ограниченный, Вселенная или Мультивселенная) использование утилит как способный, способный кэш, способность?

Я записал простой сценарий с этой целью:

dpkg -l | grep ^ii | cut -f3 -d ' ' | while read -r pkg;
do
 status=`apt-cache show $pkg | grep -m1 "Section: multiverse"`
 if [ ! -z "$status" ] 
 then
  echo $pkg
 fi
done;

Это работает, но это - действительно медленная причина, это проверяет все пакеты один за другим. Выполнение time команда для этого сценария произведет:

real    1m16.797s
user    0m57.008s
sys     0m8.260s

Я уже попробовал шаблоны поиска способности и форматирование dpkg-запроса, но кажется, что у них нет надлежащего столбца/схемы для создания запроса с этой целью.

Я также взглянул на vrms сценарий, чтобы узнать, как это - работы, потому что это действительно быстро в нахождении contrib/non-free пакеты, это, кажется, что vrms сценарий сканирует целое /var/lib/dpkg/status файл, ища вещи как 'Раздел: (contrib | несвободный | ограниченный | мультивселенная | партнер)', таким образом, это не было полезно также, потому что не все пакеты имеют этот раздел.

3
задан 19 November 2018 в 20:48

2 ответа

Хорошо, я не сделал нашел любое решение сделать это со стандартными утилитами, однако после того, чтобы взглянуть на телефон vrms , я придумал симпатичный лучший сценарий для поиска пакетов, установленных от определенного компонента.

другой сценарий, который я упомянул в своем вопросе, был действительно трудоемким.
Однако новый сценарий доступен здесь: pkgs-from.sh

использование:

./pkgs-from.sh universe # or main, multiverse, backports

И time результат команды для этого:

real    0m4.367s
user    0m0.980s
sys     0m0.408s

, Который довольно хорош.

, Как это работает?
сценарий создаст список всех пакетов, связанных с требуемым компонентом из связанных файлов в /var/lib/apt/lists/ каталог, затем начинает искать всюду по ним вместо того, чтобы использовать apt-cache.

1
ответ дан 1 December 2019 в 17:30

Здесь мой сценарий для мониторинга установленных пакетов для данного компонента

FILTER=non-free TMP_DIR=$(mktemp -d) && {
  dpkg -l | grep ^ii | cut -f 3 -d' ' | cut -f 1 -d : | sort | uniq > ${TMP_DIR}/pkg_installed.list
  cat /var/lib/apt/lists/*_${FILTER}_*Packages | grep "^Package:"  | sort | uniq | cut -d' ' -f2 > ${TMP_DIR}/pkg_filtered.list
  comm -12 ${TMP_DIR}/pkg_installed.list ${TMP_DIR}/pkg_filtered.list
}
0
ответ дан 22 April 2020 в 12:19

Другие вопросы по тегам:

Похожие вопросы: