Я шукаю щось аналогічне цьому питанню: Zypper: Як відобразити всі пакунки з певного сховища?
Оскільки я перебуваю на Ubuntu, мені потрібно рішення, що базується на придатності: Як я можу отримати список встановлених пакетів з певного сховища?
Я шукаю щось аналогічне цьому питанню: Zypper: Як відобразити всі пакунки з певного сховища?
Оскільки я перебуваю на Ubuntu, мені потрібно рішення, що базується на придатності: Як я можу отримати список встановлених пакетів з певного сховища?
Відповіді:
Використовуючи придатність, щоб шукати встановлені пакети за межами стабільної гілки, ви можете використовувати:
aptitude search "?narrow(?installed,?not(?archive(stable)))"
Для перегляду версій, а також назв пакетів (і замість описів) ви можете скористатися командою з опцією форматування ( -F
коротко), як описано нижче.
aptitude search -F "%p %V %v" "?narrow(?installed,?not(?archive(stable)))"
Для більшого кількості форматів, будь ласка, подивися на сторінках керівництва (Ось документації з толком. Варіанти ).
Те , що працює, наприклад, в 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
, і я зараз перебуваю 1.6.2-1
.
На момент подання цього пакета вже оновлено:)
Прочитавши інформаційну сторінку здібності та десяток спроб, я нарешті зрозумів:
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"))
Редагувати: "Архів", "походження" тощо вилучаються з 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
Вивчіть початковий тег (наприклад, o = Debian ) для кожного вашого поточного сховища:
apt-cache policy | sed -n 's/.*o=\([^,]\+\).*/\1/p' | uniq
Потім шукайте пакети з (чи ні) конкретного походження:
aptitude search "?installed?origin(Debian)"
aptitude search "?installed?not(?origin(Debian))"
Це не підходить для аудиту безпеки, оскільки він покладається на кожне сховище, щоб надати власну інформацію про походження, але це може бути корисно для усунення неполадок походження пакетів, які присутні у кількох сховищах.
aptitude search
зразки непогані. - Вони вибирають, як цей "список пакетів, де встановлена одна версія, а будь-яка інша версія існує в Debian" або "інстальована якась версія, і принаймні одна версія цього пакета доступна в не для Debian". - Що ми шукаємо, це “встановлена версія від Debian (чи ні)”. Це потрібно зробити за допомогою ?narrow()
або ?any-version()
.
nemo-fileroller
з linuxmint
, але він існує і в Debian
. Тож воно з’являється у списку, оскільки він встановлений та існує десь із Debian.
Для повноти: У системах Ubuntu ви також можете використовувати Synaptic для цього завдання. У лівій колонці ви можете фільтрувати пакети за їх походженням.
Я знайшов це:
aptitude search "?origin (<repository>) ?installed"
Ви також можете знайти список пошукових термінів , підтримуваних «профпридатність пошуку» тут .
sudo
? Мені здається, що це також працює, не запускаючи його як root.
Спочатку знайдіть відповідні файли (файли) для сховища, що цікавить / var / lib / apt / списки. Це має бути можливо зробити програмно, але мені цього не потрібно було.
Використовуючи 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
Інші відповіді насправді невірні, оскільки параметр to ?archive()
є регулярним виразом. Так ?archive(stable)
відповідає stable
і unstable
. Для виключення просто stable
потрібно закріпити схему регулярного вираження:
aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^stable$")))'
Щоб виключити кілька сховищ:
aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^(xenial|xenial-updates)$")))'
Також зауважте, що деякі пакети належать до декількох сховищ, наприклад xenial-security,xenial-updates
. ?archive()
оцінює шаблон регулярного вираження для кожного сховища окремо, тому ?archive("^xenial-updates$")
відповідає всім пакетам, що належать xenial-updates
, навіть якщо він також належить до інших сховищ.
?any-version()
, тому що~narrow(pat1, pat2)
це те саме, що?any-version(pat1 pat2)
і підтримує,?any-version(pat1 pat2 pat3)
не виглядаючи дурним.