Я в поисках аналога этому вопросу:Zypper: как отобразить все пакеты из определенного репозитория?
Так как я на Ubuntu, мне нужно решение на основе aptitude: как я могу получить список установлен пакеты из определенного репозитория?
Я в поисках аналога этому вопросу:Zypper: как отобразить все пакеты из определенного репозитория?
Так как я на Ubuntu, мне нужно решение на основе aptitude: как я могу получить список установлен пакеты из определенного репозитория?
используя aptitude, для поиска установленных пакетов вне стабильной ветки, вы можете использовать:
aptitude search "?narrow(?installed,?not(?archive(stable)))"
чтобы увидеть версии, а также имена пакетов (и вместо описаний), вы можете использовать команду с опцией format (-F
для краткости), следующим образом.
aptitude search -F "%p %V %v" "?narrow(?installed,?not(?archive(stable)))"
для более форматов, пожалуйста, взгляните на manpage (вот документация с avail. варианты).
это работает, например, в Debian, если вы установили пакеты вне Squeeze (запустив, например, apt-get install -t sid package-name
.
вы можете посмотреть, откуда приходит установленный пакет через apt-cache policy
, используется следующим образом:
apt-cache policy <package-name>
например, мой пакет python-numpy выводит следующий результат:
$ LANG=C apt-cache policy python-numpy
python-numpy:
Installed: 1:1.6.2-1
Candidate: 1:1.6.2-1.2
Version table:
1:1.7.0-1 0
1 http://ftp.es.debian.org/debian/ experimental/main amd64 Packages
1:1.6.2-1.2 0
500 http://ftp.es.debian.org/debian/ sid/main amd64 Packages
*** 1:1.6.2-1 0
100 /var/lib/dpkg/status
1:1.4.1-5 0
990 http://ftp.es.debian.org/debian/ squeeze/main amd64 Packages
990 http://ftp.de.debian.org/debian/ squeeze/main amd64 Packages
это означает, что я на одну версию позади текущей ветки sid/main, поэтому у меня установлена старая версия sid. Я вижу, что у меня нет стабильного, потому что он еще 1.4.1-5
, и я в настоящее время at 1.6.2-1
.
на момент отправки этот пакет уже был обновлен:)
прочитав страницу информации о aptitude и дюжину попыток, я, наконец, получил это:
aptitude search '?narrow(?installed,?not(?archive(testing)) ?archive(unstable))'
или (эквивалент) :
aptitude search '~S ~i (!~Atesting ~Aunstable)'
он будет искать пакеты, установленные из нестабильных архивов любой репозитория. Вы должны отфильтровать пакеты из архива по умолчанию (тестирование в приведенном выше примере).
если вы хотите фильтровать пакеты, установленные из www.debian-multimedia.org/unstable :
aptitude search '~S ~i (!~Atesting ~Aunstable ?origin("Unofficial Multimedia Packages"))
Edit: "архив", "начало" etc. вычитаются из Release
файл репозитория. К сожалению, не все инструменты могут смотреть на все эти строки, и они используют для них другой синтаксис. Вы можете найти эти файлы как /var/lib/apt/lists/*Release
. Или просто введите apt-cache policy
получить обзор. apt-cache изменил формат вывода: в более поздних версиях используется стиль apt_preferences.
Suite:
или Archive:
(старое название!)
?archive(___)
или ~A___
%t
release a=___
natty-backports
,trusty-security
,stable
Origin:
?origin(___)
или ~O___
release o=___
Canonical
,Google, Inc.
,LP-PPA-dockbar-main
,Ubuntu
Проверьте тег origin (например,o=Debian) для каждого из ваших текущих репозиториев:
apt-cache policy | sed -n 's/.*o=\([^,]\+\).*//p' | uniq
искать пакеты из (или не от) конкретного происхождения:
aptitude search "?installed?origin(Debian)"
aptitude search "?installed?not(?origin(Debian))"
Это не подходит для аудита безопасности, так как он использует каждый репозиторий для предоставления собственной исходной информации, но может быть полезен для устранения неполадок происхождения пакетов, присутствующих в нескольких репозиториях.
для полноты: в системах Ubuntu вы также можете использовать Synaptic для этой задачи. В левой колонке вы можете отфильтровать пакеты по их происхождению.
Я нашел вот это :
aptitude search "?origin (<repository>) ?installed"
вы также можете найти список поисковых терминов, поддерживаемых "aptitude search"здесь.
сначала найдите соответствующий файл(ы) для интересующего репозитория в /var/lib/apt/lists. Это должно быть возможно сделать программно, но мне это не нужно.
использование Google chrome в качестве примера, попробуйте это:
SEARCH_PATTERN=dl.google.com_linux_chrome # adjust to suit your needs
for PKG in $( grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages | sed 's/^Package: //' )
do
if dpkg -s "${PKG}" 2> /dev/null 1> /dev/null
then
echo ${PKG}
fi
done
и я получаю выход:
google-chrome-stable
dpkg-s возвращает 0, если пакет установлен и ненулевое значение в противном случае. Для справочных целей в будущем вывод
grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages
был
Package: google-chrome-beta
Package: google-chrome-stable
Package: google-chrome-unstable
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]