Как я могу перечислить все пакеты, которые я установил из определенного репозитория?
Как я могу перечислить все установленные пакеты, которые недоступны из основных архивов Ubuntu, а также посмотреть, из каких репозиториев они пришли? (Если бы я знал ответ на этот вопрос, я мог бы найти этот список для конкретного имени PPA, чтобы узнать ответ на мой первый вопрос.)
Разверните пункт «Установленное программное обеспечение» в Центре программного обеспечения Ubuntu. Вы увидите список всех различных репозиториев, которые вы включили. Нажатие на репозиторий покажет вам пакеты, которые вы установили из каждого.
Откройте диспетчер пакетов Synaptic и нажмите кнопку «Происхождение» в нижней части левой боковой панели. Он перечислит ваши источники. Выберите источник, чтобы увидеть доступные / установленные пакеты.
В соответствии с 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)
Этот скрипт перечисляет пакеты, которые установлены и доступны в 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; Я создал улучшенную версию этого здесь .
Кажется, нет никакой записи источника установленного пакета.
Если Вы соглашаетесь с получением местоположения, откуда пакет того же имени был бы загружен с, это доступно через 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
, который мог бы измениться через версии...