Як я можу перерахувати всі пакунки, які я встановив із певного сховища?


51

Як я можу перерахувати всі пакунки, які я встановив із певного сховища?

Як я можу перерахувати всі встановлені пакети, недоступні в основних архівах Ubuntu, а також побачити, з яких сховищ вони взялися? (Якби я знав відповідь на це запитання, я міг би зіткнути цей список за конкретною назвою PPA, щоб дізнатися відповідь на моє перше запитання.)


Оскільки, здається, не існує інструменту командного рядка для цього (на жаль), я прийму один із відповідей GUI.
Маріус Гедмінас

Відповіді:


24

Розгорніть пункт «Встановлене програмне забезпечення» в Центрі програмного забезпечення Ubuntu. Ви побачите список усіх увімкнених різних сховищ. Натиснувши на репо, вам покажуть встановлені вами пакунки з кожного.

alt текст


Я боюся, що цей варіант доступний лише в Ubuntu 10.10 або я щось пропускаю? Мій програмний центр не відображає джерела під цим меню.
lovinglinux

2
У моїй версії я маю спадне меню "Встановлено". Коли я вибираю цей варіант, я можу вибрати різні джерела (основні, для гаманця, PPA ...)
Alexis Wilke

В Ubuntu 16.04 ця сторінка більше не доступна. Однак синаптик має схожу особливість - натисніть "Походження" внизу зліва.
Джош

26

Здається, немає запису про походження встановленого пакету.

Якщо ви добре отримаєте місцезнаходження, звідки буде завантажений однойменний пакет, це доступно через apt-cache policy. Наступний (досить потворний) сценарій робить для мене хитрість:

LC_ALL=C dpkg-query --showformat='${Package}:${Status}\n' -W '*' \
  | fgrep ':install ok installed' \
  | cut -d: -f1 \
  | (while read pkg; do 
       inst_version=$(apt-cache policy $pkg \
                                | fgrep Installed: \
                                | awk '{ print $2 }'); 
       origin=$(apt-cache policy "$pkg" \
                          | fgrep " *** ${inst_version}" -C1 \
                          | tail -n 1 \
                          | cut -c12-); 
       echo $pkg $origin; 
     done)

Зауважте, що він досить крихкий, оскільки він робить припущення про вихід apt-cache policy, який може змінюватися у різних версіях ...


Так, це в основному означатиме написання інструменту з нуля. І я думаю, що аналіз / var / lib / apt / списки з Perl або Python був би швидшим та надійнішим.
Маріус Гедмінас

Тут працює нормально, у 2018 році :) Дякую!
N0rbert

Я розробив подібне рішення, тестоване на Ubuntu та Debian.
famzah

23

Відкрийте Synaptic Package Manager і натисніть кнопку "Origin" внизу лівої бічної панелі. У ньому буде вказано ваші джерела. Виберіть джерело, щоб побачити наявні / встановлені пакети.


4

Цей скрипт перелічує пакети, які встановлені та доступні в PPA:

#!/bin/sh
# Give PPA name as an argument, e.g. ppa:oibaf/graphics-drivers

name1="$(echo "$1"|cut -d: -f2|cut -d/ -f1)"
name2="$(echo "$1"|cut -d/ -f2)"

awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' \
/var/lib/apt/lists/*"$name1"*"$name2"*Packages |
xargs dpkg-query -W -f='${Status} ${Package}\n' 2>/dev/null  | awk '/^[^ ]+ ok installed/{print $4}'

Я застосував це .

BTW Що стосується вилучення PPA з використання, використовуйте програму ppa-очищення; Я створив поліпшену версію цього тут .


3

У Quantal (12.10) пробіл у початковій лінії потрібно видалити.

LC_ALL=C dpkg-query --showformat='${Package}:${Status}\n' -W '*' \
 | fgrep ':install ok installed' \
 | cut -d: -f1 \
 | (while read pkg; do 
   inst_version=$(apt-cache policy $pkg \
                            | fgrep Installed: \
                            | cut -d: -f2-); 
   origin=$(apt-cache policy "$pkg" \
                      | fgrep " ***${inst_version}" -C1 \
                      | tail -n 1 \
                      | cut -c12-); 
   echo $pkg $origin; 
 done)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.