Temukan paket yang diinstal dari repositori tertentu dengan aptitude

Jawaban:

17

Menggunakan aptitude, untuk mencari paket yang diinstal di luar cabang stabil, Anda dapat menggunakan:

aptitude search "?narrow(?installed,?not(?archive(stable)))"

Untuk melihat versi serta nama paket (dan bukannya deskripsi), Anda dapat menggunakan perintah dengan opsi format ( -Fsingkatnya), sebagai berikut.

aptitude search -F "%p %V %v" "?narrow(?installed,?not(?archive(stable)))"

Untuk format lebih lanjut, silakan lihat halaman manual (inilah dokumentasi dengan opsi yang tersedia .)

Itu berfungsi misalnya, di Debian jika Anda menginstal paket di luar Squeeze (dengan menjalankan, misalnya apt-get install -t sid package-name,.

Anda dapat melihat dari mana paket yang diinstal berasal dari apt-cache policy, penggunaannya adalah sebagai berikut:

apt-cache policy <package-name>

Sebagai contoh, paket python-numpy saya membuat keluaran berikut:

$ 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

Itu berarti saya satu versi di belakang cabang sid / main saat ini, jadi saya sudah menginstal versi sid-lama. Saya melihat saya tidak memiliki yang stabil karena belum 1.4.1-5, dan saya saat ini di 1.6.2-1.

Pada saat pengiriman paket ini sudah diperbarui:)

ssice
sumber
Saya lebih suka ?any-version(), karena ~narrow(pat1, pat2)sama ?any-version(pat1 pat2)dan mendukung ?any-version(pat1 pat2 pat3)tanpa terlihat bodoh.
Robert Siemer
18

Setelah membaca halaman info dari aptitude dan selusin upaya, saya akhirnya mendapatkan ini:

aptitude search '?narrow(?installed,?not(?archive(testing)) ?archive(unstable))'

atau (setara):

aptitude search '~S ~i (!~Atesting ~Aunstable)'

Ini akan mencari paket yang diinstal dari arsip tidak stabil dari repositori apa pun . Anda harus memfilter paket dari arsip default Anda (menguji contoh di atas).

Jika Anda ingin memfilter paket yang diinstal dari www.debian-multimedia.org/unstable:

aptitude search '~S ~i (!~Atesting ~Aunstable ?origin("Unofficial Multimedia Packages"))

Sunting: “Archive”, “origin” dll. Dikurangkan dari Releasefile repositori. Sayangnya tidak semua alat dapat melihat semua baris tersebut dan mereka menggunakan sintaks yang berbeda untuk mereka. Anda dapat menemukan file-file tersebut sebagai /var/lib/apt/lists/*Release. Atau cukup ketik apt-cache policyuntuk mendapatkan ikhtisar. apt-cache mengubah format outputnya: versi yang lebih baru menggunakan gaya apt_preferences.

  • Suite:atau Archive:(nama lama!)
    • pencarian bakat: ?archive(___)atau~A___
    • format bakat: %t
    • apt_preferences: release a=___
    • Ubuntu contoh: natty-backports, trusty-security,stable
  • Origin:
    • pencarian bakat: ?origin(___)atau~O___
    • format aptitude: n / a
    • apt_preferences: release o=___
    • Contoh Ubuntu: Canonical, Google, Inc., LP-PPA-dockbar-main,Ubuntu
  • semua jalur lainnya
    • aptitude: n / a
Christophe
sumber
15

Periksa tag asal (seperti o = Debian ) untuk masing-masing repositori Anda saat ini:

apt-cache policy | sed -n 's/.*o=\([^,]\+\).*/\1/p' | uniq

Kemudian cari paket dari (atau bukan dari) asal tertentu:

aptitude search "?installed?origin(Debian)"
aptitude search "?installed?not(?origin(Debian))"

Ini tidak cocok untuk audit keamanan karena bergantung pada setiap repositori untuk memberikan informasi asal sendiri, tetapi mungkin bermanfaat untuk memecahkan masalah asal paket yang hadir dalam beberapa repositori.

Anonim
sumber
2
aptitude searchPola Anda tidak bagus. - Mereka memilih seperti ini "daftar paket di mana satu versi diinstal, dan setiap versi lain ada di Debian" atau "beberapa versi diinstal, dan setidaknya satu versi dari paket itu tersedia di non-Debian". - Apa yang kita cari adalah “versi yang diinstal adalah dari Debian (atau tidak)”. Ini harus dilakukan dengan ?narrow()atau ?any-version().
Robert Siemer
Dikonfirmasi Saya sudah menginstal nemo-filerollerdari linuxmint, tetapi ada di Debian, juga. Jadi itu muncul dalam daftar, karena itu diinstal dan ada di suatu tempat dari Debian.
Boldewyn
6

Untuk kelengkapan: Di sistem Ubuntu Anda juga dapat menggunakan Synaptic untuk tugas ini. Di kolom kiri Anda dapat memfilter paket berdasarkan asalnya.

Boldewyn
sumber
Saya mencoba melakukan ini dan menemukan posting SU ini melalui Google, tidak percaya saya mengabaikan Synaptic, terima kasih!
David Claridge
@RobertSiemer Mungkin telah menyelinap perhatian Anda, bahwa saya menerimanya setelah dua hari tanpa jawaban yang memadai, dan sebelum ada jawaban lain masuk, saya menerimanya, karena itu memecahkan masalah saya . Saya juga mengangkat semua jawaban di kemudian hari , tetapi, saya mohon maaf, tidak pernah mengubah keadaan penerimaan. Anda juga akan mencatat di FAQ situs ini, bahwa saya belum memperoleh keuntungan reputasi dari langkah ini, di mana sebenarnya saya telah kehilangan 2 perwakilan karena tidak menerima jawaban orang lain . Jadi silakan mundur selangkah di masa depan sebelum menilai keputusan seseorang di depan umum dan pikirkan kembali kemungkinan penyebabnya.
Boldewyn
2

Saya telah menemukan ini:

aptitude search "?origin (<repository>) ?installed"

Anda juga dapat menemukan daftar istilah pencarian yang didukung oleh "pencarian bakat" di sini .

maks
sumber
Mengapa Anda perlu menjalankan ini sudo? Sepertinya saya bahwa ini juga berfungsi tanpa menjalankannya sebagai root.
Andre Holzner
Tidak perlu dijalankan dengan sudo
Kurtis Nusbaum
Ketika saya mengomentari @Anonim menjawab, ini tidak memiliki efek yang diinginkan.
Robert Siemer
2

Pertama, cari file yang sesuai untuk repositori yang menarik di / var / lib / apt / daftar. Seharusnya dimungkinkan untuk melakukan ini secara terprogram, tetapi saya tidak perlu melakukannya.

Menggunakan google chrome sebagai contoh, coba ini:

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

dan saya mendapatkan output:

google-chrome-stable

dpkg -s mengembalikan 0 jika paket diinstal dan bukan nol sebaliknya. Untuk keperluan referensi di masa mendatang, output dari

grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages

adalah

Package: google-chrome-beta
Package: google-chrome-stable
Package: google-chrome-unstable
coreyh
sumber
... apakah ini menggunakan bakat?
Robert Siemer
2
@RobertSiemer Bagaimana ini relevan? Pertanyaannya, dengan asumsi perintah bahasa Inggris yang masuk akal, adalah bagaimana menemukan sumber paket yang diinstal dengan aptitude . Tidak ada persyaratan bahwa solusinya menggunakan aptitude.
Auspex
@ Auspex, saya percaya sebaliknya. - Dan jangan khawatir, perintah bahasa Inggris saya melampaui "masuk akal" beberapa tahun yang lalu.
Robert Siemer
2
Tampaknya tidak ...
Auspex
2
@ Auspex: apakah Anda mencoba memprovokasi saya? Yang sebaliknya adalah benar: pertanyaannya adalah meminta solusi berdasarkan aptitude, bukan untuk paket yang diinstal dengan aptitude.
Robert Siemer
0

Jawaban lain sebenarnya salah, karena parameter ke ?archive()adalah ekspresi reguler. Jadi ?archive(stable)cocok dengan keduanya stabledan unstable. Untuk mengecualikan stableAnda hanya perlu jangkar pola regex:

aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^stable$")))'

Untuk mengecualikan beberapa repositori:

aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^(xenial|xenial-updates)$")))'

Perhatikan juga bahwa beberapa paket termasuk dalam beberapa repositori, mis xenial-security,xenial-updates. ?archive()mengevaluasi pola regex terhadap setiap repositori secara individual, sehingga ?archive("^xenial-updates$")akan cocok dengan semua paket milik xenial-updates, bahkan jika itu milik repositori lain juga.

Animisme
sumber