Eski paketlerin listesini nasıl edinebilirim?


19

Artık etkinleştirdiğim depolarda mevcut olmayan paketlerin bir listesini almak için bir yol bulmaya çalışıyorum. Bu iş istasyonu Ubuntu'nun birkaç versiyonundan geçmiştir ve birçok 3. taraf deposuna eklenmiş ve kaldırılmıştır. Bu kaldırılmış depolardan sahip olduğum yazılımların bir listesini almak istiyorum, böylece temizleyebilir veya uygun depoları geri ekleyebilirim.

Yanıtlar:


23
aptitude search '~o'

Yetenek, çok güçlü bazı aramalara sahiptir. Ne yazık ki sözdizimi biraz hantal ve belgeleri bulmak için manpage geçmiş kazmak zorunda, ama buna değer.

apt-show-sürümleri de yardımcı olabilir:

apt-show-versions | grep 'No available version'

1
eski paketler hakkında güzel bir makaleye bakın: raphaelhertzog.com/2011/02/07/…
Lluís

Başka bir kullanışlı listeapt-show-versions | grep "newer than version in archive"
Sean

Bence apt-show-versiyonları en iyisidir çünkü yetenek çizgisi hatırlanması son derece sezgiseldir. İhtiyacım olan her seferinde ben google / bakmak / kaydetmek / bir komut dosyası yapmak vb.
j riv

6

Kayıtlı Depo veya PPA'da olmayan uygulamaların bir listesini almak için şunu yapın:

sudo apt-get install apt-show-versions
apt-show-versions | grep 'No available version'

Bunun gibi metin çıktısı alınmalıdır:

app1 1.0.0.14 installed: No available version in archive
app23 0.3.6 installed: No available version in archive
app332 7.0.9377 installed: No available version in archive

Benim için bu çalıştı ve üç uygulama gösterdi DEB paketleri kullanarak yükledim ve bir Repo veya PPA mevcut değildi.

Ancak tüm programları kontrol etmenin imkansız olduğunu unutmayın, sadece geçenler dpkg. Örneğin, bazı uygulamalar yalnızca doğru klasörlere çıkarılarak yüklenir veya diğerleri bağımsız bir yükleyici kutusu veya komut dosyası kullanır. Bu yüzden en iyi yol, APT dışında herhangi bir yöntemle yüklediğiniz uygulamaların bir listesini tutmanızdır.


Tüm dpkgkurulu yerel paketlerim için çalışır. Bir istisna. Bu listeler skype-bin, oysa apt-cache policy skype-binaçıkça Kanonik ortağı repo gösterir. Neler olup bittiğinden emin değilim. Çoklu arşiv sorunu mu var? İçin hala +1 apt-show-versions!
gertvdijk

yetenek bu 'kullanılmayan' paketler olarak adlandırılır. Yukarıdaki kronit yorumuna bakınız.
Henk Poley

5

Eğer varsa yetenek yüklü kullanımını,

aptitude search '?obsolete'

veya kısa şekli

aptitude search '~o'

İşte bir örnek çıktı

i A gcc-4.7-base - GCC, the GNU Compiler Collection (base package)
id  libdb4.7     - Berkeley v4.7 Database Libraries [runtime]
i   libudev0     - libudev shared library

Her satırın ilk karakteri paketin geçerli durumunu gösterir. En yaygın durumlar:

  • p, yani sistemde paketin izinin bulunmadığı,
  • c, yani paket silinmiş ancak yapılandırma dosyaları sistemde kalmıştır,
  • i, yani paketin kurulu olduğu ve
  • v, yani paketin sanal olduğu anlamına gelir.

İkinci karakter , varsa paket üzerinde gerçekleştirilecek depolanmış eylemi gösterir, aksi takdirde bir boşluk görüntülenir. En yaygın eylemler:

  • i, yani paketin kurulacağı,
  • d, yani paketin silineceği ve
  • p, paketin ve yapılandırma dosyalarının kaldırılacağı anlamına gelir.

Üçüncü karakter A ise, paket otomatik olarak kurulur.

Olası durum ve eylem bayraklarının tam listesi için , yetenek başvuru kılavuzundaki Paket Bilgilerine Erişme bölümüne bakın .


1
aptitude search ?obsoletebash içinde çalışabilir, ancak kullanmalısınızaptitude search '?obsolete'
AB

Çıktıyı ayrıştırma konusunda biraz ayrıntı ekleyebilir misiniz?
Elder Geek

'? Eski' '~ o' dan farklı mıdır?
Sean

@Sean Hayır, farklı değiller. Gerçekten eskimiş için kısa biçimdir.
Demis Palma ツ

Alıntılar kabuk tarafından ayrıştırılır. Bence AB'nin anlamı, komut satırından kaçan garip karakteri geçmemelisiniz çünkü kabuğunuzun onlarla ne yapacağını bilmiyorsunuz.
Sean

2

Ubuntu 19.10'dan başlayarak çalıştırmak da mümkündür

apt list ?obsolete

kullanılmayan paketlerin listesini almak için.

Herhangi bir sürüm için aşağıdaki Bash tek astarını kullanabilirsiniz:

comm -23 <(dpkg-query -W -f '${db:Status-Abbrev}\t${Package}\n' | grep '^.[^nc]' | cut -f2 | sort) <(apt-cache dumpavail | sed -rn 's/^Package: (.*)/\1/p' | sort -u)

Bunun için fazladan paket kurmaya gerek yok, ayrıca bu nispeten hızlı. Bu ayrıca kısmen yüklenmiş paketleri de bulur (ancak yalnızca yapılandırma dosyaları kalan; kolay değiştirilebilen paketleri bulamaz). Not: Bu, paketlerin hangi mimaride olduğu ile ilgilenmez.

Depolarda mevcut olandan farklı bir sürümü yüklü paketleri eklemek istiyorsanız, aşağıdakilerden birini yapabilirsiniz:

Modern apt kullanın:

 apt list --installed | awk -F/ '/\[installed,local\]/{print $1}'

Yine başka bir seçenek koşmaktır

ubuntu-support-status --show-unsupported

ve "Artık indirilemez:" bölümünün altındaki paket adlarını okuyun.


'apt list - manuel kurulum | grep -v cosmic 'yanlış pozitifleri gösterir. Bu cevap çok daha iyi!
TamusJRoyce

1
@TamusJRoyce, evet, sanırım şimdi düzenledikten sonra.
jarno

1

Araştırılacak daha fazla bilgi.

ubuntu-destek-durum 
echo "$ (sudo apt-mark showmanual | wc -l) paketleri 'manuel olarak yüklendi' olarak işaretlendi."

... ubuntu-support-status ve apt-mark kurulum gerektirebilir.


Kullanmaya gerek sudoile apt-mark showmanual.
jarno

ubuntu-support-statuskullanılmayan paketlerin sayısını listeler, ancak paket adlarını listeler.
jarno

1
ubuntu-support-status --help
Çıktısını

Oh, ipucu için teşekkürler.
jarno

0

Daha temiz bir yol olabilir, ama başımın üstünden yapabilirsin

dpkg -l | cut -f 3 -d ' ' > installed
xargs -n 1 --replace=X apt-cache search ^X$ < installed | cut -f 1 -d ' ' > available
diff installed available

installedDosyanın ilk birkaç satırını temizleyin : üstbilgileri olacaktır.

Eğer kimse benim sözdizimi vurgulama düzeltmek eğer ...


2
dpkg -lkurulu paketlerin bir listesini almak için çıkışını kullanacaksanız, sonuçları ikinci sütundaki 'i' ile sınırlandırmalısınız, çünkü dpkg ayrıca kurulu olmayan (belki kaldırılmış ancak temizlenmemiş) paketleri de listeleyecektir . örnek olarak, ilk komutunuzu değiştirmek, dpkg -l | grep '^.[^i]' | cut -f 3 -d ' ' kurulu DEĞİLDİR paketlerin bir listesini döndürür. (ama bir zamanlar)
güveç

1
Ayrıca, apt-cache search someinstalledpackagepaket bir repo mevcut olmasa bile bir şey dönecektir, bu yüzden bu işe yarayacağına inanmıyorum.
güveç

1
@stew Birinin sonuçlara varıp ulaşmadığını görmek için bunu burada bırakacağım, ancak cevabınız kesinlikle çok daha iyi. Size + 1'leyin.
Jeff Ferland

@stew dpkg -l | grep '^.[^i]' | cut -f 3 -d ' 'ayrıca bazı başlık çizgileri de yazdırır.
jarno

Bu cevap işe yarasa bile, apt-cache searchher paket için ayrı çalışacağı için çok yavaş olacaktır .
jarno

0

Belirtildiği gibi apt-get arama, bir paketin hala mevcut olup olmadığını kontrol etmek için iyi bir yöntem değildir. Ek Her şeyi sadece bir satıra ekledim:

for i in `dpkg -l | grep '^i' | awk '{ print $2 }'`; do apt-cache show $i > /dev/null || echo $i; done

Ve nedengrep '^i'
AB

@AB iyi bir nokta; paketin yüklü olup olmadığını söylemez, ancak paketin istenen eyleminin yükleneceğini belirtir. Daha man dpkg-queryfazla bilgi için bakınız .
jarno

Bu çok yavaş
jarno

apt-cache showpaketin mevcut olup olmadığını kontrol etmek için ne iyi. İlgili havuzu devre dışı bırakırsanız ve başka bir etkin depoda yoksa, yine de paketi gösterir.
jarno
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.