Açıkça yüklenmiş paketleri listeleme


53

Gentoo'da /var/lib/portage/worldaçıkça kurduğum paketleri içeren dosya var. Açıkça kastediyorum, seçtiğim, varsayılan olarak yüklenen veya bağımlılıkların çektiği hiçbir şeyi içermeyen paketleri.

Ubuntu'da bu bilgiyi bulmak için benzer bir dosya veya komut var mı?

Yanıtlar:


46

Sadece kod

aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \
  | cut -f1 | sort -u > defaultinstalled.txt
comm -23 currentlyinstalled.txt defaultinstalled.txt

açıklama

Bu sorunu düşünmenin bir yolu, bunu üç bölüme ayırmaktır:

  • Bağımlılık olarak kurulmayan paketlerin listesini nasıl alabilirim?
  • Varsayılan olarak kurulu paketlerin listesini nasıl alabilirim?
  • Bu iki liste arasındaki farkı nasıl öğrenebilirim?

Bağımlılık olarak kurulmayan paketlerin listesini nasıl alabilirim?

Aşağıdaki komut sistemimde çalışıyor gibi görünüyor:

$ aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt

Benzer yaklaşımlar, Gilles'un soruya yorum olarak gönderdiği bağlantılarda da bulunabilir. Bazı kaynaklar, bunun yalnızca paketleri yüklemek için bir yetenek kullanmanız durumunda çalışacağını iddia eder; Ancak, paketleri yüklemek için neredeyse hiçbir zaman yetenek kullanmıyorum ve bunun hala işe yaradığını buldum. Özelliğin --disable-columns, paket isimlerinin satırlarının aşağıdaki karşılaştırmayı engelleyebilecek boşluklarla dolmasını önler. | sort -uSıralar dosya ve çiftleri kaldırır. Bu, son adımı çok daha kolay hale getirir.

Varsayılan olarak kurulu paketlerin listesini nasıl alabilirim?

Not: Bu bölüm açıklayıcı olduğunu düşündüğüm bir 'yanlış yol' ile başlamaktadır. İkinci kod ise işe yarayan koddur.

Bu biraz daha zorlu. Başlangıçta iyi bir yaklaşımın ubuntu-minimal, ubuntu-standart, ubuntu-masaüstünün ve çeşitli linux çekirdeği ile ilgili paketlerin meta paketlerine bağımlı olan paketlerin tümü olacağını düşündüm. Google aramalarındaki birkaç sonuç bu yaklaşımı kullanıyor gibiydi. Bu bağımlılıkların bir listesini almak için önce aşağıdakileri denedim (işe yaramadı):

$ apt-cache depends ubuntu-desktop ubuntu-minimal ubuntu-standard linux-* | awk '/Depends:/ {print $2}' | sort -u

Bu varsayılan olarak gelmek zorunda olduğumu bildiğim bazı paketleri dışarıda bırakıyor gibi görünüyor. Meta paketlemelerin doğru listesini oluşturursa, bu yöntemin işe yarayacağını düşünüyorum.

Ancak, Ubuntu aynalarının varsayılan kurulumda tüm paketleri içeren bir "manifest" dosyası içerdiği anlaşılmaktadır. Ubuntu 12.04.3 için bildirim burada:

http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest

Bu sayfayı (veya size daha yakın olan bir aynanın sayfasını) ararsanız:

http://mirror.pnl.gov/releases/precise/

Kullandığınız sürüme ve mimariye karşılık gelen ".manifest" dosyasını bulabilmelisiniz. Sadece paket isimlerini çıkarmak için şunu yaptım:

wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f1 | sort -u > defaultinstalled.txt

Liste muhtemelen zaten sıralı ve benzersizdi, ancak bir sonraki adımı kolaylaştırmak için doğru sıralandığından emin olmak istedim. Daha sonra çıkışı koydum defaultinstalled.txt.

Bu iki liste arasındaki farkı nasıl öğrenebilirim?

Unix benzeri sistemlerin çoğunun bunu yapmak için birçok aracı olduğundan, bu en kolay bölümdür. commAracı Bunu yapmak için birçok yollardan biridir:

comm -23 currentlyinstalled.txt defaultinstalled.txt

Bu, ilk dosyaya özgü satırların listesini yazdırmalıdır. Bu nedenle, varsayılan kurulumda olmayan yüklü paketlerin bir listesini yazdırmalıdır.


İlk boru hattınız ne aptitude search '~i!~M' -F %pyapmaz?
efemient

@ephemient: Muhtemelen hiçbir şey. Yetenek hakkında pek bir şey bilmiyorum ve bu yüzden asla kullanmadığım bir programın dosyasını araştırmak yerine aşina olduğum araçlar kullandım.
Steven D

1
Sen benim
umudumu mahvedersin

3
Bu neredeyse işe yarıyor ama yine de doğru değil. Sonuç listesinde yer alan ve kesinlikle el ile yüklemediğim çok sayıda paket ve kitaplık var. Kullandım http://releases.ubuntu.com/releases/trusty/ubuntu-14.04-desktop-amd64.manifestve ek | sed "s/ *$//"ama hala zar yok.
jmiserez

1
Bağımlılık olarak kurulmayan paketlerin bir listesini alan ilk adım, apt-mark showmanual | sort -udiğer cevaplarda gösterildiği gibi değiştirilebilir . Daha basit ve aptitudevarsayılan olarak kurulmadığına güvenmez .
skagedal

24

Bu iki tek gömleklerden birini kullanabilirsiniz. Her ikisi de makinemde aynı çıktıyı veriyor ve bu soruda şimdiye kadar (Temmuz 2014) önerilen tüm çözümlerden daha kesin. İki cevap (1) ve (2) ' nin bir birleşimidir . Bu cevabı başlangıçta buraya gönderdiğimi unutmayın .

Kullanarak apt-mark:

comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Kullanarak aptitude:

comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Bunları şüpheli rağmen çok az paketler hala çatlaklardan düşme vardır aslında kullanıcı tarafından yüklenmiş, ya doğru dil lokalizasyonu kurulum sayesinde kurulumdan sonra veya totem codec'i yükleyici üzerinden örneğin. Ayrıca, linux başlık sürümleri de, yalnızca sürüme özgü olmayan bir meta paketi yüklememe rağmen, birikmiş görünüyor. Örnekler:

libreoffice-help-en-gb
openoffice.org-hyphenation
gstreamer0.10-fluendo-mp3
linux-headers-3.13.0-29    

O nasıl çalışır

  1. Elle kurulmuş paketlerin listesini alın. Yetenek için, ek sed, sıranın sonunda kalan boşlukları çıkarır.
  2. Yeni bir kurulumdan hemen sonra kurulan paketlerin listesini alın.
  3. Dosyaları karşılaştırın, yalnızca dosya 1'de olmayan ve dosya 2'de bulunmayan satırları verin.

Diğer olasılıklar da işe yaramaz:

  • Kullanılması ubuntu-14.04-desktop-amd64.manifestdosya ( burada yerine Ubuntu 14.04 için) /var/log/installer/initial-status.gz. Daha fazla paket, olmasalar bile elle yüklenmiş olarak gösterilir.
  • Kullanılması apt-mark showautoyerine /var/log/installer/initial-status.gz. apt-markdiğer dosya ise, örneğin xserver-xorg paketini içermez.

Her ikisi de yukarıdaki çözümden daha fazla paket listeler.


İlk kurulumunuzdan bu yana sisteminizi yükselttiyseniz (sanırım çoğu insan için geçerlidir), mevcut Ubuntu sürümünüzün açık dosyasını kullanmak daha iyidir.
Diego V

Yükseltme yaptıysanız, yalnızca bildirim dosyasını değil, her iki dosyayı da kullanmanız gerektiğini düşünüyorum. Bunu başka bir karşılaştırma ekleyerek kolayca yapabilirsiniz. Bildiri dosyası maalesef initial_status.gz dosyasının içerdiği her şeyi içermiyor (kontrol ettim).
jmiserez

Etkilendim! Ancak eksik bir parça buldum. Başlangıçta kurulmuş , ancak daha sonra açıkça el ile yeniden yüklenen, ancak sonra açıkça elle kaldırılan paketler ? Bunu çalışan bir sistemde buldum.
n611x007


1
Bu kabul edilen çözümden daha iyidir, çünkü kabul edilen çözümdeki mirror.pnl.gov/releases/precise/… URL’si şimdi
404'tür

9

Göre man apt-mark:

apt-mark showauto
apt-mark showmanual

2
showmanualxserver-xorg-video-vesael ile yüklemediğim yemin ederim gibi şeyler gösteriyor .
phunehehe

Muhtemelen ilk kurulumda dağıtımınız tarafından otomatik olarak yüklenir.
Matt

8

İşte bazı örnek çıktı cat /var/log/apt/history.log:

Start-Date: 2011-01-22  00:43:38
Commandline: apt-get --target-release experimental install libdbus-1-dev
Upgrade: libdbus-1-3:i386 (1.4.0-1, 1.4.1-1), libdbus-1-dev:i386 (1.4.0-1, 1.4.1-1)
End-Date: 2011-01-22  00:43:48

Start-Date: 2011-01-23  01:16:13
Commandline: apt-get --auto-remove purge webcheck
Purge: python-utidylib:i386 (0.2-6), python-beautifulsoup:i386 (3.1.0.1-2), libtidy-0.99-0:i386 (20091223cvs-1), webcheck:i386 (1.10.3)
End-Date: 2011-01-23  01:16:31

Sorunuz gelince, maddeleri grep ( cat /var/log/apt/history.log | grep Commandline) ile filtreleyin .

Bu dosyaların döndürüldüğünü unutmayın, bu nedenle başkalarını kontrol edin;

$ ls /var/log/apt/history.log*
-rw-r--r-- 1 root root 69120 2011-01-23 18:58 /var/log/apt/history.log
-rw-r--r-- 1 root root 19594 2011-01-01 02:48 /var/log/apt/history.log.1.gz

NOT :

  • Her iki kontrol ettim yeteneğe ve sinaptik (sürüm 0.70 ve 0.6.3 sırasıyla) ve ikisi de bu günlük dosyası üzerindeki günlük faaliyetleri. Onlarla ilgili tek gerileme, onların başlangıç ​​çizgisine sahip olmamasıdır Commandline, bu yüzden grephile onlarla çalışmaz.

2
İlginç bir çözüm. Yalnızca bir paket listesi almak ve yüklenen paketleri aptitudeve diğer paket yöneticilerini hesaba katmak için grep komutunu biraz ayarlamanız gerekir . Tomruklarınız uzağa döndüyse, şansınız yaver gitmez.
Steven D

@steven Güncellendi. Grep-fu acemilerden biri, bu yüzden bunu okuyucuya bırakacağım. Ayrıca, bir şeyin dönüp dönmediğini bilmiyorum. Sadece içerideki dosyaları kendim yapmalıyım.
tshepang

Dönüp dönmemeleri logrotate kurulumunuza ve sisteminizin ne kadar süre bulunduğuna bağlı olacaktır. Onları değiştirdiğimden bu yana uzun zaman geçtiğinden Ubuntu varsayılanlarından emin değilim.
Steven D

7

Bu sorguyu ararken bu güzel oneliner ile karşılaştım

Bir astar

comm -13 \
  <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
  <(comm -23 \
    <(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
    <(apt-mark showauto | sort) \
  )`

Bu oneliner, sistem tarafından yüklenen paketleri günlüklerden /var/log/installer/initial-status.gz

Bağlantıyı bulduğumda orijinal konuya göndereceğim, çünkü bu oneliner benim değil ve nerede gördüğümü hatırlamıyorum.


3

Bu makaleye bir göz atmak istersiniz .

Makalenin sonunda istediğinizi yapması gereken bir python betiği var.

(K) ubuntu için yazılmıştır . ama Ubuntu için de çalışmalı .


3
bağlantı artık çalışmıyor gibi görünüyor.
rog

2
Bunun gibi kopuk bağlantılar, cevabınıza alakalı bilgileri dahil etmenin önemli olmasının nedenidir.
whitehat101

2

Aşağıda Steven D'nin cevabına bir ektir .

Aşağıdaki satır 32 karakterde paket adlarını kısaltıyor gibi görünüyor:

aptitude search '~i !~M' | cut -d" " -f4 | sort -u > currentlyinstalled.txt

Bu iş gibi görünüyor:

aptitude search '~i !~M' -F "%p" > sort -u > currentlyinstalled.txt

bkz Bu yanıtı



1

Ayrıca dosyaya da bakabilirsiniz /var/lib/apt/extended_states.

cat /var/lib/apt/extended_states | grep -B2 'Auto-Installed: 0'

Eski bir bölüme nelerin yüklendiğini bilmek istiyorsanız, bu kullanışlıdır.


0

Bir betiğin cevheri ile gelenlere çok teşekkürler ve tebrikler !!!
Ben 2 add eklemek istedim ve $ info adresinden çıkardığım kurulum tarihini takip ettim.
$ İnfo dosyalarının neden güncellenip güncellenmediği ve ne zaman güncellenmediği konusunda ustalaşmadım, ancak pratikte çalışıyor.
Komut dosyam, kurulumdan sonra eklenen bağımlılık olmayan paketlerin en son güncellemelerini listeler.
Periyodik bir kontrol yaparak, tek bir bayan olmadan el ile ne giriş yapmış olacağımı görüyordum.
Yani, aynı sebepten ötürü paket paketleri kuruldu. Maalesef, güncellemeler bu siparişi bozuyor.
Bir sistem güncellemesinden sonra, güncellemenin güncellemediği ve eklediği paketlerin bir listesini ekledim.
Temiz! Keyfini çıkarın.

info='/var/lib/dpkg/info/'

comm -13 > /tmp/packages \
  <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
  <(comm -23 \
    <(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
    <(apt-mark showauto | sort) \
  )

while read n; do
  echo $(ls -ltr --time-style=long-iso $info$n.* $info$n:i386.* $info$n:amd64.* 2>/dev/null \
    | tail -n 1 | perl -pe 's/.*([0-9]{4}?-.*:[0-9]{2}?).*/\1/') $n
done < /tmp/packages | sort
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.