Kullanıcının yüklediği tüm paketleri bul


38

Bir Ubuntu sistemindeki kullanıcı tarafından kurulan tüm paketlerin bir listesini, yani varsayılan yüklü paketlerin üstüne yüklenen paketleri bulmanın bir yolu var mı?

(Fikir, aynı paketleri temiz bir Ubuntu kurulumuna kurmak için kullanılabilecek kapsamlı bir liste elde etmektir)

Yanıtlar:


15

Şu dosyalara bak.

  1. ' /var/log/installer/initial-status.gz' - ana kurulumunuz
    • Bu dosya tarihi sizin kurulum tarihiniz olacaktır (sanırım)
    • ' /var/log/dpkg.log' güncelleme zaman çizelgesi (istediğiniz budur)
    • ' /var/log/apt/term.log' - aptsisteminizde güncellenen şeyler
    • ' kurulum için indirilen paketleri /var/cache/apt/archives/'içerecekdeb

Güncelleme: yeni kurulumların tam listesi için aşağıdaki iki adımı kullanın:

  1. yürütün: grep -w install /var/log/dpkg.log > full-list.log
  2. /var/log/installer/initial-status.gzZaman damgasının ötesindeki çizgilere bakın

Bu paketlerle başka bir sistemde temiz bir kurulum yapmak istediğiniz için, 'deb' dosyalarını 'önbellek / apt / archives' yolundan yeni kurulumunkine kopyalayıp tek seferde yükleyebilrsiniz (indirmeden) yine onlar).


Bahşiş için teşekkürler. Bu listeyi almak için tek bir komut daha aramaya başladığım halde işe yarar. cat /var/log/dpkg.log | grep 'install', kurulum tarihine / saatine kadar yüklenen öğeleri göz ardı edersem yakınlaşıyor gibi görünüyor
Rabarberski

Aşağı oylama için bir sebep eklemek, varsa bir cevaptaki sorunu anlamaya yardımcı olacaktır. Ayrıca gelecekte daha iyi cevaplara yol açacaktır.
nik

Oeps, aşağı oylama yanlışlıkla benim oldu. Cevabınızı zaten aldım. Cevabınızı 'final' olarak işaretlemeye çalıştığımda, işaretimi tıklayıp aşağı oylama okuna bastım. Geri almayı denemek için şu mesajı görüntüledi: "Bu cevap değiştirilmedikçe oy değiştirilemeyecek kadar eski." Üzgünüm nik, hem olumsuz hem de karışıklık için. :-(
Rabarberski

@Rabarberski, iyi oldu ... zarar vermedi.
nik

Bir sunucu kurulumunda olduğu gibi / var / log / installer mevcut değilse çalışmaz. Ayrıca "Ubuntu" hakkında konuşuyorsanız VERSION NUMBERS öğesini eklemek mantıklı olacaktır - hangi Ubuntu?

8

Sırıtış için, başlangıçta kurulanlar ve otomatik olarak kurulan paketler hariç, elle yüklenen paketleri ortaya çıkaran tek bir astar (burada netlik için bölünür) bir araya getirdim :

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 hem çalışır bashve de zsh.


Bu, ilk kurulum sırasında yüklenen bir grup kütüphaneyi yazdırmak dışında, neredeyse mükemmel çalışıyor. Bir sürü var libtiff, libxcbkendimi yüklemek vermedi, vb. Bu cevap: superuser.com/a/105000/24349 , kurulum zamanına göre sıralama yaparak ve sistem kurulum zamanından önce her şeyi kaldırarak halleder. Büyük (ab) kabuk kullanımı!
haxney

3

Yukarıdaki bilgilere dayanarak, elle yüklenen paketleri listelemek için kısa bir Python betiği yazdım. Bu bağlantıya bakınız .

Sorumluluk almamama rağmen, kullanmaktan çekinmeyin. Ancak, geribildirim ve önerileriniz her zaman beklerim.


Parlak! Çalıştırması biraz zaman alıyor, ama tam ihtiyacım olan şeyi yapan bulduğum tek çözüm bu!
haxney

2
Maalesef bağlantı şimdi koptu (bir python geri izleme gösteriyor), cevabı buraya koymanın değerini gösteriyor (özellikle "kısa bir python senaryosu" için)
David Ljung Madison Stellar

Komut dosyasıyla bir github deposu bulundu: github.com/gerjantd/bin/blob/master/… İndirmek için 'raw' düğmesine tıklayın ve 'python list_manually_installed_packages.py' ile çalıştırın
Madison Ljung Madison Stellar

2
Github bağlantısı şimdi de koptu ...
Suzana


1

tutarlı bir geçmişiniz olduğunu ve yetenek kullandığınızı varsayarsak:

history | grep -e "^..... aptitude install"

sadece yetenek yükleme ile yüklediğiniz paketleri listelerdi ...


1

Bu bir kesmek iş, ama tamamen işe yarıyor.

İlk önce http://releases.ubuntu.com/maverick/ (ya da hangi Ubuntu sürümünü kullanıyorsanız) adresine gidin ve kullandığınız *.manifest fileUbuntu sürümüyle ilişkili olanı yakalayın .

Ardından, aşağıdaki betiği çalıştırın (değiştirerek <manifest file>, köşeli parantezleri ve hepsini, indirdiğiniz > outputdosya yoluyla. Bir dosya dökümü yapmak için her zaman sonuna kadar ekleyebilirsiniz .

diff --suppress-common-lines <(sed 's/ .*//' <manifest file>) <(dpkg --get-selections | sed 's/[ \t].*//') | grep '>' | sed 's/[>] //'

1

Teşekkürler geekosaur, hoş kod. Kullandım ama nasıl çalışacağını bulmak biraz zaman aldı. İşte Ubuntu 11.10'da nasıl yaptım - bash terminalinde çalışıyor:

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) \
  ) > user-installed-packages

Sonra bir sekme eklemek için \t— —ve installher satıra:

sed 's/$/\tinstall/' user-installed-packages >uip

Sonra yeni makinede:

sudo dpkg --set-selections < uip

Ve paketleri kurmak için:

sudo apt-get dselect-upgrade

0

Bunu yapmanın başka bir yolu da, ilk gereksinimlerinize göre kurulacak temel paketleri belirleyen “görevlerinize” göre ne yüklendiğini tespit etmektir.

tasksel --list-tasks

En azından sahip olacaksın server. Ancak, daha fazlasına sahip olmayı seçebilirsiniz. Yüklemiş olduğunuz bu görevlerin her biri için, aşağıdaki komutu yükleyen paketlerin bir listesini alabilirsiniz, kurulumumda seçtiklerim için hepsini tek bir satırda (netlik için ayrılmış) yapar:

(tasksel --task-packages server ; \
 tasksel --task-packages openssh-server ; \
 tasksel --task-packages lamp-server) | sort | uniq

Yukarıdakilere genel bir yaklaşım şöyle olacaktır:

(for a in $( tasksel --list-tasks | grep "^i" | awk '{ print $2 }' ) ; \
 do tasksel --task-packages $a; done) | sort | uniq

Şimdi apt-cache depends --installed -i --recurse <packagename> | grep -v "^ ", görevde tanımlanan tüm paketler tarafından kullanılan bağımlılıkların bir listesini almak için kullanın . Bu tek satırda aşağıdaki gibi yapılabilir

apt-cache depends --installed -i --recurse \
     $(for a in $( tasksel --list-tasks | \
                   grep "^i" | \
                   awk '{ print $2 }' ) ; \
       do tasksel --task-packages $a; done) | grep -v "^ " | sort | uniq

Aşağıda sisteminize kurulu tüm paketler listelenmiştir (bağımlılıklar dahil değil).

dpkg --get-selections | grep "[[:space:]]install" | awk '{print $1}'

Şimdi commsadece ikinci listede olanları bulmak için komutu kullanın (örn. Hem dosyalarda hem de sadece ilk dosyada bulunanları yok sayın)

comm -13 <(apt-cache depends --installed -i --recurse \
              $(for a in $( tasksel --list-tasks | \
                            grep "^i" | \
                            awk '{ print $2 }' ) ; \
                do tasksel --task-packages $a; done) | grep -v "^ " | sort ) \
         <( dpkg --get-selections | grep "[[:space:]]install" | \
            awk '{print $1}' | 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.