Hangi paketlerin Ubuntu'da (Linux) kurulu olduğunu nasıl takip ediyorsunuz?


38

(Bu soru 10458'e çok benzer . Fedora ve Ubuntu / Debian'ın farklı cevaplar alabilecek kadar farklı oldukları öne sürüldü.)

Herhangi bir Ubuntu kurulumunu kullandıkça, kademeli olarak taban çizgisi kurulumunun üzerine bir dizi paket yüklüyorum. Yeniden yüklersem veya yeni bir makine yüklemem gerekirse, genellikle bu belirli paketleri yeniden yüklemek isterim ve en az sıkıntı ile çalışmaya geri dönmek için hızlı bir şekilde yapmak istiyorum. Gördüğüm kadarıyla tüm paket yöneticileri ( apt-get, aptitudeve synaptic) bana hangi paketlerin kurulu olduğunu söyleyebilirler ve hepsinin kütüğü vardır (her araç için farklı olanlar da olsa). Ama hiçbiri bana hangi paketleri aldığımı söyleyemiyor.bağımlılıklarının veya sistem güncellemelerinin aksine Günlükleri bile, onlardan ne çıkarmam gerektiğinden ya da onları nasıl entegre edeceğimden (çeşitli uygun aile araçları söz konusu olduğunda) tam olarak emin olamadığım için zor. Bu, her tekrar kurduğumda veya sadece yedeklediğimde, bu listeyi nasıl yeniden oluşturacağımı bilmediğim anlamına geliyor.

Bunu yapmak için araçlardan herhangi birini beklemiyorum, ama istemiyorlarsa, geçici çözümler arıyorum. Aşılması gereken modeller, iyi kurallar ya da tam olarak ne kaydedildiğine dair net bir fikir bile faydalı olacaktır. Burada "en iyi cevap" olmayabilir, ancak iyi olanlar çok yardımcı olacaktır.


Aşağıdaki cevapların çoğu aradığım şey hakkında bir miktar tahmin sunmaktadır ve bir dereceye kadar faydalıdır. Seçilen araç, tüm uyarıları olsa bile takımlarımı yeni bir sisteme tekrar yerleştirmenin makul derecede otomatik bir yoluna en yakın olanıdır.


Tüm Linux dağıtımları için kolayca paylaşılan bir yanıt almanız olası değildir. Paket yönetimi, farklı Linux dağıtımlarını ayırt eden şeyin büyük bir parçasıdır.
Telemachus

Telemachus - Doğru. Ve bunu iki soruya bölmek mantıklı olabilir. Ancak oldukça özel bir soru gibi görünüyordu ve her iki sistemi de kullanıyorum, bu yüzden önceden çok fazla daraltmak istemedim. Buradaki cevapların çoğu dpkg / apt'ye benziyor, bu yüzden rpm / yum için ayrı bir soru mantıklı olabilir.
kuark

NixOS'a geç :) (sadece trolling).
Alexey

Yanıtlar:


31

Herhangi bir Debian tabanlı makinede, bu bir paket setini çoğaltmanın yaygın bir yoludur. Eski makinede:

dpkg --get-selections "*" > my_favorite_packages

Dosyayı my_favorite_packagesyeni makineye kopyalayın (flaş sürücü iyi bir seçenektir, ancak scpaynı zamanda iyi çalışır). Ardından bu diziyi çalıştırın (kök ayrıcalıklarıyla):

apt-get update
dpkg --set-selections < my_favorite_packages
apt-get -u dselect-upgrade

Bu, yalnızca yüklediğiniz paketleri almaz . Aynı zamanda bağımlılıklarını vb. Alır. Ayrıca, iki makine arasındaki depolar farklıysa, tüm bahisler kapalıdır.

Günlükleri apt-gettuttuğu sürece, günlüğünü tutar /var/log/apt/history.log(bir yorumda bunu güncellediği için Tshepang'a teşekkürler); dpkgyok (at /var/log/dpkg.log), ancak ayrıştırılması çok zor ve sadece root haklarıyla okunabilir; aptitudebirine sahip /var/log/aptitudeve düzenli kullanıcı ayrıcalıklarına sahip sayfalarda gezinebilirsiniz.

Söyleyebileceğim kadarıyla, bu kayıtların hiçbirinin otomatik olarak kurulmuş bağımlılıkların aksine kurduklarınızı izlememesi konusunda haklısınız. Ancak bu bilgiyi bir aptitudearamadan elde edebilirsiniz. Otomatik olarak da yüklenen tüm kurulu paketleri arayın:

aptitude search '~i ~M'

İsterseniz sadece yüklü olanları (değil otomatik bağımlılıkları), boşa ~M:

aptitude search '~i !~M'

Bunu yalnızca paket adlarına ve "install" kelimesine sahip olacak şekilde biçimlendirilmesini istiyorsanız , aptitudebunu da yapabilirsiniz. Bu size beslenmeye hazır bir liste verir dpkg --get-selections:

aptitude search '~i !~M' -F "%p install"

(RedHat'le veya RedHat tabanlı sistemlerde hiçbir şey yok. Maalesef. Gerçekten Linux için kimse cevap yoktur haddi zatında paket yönetim farklı dağıtımlar kılan büyük bir parçası olduğundan farklı .)


Tavsiyenizin bir kombinasyonu gibi gözüküyor ve Ludwig's bu işi yapabilir: yetenek dpkg'a beslemek için bir komut dosyası oluşturabilir, bu yüzden bu ciddi bir galibiyettir. Ve eğer biri vanilya makinesinde yapacak olsaydı, listelerdeki fark pratikte faydalı olmak istediğim şeye yeterince yakın.
kuark

3
Şimdi "/var/log/apt/history.log" bir günlük tutar ve kullandığı APT geldiğini hatırlatırız apt-get, synapticve aptitude(şimdiye kadar gördüğüm gibi). Bu 2010 yılının başından beri.
tshepang

dpkg.logİfadeleri benim seçimleri kolayca önemsiz değildir, ama çok zor değil alabilirsiniz herhangi bir kullanıcı olarak Ubuntu 14.04 de gerçek olamayacak kadar görünmüyor. awk '$3 != "install" { next } ; { gsub(/:.+/, "", $4) ; print $4 }' /var/log/dpkg.log | sort | uniq
Steve Buzonas

Aslında, başlangıçta düşündüğüm kadar kolay olmadığını anladım, önceki awk betiğindeki kusur kaldırılan paketlere hiç dikkat etmez. Aşağıdaki awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -uyapar.
Steve Buzonas

7

dpkg -l '*' > jaunty.originalYeni kurulmuş bir sistemde kurulu tüm paketleri hatırlatmak için kullanın .

Yükledikten sonra tüm ek paketlerinizi yapın dpkg -l '*' > mysystem.2009017.

Ek paketler sadece farktır: diff jaunty.original mysystem.2009017


3
Temel fikir güçlüdür: yüklü olan uygulamaların listesini boşaltmak için komut satırını kullanın ve ardından bu paketleri yeni bir makineye yüklemek için komut satırını kullanın. Bu yaklaşımla oldukça yaratıcı ve spesifik olabilirsiniz.
pcapademic

1
Ben dpkg tercih ederim
CesarB

Bu, bağımlılıklarından ayrı olarak eklediğim paketleri takip etmese de, kesinlikle faydalı bir liste oluşturur.
kuark

3

Yetenek bu konuda aslında oldukça iyidir. Yetenek bir şeyin ne zaman el ile veya bağımlılıkla kurulduğunu bilir ve artık gerekmeyen ve yalnızca kurulu olan şeyleri çıkarmasını söyleyebilirsiniz, çünkü sisteminize bağlı olarak her zaman sisteminizi olabildiğince küçük tutar.

Ubuntu kurulumunu, ubuntu-minimal, ubuntu-desktop, ubuntu-server ve benzerlerini oluşturan bir avuç paket var. Yeteneklere bunları el ile kurulmuş olarak işaretlemesini ve diğer her şeyi kaldırmasını söylerseniz, mümkün olan en az miktarda paket alırsınız.

Ben nasıl açıklamak tüm bu blogumda iki mesajlar: Temizleme Debian GNU / Linux yukarı ve Temizleme Debian GNU / Linux (veya Ubuntu) kadar reprise . Kısacası, aradığınız cevap:

aptitude search ~i | grep -v "i A"

En son çalıştığımda, apt-get kullandıysan işe yaramadı. Bu yüzden her zaman yetenek öneririm ve bildiğim kadarıyla Debian kabiliyetten yanadır.

Fedora'da nasıl yapıldığını bilmiyorum ve muhtemelen farklı bir soruya ayırmak zorundasınız. Fedora ve Ubuntu farklı işletim sistemleridir ve bu şekilde ele alınmalıdır (çekirdeğini ve diğer bazı şeyleri paylaşsalar bile).


2
Bence bu bilgiyi ihtiyaç duymadan elde edebilirsiniz grep: aptitude search '~i !~M'hile yapmalı.
Telemachus

1
Ayrıca, apt-getitiraz edilmedi. Debian aptitude, komut satırında paket yönetimi için önerilerde bulunur, ancak bu kullanımdan kaldırmaktan çok uzaktır apt-get.
Telemachus

Burada ince bir şey var. Üçüncü sütunda "A" aranması, bağımlılıklar olarak yüklendiğini bildiğim paketleri işaretliyor gibi görünüyor. Ancak açıkça hepsini yakalamıyor: listenin çoğu kesinlikle açık isteğim tarafından yüklenmedi.
kuark

@Telemachus. Komutunuz ve deseni içeren komut tam olarak aynı şeyi yapmıyor: iki liste farklı içeriklere sahip. Neden olsa söyleyeceğim yetenek hakkında yeterince bilgim yok.
kuark

@Pablo: Günlüğünüze bağlantılar kopmuş görünüyor. Onları düzeltebilirseniz kesinlikle okumak isterim.
kuark


1

Apt tabanlı sistemlerde /var/log/apt/term.log adresine bakın. Benim için, kurulumun nerede bittiğini ve kurulumlarımın nerede başladığını çizmek için oldukça net bir çizgi var.


Benim için daha az kullanışlı, çünkü el ile kurulumların ve sistem güncellemelerinin karışması var. Ayrıca, term.logs kurulumunuza bağlı olarak sonunda eskimiş ve silinmiş olacak, bu yüzden ihtiyaç duyduğum kadar geri dönmeyecek.
kuark

Bunu deneyen herkes için, apt'nin günlüğünü kullanarak gezinmenin burada tartışılan diğer seçeneklerden çok daha fazla iş gibi göründüğünü unutmayın. Günlükten bir paket listesi çıkarmak kesinlikle otomatik değildir.
kuark

1

Kimden man aptitude-create-state-bundle:

aptitude-create-state-bundle, geçerli paket arşiv durumunu çoğaltmak için gereken dosyaları depolayan sıkıştırılmış bir arşiv üretir.

Bu aptitude, hangi paketlerin el ile yüklü olduğu ile aynı bilgileri koruyacaktır .

İle kullanılması amaçlanmıştır aptitude-run-state-bundle:

yetenek çalıştırma durumu-paketi, yetenek oluşturma-durumu-paketi (1) tarafından yaratılan verilen yetenek durumu paketini geçici bir dizine açar, bununla birlikte verilen ile çağırır ve daha sonra geçici dizini kaldırır.


1

Sadece kullanırken dpkgpaketin kullanıcı tarafından manuel olarak mı yoksa otomatik olarak mı yüklendiğini (bir bağımlılık olarak veya ilk işletim sistemi kurulumu sırasında) bilmiyorsunuz. Bu bilgileri saklamak istiyorsanız, yalnızca gerçekten el ile yüklenen paketlerin bir listesini almanız gerekir.

Bunun için bu iki astarın birini kullanabilirsiniz. Her ikisi de makinemde aynı çıktıyı veriyor ve bu soruda şimdiye kadar ö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 edilir kullanıcı tarafından fiilen yüklenmiş ya doğru Totem codec'i yükleyici yoluyla dil lokalizasyonu kurulum sayesinde yükleme veya örneğin sonra. 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ı çıktılayın.

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 el ile yüklenmiş olarak gösterilir.
  • Kullanılması apt-mark showautoyerine /var/log/installer/initial-status.gz. apt-markdiğer dosyada, örneğin xserver-xorg paketini içermez.

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


0

Önyargılıyım ve sunduğum çözüm her zaman mümkün değil, ama bu durumdan bıktım. Sonuç olarak, güncelleme / paket yöneticisi araçlarıyla artık hiçbir şey yüklemem.

Yine de oldukça zor bir rota izledim (sürümler için katı gereksinimlerim vardı). İhtiyacım olan her paketi (program, kütüphane, ne olursa olsun) ana dizine indiren, derleyen ve yükleyen büyük bir makefile dosyası oluşturdum. Adım adım, parça parça geliştirdim. Makefile derleyicileri bile her şeyi indiriyor ve derliyor.

Yeni bir sisteme taşındığımda veya yeniden kurduğumda, makefile'i (artı bazı destekleyici öğeleri) kopyalarım, make world olun ve ertesi gün tekrar geldim.

Geliştirdiğim bazı programlar için (böylece kontrolü elimde tutuyorum), programladığım bir aracı, kestane paket yöneticisini kullanıyorum . MacOSX'teki gibi .app klasörlerinin sıralaması. Her şey pakette, bu yüzden herhangi bir zamanda neyin yüklü olduğunu biliyorum ve kendi kendine yeten ve kendi kendine yeterli olduğunu biliyorum (sistem kütüphaneleri hariç)


Paket yöneticisinin kurulum komutlarını sadece bir betiğe koyabilir ve aynı etkiye sahip olabilirsiniz; İhtiyacınız olan kodun paketlenmiş olduğunu varsayarak. Yaklaşımın gentoo'nunkine çok benziyor.
wcoenen

Bilmek güzel. Varsayılan bir Ubuntu / Debian sisteminin ötesinde bir sürü ek iş gibi görünüyor. El ile bazı paketleri geliştiren, ancak sürdürmek görebilirsiniz tüm bu şekilde Yapmak istediğim daha eseridir bunlardan.
kuark

Evet, ancak ubuntu / fink / darwinports malzemelerinin her yerde çapraz platformda çalışmadığı ek bir sorun var (dijital ve IBM sp4'teydim). Bunun iyi bir yol olduğunu iddia etmiyorum. Ben sadece çirkin, koklamakla birlikte, işi yaptığını söylüyorum ve sistemimde neler olup bittiğini tam olarak kontrol ediyorum.
Stefano Borini

Tabii ki, bugünlerden birinin, ortaya çıkması ve onunla yeniden çalışılması için ciddi bir göz atması gerektiğine karar verebilirim.
Stefano Borini

Aşçı ve kukla gibi araçları düşündüğünüz zaman bu yol daha yaygındır.
Steve Buzonas
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.