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