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

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

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

1
задан 12 May 2016 в 01:58

4 ответа

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

Если вам хорошо с получением местоположения, откуда будет загружен пакет с таким же именем, это доступно через 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, которые могут меняться в разных версиях ... [ ! d3]

24
ответ дан 26 May 2018 в 01:08
  • 1
    Да, это в основном означало бы написание инструмента с нуля. И я думаю, что parsing / var / lib / apt / lists с Perl или Python будет быстрее и надежнее. – Marius Gedminas 15 October 2010 в 05:07
  • 2
    Работает нормально здесь, в 2018 году :) Спасибо! – N0rbert 5 March 2018 в 11:25
  • 3
    Я разработал аналогичное решение , протестированное на Ubuntu и Debian. – famzah 24 April 2018 в 21:23

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

21
ответ дан 26 May 2018 в 01:08

В этом скрипте перечислены пакеты, которые установлены и доступны в 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-purge ; Я создал улучшенную версию этого этого .

4
ответ дан 26 May 2018 в 01:08

В Quantan (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)
3
ответ дан 26 May 2018 в 01:08

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

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