Как я могу перечислить все пакеты, которые я установил из определенного репозитория?

51

Как я могу перечислить все пакеты, которые я установил из определенного репозитория?

Как я могу перечислить все установленные пакеты, которые недоступны в основных архивах Ubuntu, а также посмотреть, из каких репозиториев они пришли? (Если бы я знал ответ на этот вопрос, я мог бы найти этот список для конкретного имени PPA, чтобы узнать ответ на мой первый вопрос.)

Мариус Гедминас
источник
Поскольку для этого (к сожалению) не существует существующего инструмента командной строки, я приму один из ответов с графическим интерфейсом.
Мариус Гедминас

Ответы:

24

Разверните пункт «Установленное программное обеспечение» в Центре программного обеспечения Ubuntu. Вы увидите список всех различных репозиториев, которые вы включили. Нажатие на репозиторий покажет вам пакеты, которые вы установили из каждого.

альтернативный текст

andrewsomething
источник
Боюсь, эта опция доступна только в Ubuntu 10.10 или я что-то упустил? Мой Центр программного обеспечения не отображает источники под этим меню.
Lovinglinux
2
В моей версии у меня есть «Установленный» выпадающий сверху. Когда я выбираю эту опцию, я могу выбирать различные источники (ядро, для покупки, PPA ...)
Алексис Уилк
В Ubuntu 16.04 эта страница больше не доступна. Тем не менее, Synaptic имеет аналогичную функцию - нажмите «Происхождение» в левом нижнем углу.
Джош
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 / lists с помощью Perl или Python будет быстрее и надежнее.
Мариус Гедминас
Работает нормально здесь, в 2018 году :) Спасибо!
Норберт
Я разработал аналогичное решение, протестированное на Ubuntu и Debian.
Famzah
23

Откройте диспетчер пакетов Synaptic и нажмите кнопку «Происхождение» в нижней части левой боковой панели. Он перечислит ваши источники. Выберите источник, чтобы увидеть доступные / установленные пакеты.

lovinglinux
источник
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}'

Я применил это .

Кстати, что касается удаления PPA из использования, используйте программу ppa-purge; Я создал улучшенную версию этого здесь .

Ярно
источник
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)
Грэм Данн
источник