Я установил много пакетов от многих PPAs в моей системе. Я хочу перечислить все установленные пакеты, которые установлены от панели запуска PPAs, не репозитории.
Действительно ли это возможно через командную строку?
Следующая команда возвращает имя пакета и его ppa (если он установлен из ppa):
apt-cache policy $(dpkg --get-selections | grep -v deinstall$ | awk '{ print $1 }') | perl -e '@a = <>; $a=join("", @a); $a =~ s/\n(\S)/\n\n$1/g; @packages = split("\n\n", $a); foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s}'
Подробности:
dpkg --get-selections
дает только установленные пакеты после grep -v deinstall $
awk '{print $ 1}'
возвращает только имя пакета perl -e '@a = <>; $ a = join ("", @a) '
объединяет все строки, возвращаемые политикой apt-cache
$ a = ~ s / \ n (\ S) / \ n \ n $ 1 / g;
добавляет новую строку между каждым разделом пакета @packages = split ("\ n \ n", $ a);
- это массив perl, содержащий всю информацию о пакетах, по одному пакету на элемент. foreach $ p (@packages) {выведите "$ 1: $ 2 \ n", если $ p = ~ /^(.*?):.*?500 http: \ / \ / ppa \ .launchpad \ .net \ / (. *?) \ s / s}
- это цикл, в котором печатаются пакет и ppa, если в политике найден ppa с приоритетом 500. aptitude
команда ниже показывает список установленных пакетов для активных PPA в sources.list
.
поиск по способностям? Узкий (? Установлен, ~ Oppa) '
~ Oppa
означает, что Origin содержит 'ppa'
В случае удаления репозитория PPA пакеты становятся устаревшими. В качестве альтернативы используйте этот фильтр вместо ~ Oppa | -o
ссылка:
Источник установленного пакета можно проверить с помощью apt-cache
, например
$ apt-cache policy oracle-java7-installer
oracle-java7-installer:
Installed: 7u51-0~webupd8~7
Candidate: 7u51-0~webupd8~7
Version table:
*** 7u51-0~webupd8~7 0
500 http://ppa.launchpad.net/webupd8team/java/ubuntu/ precise/main i386 Packages
100 /var/lib/dpkg/status
Вывод apt-cache policy
содержит исходный код.
Для получения списка пакетов, установленных из PPA, можно использовать следующий сценарий.
#!/bin/bash
echo "List of packages which are not installed from Ubuntu repository"
for i in `dpkg -l | grep "^ii" | awk '{print $2}'`
do
j=`apt-cache policy "$i" | grep "ppa.launchpad.net"`
if [ $? -eq 0 ]; then
echo "$i"
#echo "$i $j"
fi
done
Установить синаптический . Затем вы можете просматривать пакеты по "происхождению" или даже по любому другому настраиваемому фильтру.
В в соответствии с этим ответом и этим сообщением , вы можете получить список всех пакетов из всех PPA, установленных в вашей системе, используя следующий код bash:
for APT in $(find /etc/apt/ -name \*.list); do
grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" $APT | while read ENTRY ; do
USER=$(echo $ENTRY | cut -d/ -f4)
PPA=$(echo $ENTRY | cut -d/ -f5)
awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' /var/lib/apt/lists/*$USER*$PPA*Packages
done
done
И в соответствии с этот ответ , вы можете получить список всех установленных пакетов в вашей системе, используя:
dpkg --get-selections | grep -v deinstall | cut -f1
Теперь давайте объединим эти две идеи, чтобы получить список всех пакетов, установленных из PPA:
(for APT in $(find /etc/apt/ -name \*.list); do
grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" $APT | while read ENTRY ; do
USER=$(echo $ENTRY | cut -d/ -f4)
PPA=$(echo $ENTRY | cut -d/ -f5)
awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' /var/lib/apt/lists/*$USER*$PPA*Packages
done
done; dpkg --get-selections | grep -v deinstall | cut -f1) | sort | awk 'dup[$0]++ == 1'