Bu soruya benzer bir şey arıyorum: Zypper: Belli bir havuzdaki tüm paketleri nasıl görüntülerim?
Ubuntu’da olduğum için, yetenek temelli bir çözüme ihtiyacım var: Belirli bir havuzdan kurulu paketlerin listesini nasıl alabilirim ?
Bu soruya benzer bir şey arıyorum: Zypper: Belli bir havuzdaki tüm paketleri nasıl görüntülerim?
Ubuntu’da olduğum için, yetenek temelli bir çözüme ihtiyacım var: Belirli bir havuzdan kurulu paketlerin listesini nasıl alabilirim ?
Yanıtlar:
Özelliği kullanarak, kararlı dalın dışındaki yüklü paketleri aramak için şunları kullanabilirsiniz:
aptitude search "?narrow(?installed,?not(?archive(stable)))"
Paket adlarının yanı sıra sürümleri (ve açıklamaların yerine) görmek için bu komutu -F
aşağıdaki gibi ( kısa seçeneği ) biçimiyle birlikte kullanabilirsiniz .
aptitude search -F "%p %V %v" "?narrow(?installed,?not(?archive(stable)))"
Daha fazla format için lütfen kılavuz sayfasına bakınız (burada boşuna seçenekler bulunur ).
Bu, örneğin Squeeze dışında bir paket kurduysanız Debian'da işe yarar (örneğin, çalıştırarak apt-get install -t sid package-name
.
Yüklü bir paketin nereden geldiğine bakabilirsiniz apt-cache policy
, kullanım aşağıdaki gibidir:
apt-cache policy <package-name>
Örneğin, benim python-numpy paketim şu çıktıyı veriyor:
$ 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
Bu, şu anki sid / main şubesinin ardında bir versiyon olduğum anlamına geliyor, bu yüzden eski bir sid versiyonum var. Kararlı olana sahip 1.4.1-5
değilim, çünkü henüz var ve şu an da varım 1.6.2-1
.
Gönderim sırasında bu paket zaten güncellendi:)
Yetenek ve bir düzine deneme sayfasını okuduktan sonra nihayet şunu anladım:
aptitude search '?narrow(?installed,?not(?archive(testing)) ?archive(unstable))'
veya eşdeğer) :
aptitude search '~S ~i (!~Atesting ~Aunstable)'
Herhangi bir havuzun dengesiz arşivlerinden yüklenen paketleri arayacaktır . Paketleri varsayılan arşivinizden filtrelemeniz gerekir (yukarıdaki örnekte test edilir).
Www.debian-multimedia.org/unstable adresinden yüklenen paketleri filtrelemek istiyorsanız:
aptitude search '~S ~i (!~Atesting ~Aunstable ?origin("Unofficial Multimedia Packages"))
Düzenleme: “Arşiv”, “kaynak” vb Release
. Depo dosyasından düşülür . Ne yazık ki, tüm araçlar bu satırlara bakamaz ve onlar için farklı sözdizimi kullanırlar. Bu dosyaları olarak bulabilirsiniz /var/lib/apt/lists/*Release
. Ya da sadece apt-cache policy
genel bakış için yazın. apt-cache çıkış biçimini değiştirdi: daha sonraki sürümlerde apt_preferences stilini kullanın.
Suite:
veya Archive:
(eski isim!)
?archive(___)
veya~A___
%t
release a=___
natty-backports
, trusty-security
,stable
Origin:
?origin(___)
veya~O___
release o=___
Canonical
, Google, Inc.
, LP-PPA-dockbar-main
,Ubuntu
Mevcut depolarınızın her biri için kaynak kodunu ( o = Debian gibi) inceleyin :
apt-cache policy | sed -n 's/.*o=\([^,]\+\).*/\1/p' | uniq
Ardından, belirli bir kaynaktan gelen (ya da olmayan) paketleri arayın:
aptitude search "?installed?origin(Debian)"
aptitude search "?installed?not(?origin(Debian))"
Bu, bir güvenlik denetimi için uygun değildir , çünkü kendi kaynak bilgisini sağlamak için her bir depoya dayanır, ancak birden fazla depoda bulunan paketlerin kökenini gidermede yardımcı olabilir.
aptitude search
desenler iyi değildir. - “Bir versiyonun kurulduğu paketleri ve Debian'da başka bir versiyonun var olduğunu” veya “bazı versiyonların kurulu olduğunu ve bu paketin en az bir versiyonunun Debian olmayan versiyonunda mevcut” şeklinde seçtiklerini söylediler. - Aradığımız şey “kurulu sürüm Debian'dan (ya da değil)”. Bu ?narrow()
veya ile yapılmalı ?any-version()
.
nemo-fileroller
gelen linuxmint
, ancak var Debian
da. Böylece listede görünüyor, çünkü yüklü ve Debian'ın bir yerinde var.
Bütünlüğü sağlamak için: Ubuntu sistemlerinde bu görev için Synaptic'i de kullanabilirsiniz. Sol sütunda paketleri kökenlerine göre filtreleyebilirsiniz.
Bunu buldum:
aptitude search "?origin (<repository>) ?installed"
Ayrıca "yetenek arama" tarafından desteklenen arama terimlerinin bir listesini bulabilirsiniz burada .
sudo
? Bana öyle geliyor ki, aynı zamanda onu root olarak çalıştırmadan da çalışıyor.
İlk olarak, / var / lib / apt / list'deki ilgilenilen havuz için uygun dosyaları bulun. Bunu programlı bir şekilde yapmak mümkün olmalı, ama buna ihtiyacım olmadı.
Google chrome'u örnek olarak kullanarak şunu deneyin:
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
ve çıktıyı alıyorum:
google-chrome-stable
Paket kuruluysa, dpkg -s 0 döndürür, aksi takdirde sıfır döndürür. Gelecekteki referans amaçları için, çıktı
grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages
oldu
Package: google-chrome-beta
Package: google-chrome-stable
Package: google-chrome-unstable
Diğer cevaplar aslında yanlıştır, çünkü parametresi ?archive()
normal bir ifadedir. Böylece ?archive(stable)
hem stable
ve hem de eşleşir unstable
. Dışlamak stable
için, regex desenini tutturmanız gerekir:
aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^stable$")))'
Birden fazla depoları hariç tutmak için:
aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^(xenial|xenial-updates)$")))'
Ayrıca bazı paketler örneğin birden çok veri havuzunda ait olduğuna dikkat xenial-security,xenial-updates
. ?archive()
regex şablonunu her depoya karşı ayrı ayrı değerlendirir, böylece diğer depolara ait olsa bile, ?archive("^xenial-updates$")
ait olduğu paketlerle eşleşir xenial-updates
.
?any-version()
, çünkü~narrow(pat1, pat2)
aynı?any-version(pat1 pat2)
ve?any-version(pat1 pat2 pat3)
aptal görünmeden destekliyor .