it-swarm-tr.com

Elle kurulan paketlerin listesini oluşturma ve paketleri tek tek sorgulama

apt veya aptitude tarafından elle yüklenen paketlerin bir listesini almak ve foobar paketinin elle mi yoksa otomatik olarak mı yüklendiğini bulmak istiyorum. Bunu komut satırından yapmanın düzgün bir yolu var mı?

182
Umang

Bu iki astarın birini kullanabilirsiniz. Her ikisi de makinemde aynı çıktıyı veriyor ve bu soruda şimdiye kadar önerilen tüm çözümlerden (6 Temmuz 2014) daha kesin.

apt-mark kullanarak _:

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

aptitude kullanarak __:

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)

Çok az sayıda paket hala çatlaklardan geçiyor, bununla birlikte are gerçekte kullanıcı tarafından yüklendi, dil yerelleştirme kurulumunda kurulumdan hemen sonra ya da ör. Totem kodek yükleyicisi aracılığıyla. Ayrıca, linux başlık sürümleri de, yalnızca sürüme özgü olmayan meta paketini 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    

Nasıl çalışır:

  1. Elle kurulmuş paketlerin listesini alın. Yetenek için ek sed, satırı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ı çıktılayın.

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

  • ubuntu-14.04-desktop-AMD64.manifest yerine /var/log/installer/initial-status.gz dosyasının kullanılması (Ubuntu 14.04 için burada ). Daha fazla paket, olmasalar bile el ile yüklenmiş olarak gösterilir.
  • apt-mark showauto yerine /var/log/installer/initial-status.gz kullanılması. apt-mark örneğin, xserver-xorg paketini içermez, diğer dosya ise.

Diğer çeşitli StackExchange gönderilerini referans olarak kullandım, ancak hiçbiri yukarıdaki çözümden başka işe yaramadı:

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

EDIT: Önceki bir sürümden yükseltme yaptıysanız ne yapmalısınız:

Ubuntu'yu bir sürümden diğerine yükselttiyseniz, muhtemelen bu işlemi ayarlamanız gerekecektir. Bu durumda, geçerli sürümdeki initial-status.gz dosyasına ek olarak yeni sürümün açık dosyasını (yukarıya bakın) kontrol ederim. Bunu başka bir karşılaştırma ekleyerek kolayca yapabilirsiniz. Yalnızca bildirim dosyasını kullanmak işe yaramaz, çünkü bildirim dosyası ne yazık ki initial_status.gz dosyasının yaptığı her şeyi içermiyor (kontrol ettim).

205
jmiserez

Apt paketinin daha yeni sürümlerinde, apt-mark komutu da vardır

apt-mark showmanual
64
Daniel Alder

Ubuntu 16.04 için, /var/log/apt/history.log log dosyasına göz atın.

Örneğin:

zgrep 'Commandline: apt' /var/log/apt/history.log /var/log/apt/history.log.*.gz

Mükemmel değil, fakat elle kurduğum şeyi netleştirmek konusunda oldukça iyi. Ne zaman kurulduğunu görmek için grep üzerine bir -B 1 koyun.

Örnek çıktı

Commandline: apt install postgresql-9.5-plv8
Commandline: aptdaemon role='role-install-file' sender=':1.85'
Commandline: apt install task
Commandline: apt autoremove
Commandline: apt install atom
Commandline: apt upgrade
Commandline: apt-get install asciinema
Commandline: apt install iperf3
Commandline: apt upgrade
Commandline: apt-get install chromium-browser
Commandline: apt install joe cpanminus build-essential postgresql libdbd-pg-Perl libcrypt-openssl-bignum-Perl libcrypt-openssl-rsa-Perl libio-socket-ssl-Perl libnet-ssleay-Perl libssl-dev
Commandline: aptdaemon role='role-commit-packages' sender=':1.2314'
Commandline: apt install git
Commandline: apt install sqlite
Commandline: apt install whois
Commandline: apt install libdbd-pg-Perl
Commandline: apt install Perl-doc
Commandline: apt upgrade

Bunun toparlandığından emin değil aptitude veya değil. Ubuntu Software masaüstü uygulamasından yüklemeleri almak görünmüyor.

21
s1037989

apt-mark showauto | grep -iE '^foobar$', eğer paket otomatik olarak kurulursa "foobar" çıkar, aksi halde hiçbir şey olmaz.

aptitude search '!~M ~i' otomatik olarak kurulmamış paketleri listeler. Yazık bir yetenek, 10.10'dan başlayarak Ubuntu Desktop'taki varsayılan kurulumun bir parçası olmayacak.

20
Li Lo

Aşağıdaki komut dosyası, otomatik yüklemeye ayarlanmamış tüm paketleri yazdırır ve bu nedenle manuel olarak yüklenir:

#!/usr/bin/python

try:
    import apt_pkg
except ImportError:
    print "Error importing apt_pkg, is python-apt installed?"
    sys.exit(1)

apt_pkg.init()
STATE_FILE = apt_pkg.config.find_dir("Dir::State") + "extended_states"
auto = set()
tagfile = apt_pkg.TagFile(open(STATE_FILE))
while tagfile.step():
    pkgname = tagfile.section.get("Package")
    autoInst = tagfile.section.get("Auto-Installed")
    if not int(autoInst):
        auto.add(pkgname)
print "\n".join(sorted(auto))

apt-işaretinin otomatik olarak kurulmuş paketleri nasıl bastırdığını temel alır.

8
txwikinger

Tüm paketlerin bir listesini almak için (yüklü değil, kullanıcı tarafından yüklü veya varsayılan olarak tüm PPA'larda yüklü), apt aşağıdaki yöntemi kullanır:

apt list [option]

Bunun için yararlı olabilecek seçenekler şunlardır:

--installed yalnızca sisteme yüklenmiş paketleri görüntülemek için (yaklaşık 50.000'den fazla+)

--manual-installed --- bir komutla doğrudan veya bağımlılıklar olarak yüklenen açıkça olan paketleri listelemek için.

Alternatif olarak, şunları yapabilirsiniz:

apt list --manual-installed | grep -F \[installed\] yalnızca kullanıcı komutlarından ve bağımlılıklarından kaynaklanan paketlerin bir listesini almak ve bunlarla ilgili sürüm ve mimari destekli (x86, x86_64, AMD64, tümü, vb.) Ek bilgiler almak için

6
Aalok

Birkaç kişinin yorumunda olduğu gibi apt-mark showmanual biraz sıkıcı görünüyor (ve ben bug 727799 olarak bildirdim). Kullandığımda, aslında/var/lib/apt/Extended_states'e (bunun depolanması gereken yerlerde) giriş yapmamış bile olan bir çok şeyi rapor ediyor ve apt-get, yüklü olduğu şeyleri günlüğe kaydetmiyor/var/lib/apt/Extended_states (sadece/var/lib/dpkg/status içinde). Yukarıdaki txwikinger'ın python betiği doğrudan/var/lib/apt/Extended_states 'den çıkar ancak bugün kullanıyorsanız sözdizimi çalışmayabilir (benimki Kubuntu 13.10 ile hata üretmeye başladı). Güncelleme sözdizimi:

#!/usr/bin/python
import sys

try:
    import apt_pkg
except ImportError:
    print "Error importing apt_pkg, is python-apt installed?"
    sys.exit(1)

apt_pkg.init()
STATE_FILE = apt_pkg.config.find_dir("Dir::State") + "extended_states"
auto = set()
tagfile = apt_pkg.TagFile(open(STATE_FILE))
while tagfile.step():
    pkgname = tagfile.section.get("Package")
    autoInst = tagfile.section.get("Auto-Installed")
    if not int(autoInst):
        auto.add(pkgname)
print "\n".join(sorted(auto))

Benim için bu da doğru görünmüyor 5 öğelerin çok kısa bir listesi oldu.

5
cluelesscoder

Bir GUI çözümü vermek istiyorum.

enter image description here

  1. Synaptic Package Manager açın

  2. Status konumuna git

  3. Installed (manual) öğesini tıklayın.

Elle kurulan paketlerin listesini apt veya yetenek ile verir.

Maalesef, foobar paketinin elle mi yoksa otomatik olarak mı yüklendiğini bulmak için Custom Filters içinde hiçbir seçenek bulamadım.

Paket Installed altında, ancak Installed (manual) altında değilse, otomatik olarak kurulur. Paket Installed (manual) altındaysa, el ile yüklenmiştir.

4
blueray

Hiç kimse size apr-something komutunu kullanarak güzel bir cevap vermezse, bunu zor yol ile yapabilirsiniz. Apt-get,/var/lib/apt/Extended_states'deki bilgilerini saklar. Otomatik olarak yüklenen herhangi bir dosya bu dosyaya eklenecektir. Zaten bu dosyaya bir paket yüklerseniz, paket bu dosyada kalır, ancak ikinci satırda Otomatik yüklü: 0. Silinmedi.

Not: Beklendiği gibi, dosya yerleştirme değişiklikleri göründüğünde çalışması muhtemel olan daha iyi cevaplar. Sadece dosya yerindeki bilginin yararlı olması durumunda benimkini tutuyorum.

2
Javier Rivera

Çok googling yaptıktan sonra bu senaryoyu birleştirmeyi başardım. Benim için iyi çalışır:

# List of all packages currently installed
current=$(dpkg -l | awk '{print $2}' | sort | uniq)

# List of all packages that were installed with the system
pre=$(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort | uniq)

# List of packages that don't depend on any other package
manual=$(apt-mark showmanual | sort | uniq)

# (Current - Pre) ∩ (Manual)
packages=$(comm -12 <(comm -23 <(echo "$current") <(echo "$pre")) <(echo "$manual") )

for pack in $packages; do
    packname=$(echo $pack | cut -f 1 -d ":")
    desc=$(apt-cache search "^$packname$" | sed -E 's/.* - (.*)/\1/')
    date=$(date -r /var/lib/dpkg/info/$pack.list)

    echo "# $desc"
    echo "# $date"
    echo "Sudo apt-get install $pack"
    echo -e ""
done
2
dufferZafar

Li Lo'nin dediği gibi, apt-mark showauto size otomatik olarak yüklenen şeylerin şişman bir listesini çıkarmalıdır.

Şimdi elle yüklenen şeyleri göstermek için, yetenek için hoş bir basit arama değiştirici var çıkıyor. Ama bunu yapmak istemiyorsun. Bazı roket bilimi yapan devasa bir bash komutu yazmak istiyorsunuz.

Not: Bu daha çok, tüm arkadaşlarınıza büyük bash komutları patlattığınızda ne kadar havalı görüneceğinizin bir örneğidir.

comm -3  <(dpkg-query --show -f '${Package} ${Status}\n' | \n
grep "install ok installed" | cut --delimiter=' ' -f 1) <(apt-mark showauto)

Okunabilmesi için iki satır üzerine kırdım. Bu ne işe yarıyor?

  • İlk önce dpkg'yi kurulu paketlerin listesi için sorgularız.
  • Bunları gerçekte yüklü olanlar için filtreliyoruz (yalnızca kalıntı config)
  • Statüyü kestik
  • Bu listeyi, apt-mark adresindeki otomatik liste ile karşılaştırıyoruz.
  • Sallanıyoruz çünkü yapabiliriz.
1
Oli