Apt-get install komutunu geri almak mümkün müdür?


67

Carpadio'yu Xubuntu kurulumuma (bir Canlı USB) kurdum, sanırım deponun Ubuntu tarafından 50'den fazla paket aldı. Şimdi bunu geri almak istiyorum. Ancak tüm avlarım için , önerdiği şekilde sudo apt get install komutunu nasıl tersine çevirebilirimden daha faydalı bir şey bulamıyorum apt-get purge. Bu, 2 paketi (carpadio ve carpadio-gnomepanel) kaldırdığı için faydalı değildir.

/var/log/apt/history.logbu komutla birlikte yüklenen tüm paketlerin bir listesine sahiptir. Bu yüzden hepsini kaldırmak için kolay bir yolu olup olmadığını merak ediyordum ? Başka bir şey sadece yeniden yükleyebilirim, bu yine de yeni bir yüklemeydi, ama merak ediyorum.

Geçmiş günlüğünün küçük bir örneği (tüm listenin 1 / 5-1 / 10'u)

Komut Satırı: apt-get install cardapio-gnomepanel
Kurulum: libdbusmenu-qt2: amd64 (0.9.2-0ubuntu1, otomatik), python-packagekit: amd64 (0.7.2-4ubuntu3, otomatik), bardaklar-pk-yardımcı: amd64 (0.2.1.2-1ubuntu0.1, otomatik) , geoclue: amd64 (0.12.0-1ubuntu12, otomatik), birlik: amd64 (5.18.0-0ubuntu1, otomatik), gösterge yazıcıları: amd64 (0.1.6-0ubuntu1, otomatik), libevolution: amd64 (3.2.3- 0ubuntu6, otomatik), libqt4-declarative: amd64 (4.8.1-0ubuntu4.3, otomatik olarak), libmtp9: amd64 (1.1.3-1ubuntu0.1, otomatik olarak), izci-madenci-fs: amd64 (0.14.0-2ubuntu1) , otomatik), gir1.2-rb-3.0: amd64 (2.96-0ubuntu4.2, otomatik), python-aptdaemon.pkcompat: amd64 (0.43 + bzr805-0ubuntu7, otomatik), gnome-medya: amd64 (3.4.0- 0ubuntu3.1, otomatik), metacity: amd64 (2.34.1-1ubuntu11, otomatik), nautilus: amd64 (3.4.2-0ubuntu6, otomatik olarak), libcompizconfig0: amd64 (0.9.7.0 ~ bzr428-0ubuntu6, otomatik olarak) eklentileri-varsayılan:amd64 (0.9.7.12-0ubuntu1, otomatik), libunistring0: amd64 (0.9.3-5, otomatik), libebackend-1.2-1: amd64 (3.2.3-0ubuntu7, otomatik), ubuntu-docs: amd64 (12.04.6 , otomatik), python-mako: amd64 (0.5.0-1, otomatik),

Sürmüşlerdir herkese autoremove: Neden emin değilim ama "gereksiz" olarak sadece 1 diğer piton ilgili paket (python-keybinder veya şey) var ve hepsi o autoremove kaldırmak başardı olduğunu.

Yükleme ve kaldırma arasında yalnızca büyük değişiklik yüklüydü xubuntu-restricted-extras.


4
Bu durumda yardım almak için biraz geç, ancak bir dahaki sefere bir şey yüklemek istediğinizde, önce bir simülasyon yapmayı düşünün. Bir simülasyonu gösterdiği ve uygun yazılımın ismi ile değiştirileceği sudo apt-get install -s packageyerde çalıştırın -spackage

@ vasa1 Evet, bu konuda kendimi yeniyorum. apt-get [E / H] 'ı da sorardı, bu benim
dışımda

"Gereksiz" olarak sadece bir tane python ile ilgili paket (python-keybinder veya summat) aldım . cardapio-gnomepanelPaketi gerçekten kaldırdınız mı?
gertvdijk

@gertvdijk evet, apt-get remove carpadiobunu da yanına aldım .
Karthik T

1
@KarthikT O zaman neden autoremovesizin için çalışmadığına bağlı olarak tamamen kayboldum . Bir şekilde tüm paketleri şimdi manuel olarak yüklüyor olarak işaretlediniz veya bir yanlış anlaşılma var. Çok basit: apt-get autoremovesadece otomatik olarak yüklenmiş tüm işaretli paketleri, şimdi olması için bir neden olmadan kaldırır. Sizin için işe yaramazsa, sisteminizde sorunuzdan bahsetmediğiniz bir şeyi değiştirdiğinizi düşünüyorum.
gertvdijk

Yanıtlar:


79

Temel olarak, apt-get removepaketin ikisini de (veya apt-get purge) yapmanız veapt-get autoremove ardından yüklemesini geri almak için çalıştırmanız gerekir package-one.

Tüm süreci inceleyelim:

  • sudo apt-get install package-one "otomatik" olarak işaretlenmiş 50 bağımlılık kurar, ayrıca sorunuzdaki günlük alıntıdan da görülebilir

  • sudo apt-get purge package-one kaldırır (temizler) sadece bir tane, ama bunu çalıştır!

    Aşağıdaki kurulum işlemlerinin tümü (çalıştırırsanız), artık gerekmeyen paketlerle birlikte bir bilgi mesajı verir:

    The following packages were automatically installed and are no longer required:
      package-two package-three [...]
    Use 'apt-get autoremove' to remove them.
    

    Bu liste temelde, “otomatik” olarak işaretlenmiş tüm paketlerin bir listesidir ve bunlara ters bir bağımlılık göstermez. Başka bir deyişle, paket yönetimi ile ilgili olarak yüklenmeleri için bir neden yoktur.

    Not: Kurulum gerekmez! Sadece APT'nin gereksiz paketlerinizi anlatmanın akıllıca olduğunu göstermek için!

  • sudo apt-get autoremove --purge bunları kaldırır (temizler)

Daha fazla bilgi


2
Bu OP'de Unity ve tüm arkadaşlarını çekti. Cardapio'nun tasfiye edilmesinin, otomatik kaldırmadan sonra bile Birliği vb.

@ vasa1 Neden? Paketler 'otomatik olarak yüklenir' olarak işaretlenir (söz konusu soruda görüldüğü gibi) ve sistemde kurulu olanlar için bir neden bulunamazsa, bunların kaldırılması için önerilecektir autoremove.
gertvdijk

Evet, "otomatik" i merak ediyordum. Bu autoremoval belirtmek için hizmet veriyorsa, bu iyi. OP o zaman sorun yaşamamalı.

@gertvdijk iyi yakalamak @ vasa1, pls düzenlememi görün. autoremoveYardım etmedi.
Karthik T

@gertvdijk, "Sonraki kurulum işlemleri" sudo apt-get updateiçin yeterli olur mu?

19

Bir paketi ve o sırada kurulan bağımlılıklarını kaldırmak istediğinizde, şunları kullanmalısınız:

sudo apt-get purge package
sudo apt-get --purge autoremove

ancak apteylemleri geri almak için apt-undokomut dosyasını kullanabilirsiniz . aptUbuntu'da gerçekleştirilen eylemleri geri alabilen basit bir komut dosyasıdır . Bu betiğin yalnızca apt-getpaketlerinizi kurmak / yükseltmek / kaldırmak / temizlemek / düşürmek yerine kullanırsanız çalışabileceği belirtilmelidir .

apt-undoUbuntu'ya kurmak için terminalde aşağıdaki komutları çalıştırın:

sudo add-apt-repository ppa:lkjoel/apt-undo
sudo apt-get update
sudo apt-get install apt-undo

kullanımı:

apt-undo install yourpackages
apt-undo remove yourpackages
apt-undo purge yourpackages
apt-undo upgrade
apt-undo dist-upgrade
apt-undo install yourpackages=old.version
apt-undo install yourpackages=new.version

Geri almak için, yukarıdaki aptitudeeylemler terminalde aşağıdaki komutları çalıştırır:

apt-undo undo

1
Teşekkürler, bununla karşılaştım ve tıpkı doktorun emrettiği gibi geldi, yüklemek için kullanmam gereken ihtarı görene dek, geri alabilmem için ..
Karthik T

1
Güzel yakalayış. Çok kafa karıştırıcı sözdizimi olsa da. Ve gerçekten iyi test edilmiş çekirdek APT uygulamasına alternatifler kullanmayı sevmiyorum. Hala +1!
gertvdijk

7

Unix'in gücünü kullanın. Sahip olduğunuz günlük dosyası satırını alın ve hangi grubun yaptığını geri alacak bir komut oluşturun. Örneğin:

$ echo 'Install: libdbusmenu-qt2:amd64 (0.9.2-0ubuntu1, automatic), python-packagekit:amd64 (0.7.2-4ubuntu3, automatic), cups-pk-helper:amd64 (0.2.1.2-1ubuntu0.1, automatic),'|perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //'
libdbusmenu-qt2:amd64 python-packagekit:amd64 cups-pk-helper:amd64

Böylece, bu temizleme işlemini, yanlışlıkla yüklediğiniz tüm paketleri, günlük dosyanızdaki uygun satır göz önüne alarak kullanabilirsiniz:

$ dpkg -P $(echo '(full log line here)' | perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //')

(Bunun perlyerine kullandım sedçünkü sedaçgözlü olmayan eşleşmeleri desteklemeyen bir tür düzenli ifade kullanıyor, bu da ihtiyacım olanı yapmanın en kolay yoluydu.


1
Güzel senaryo, ancak gerçekten insanların başarmayı hatırlayabilecekleri bir komut dizisi olmalı.
gertvdijk

Teşekkürler, korkutucu senaryo, ama bunun buna gelmesinden korktum
Karthik T

1
Benzer problemimi çözmek için benzer kod kullandım . Neler olup bittiğinden emin olmak için birkaç adımda yaptım. İlk önce ilgili metin bloğunu logdan aptyeni bir dosyaya kopyaladım ve sonra bunu ona uyguladım: perl -pe 's/\(.*?\)(, )?//g' /path/to/apt-history.log Sonra yaptığım tek şey çıktıyı hazırlamaktı sudo apt-get removeve gitmem iyi oldu!
Insperatus

1

Bir paketi çıkardıktan sonra, --purge ekleyerek iyice çıkarabilirsiniz, çünkü, apt-get remove --purge <package>çektiğiniz kütüphane paketlerinin otomatik olarak yüklendiği ve artık gerekmediği, hangi noktada çalışabileceğinize dair bir mesaj vermeniz gerekir apt-get autoremove. onları kaldır.


Teşekkürler, ama otoremove bu durumda yetersiz olduğunu kanıtladı. Lütfen düzenlememe bakın.
Karthik T

1

takip sudo apt-get purge packagenameile

sudo apt-get autoremove. 

Meta paket olmadıkça, bununla ilgilenmesi gerekir.

Ayrıca bkz. SSS bölümüne bakın Tüm Cardapio dosyalarını el ile nasıl kaldırırım ? .


Teşekkürler, ama otoremove bu durumda yetersiz olduğunu kanıtladı. Lütfen düzenlememe bakın. SSS bağlantısı için teşekkür ederiz, çok yararlı!
Karthik T

1
Bu paketlerin bazılarına başka şeyler tarafından ihtiyaç duyulabilir ve otomatik olarak taşınabileceği işaretlenmemiş olabilir. Bağlantıdaki talimatlara baktın mı? Bunlar nasıl?
Ocak'ta 13:32

Bağlantıdaki talimatlar esas meseleye diktir ve olduğu gibi, sistemimi yeniden kurmaya eğildim. yine de teşekkürler.
Karthik T

1
  1. İstenmeyen paketlerin uzun listesini apt logundan a yapıştırın. new_file.txt
  2. Gerçekleştirmek, yerine getirmek, idam etmek perl -pe 's/\(.*?\)(, )?//g' /path/to/new_file.txt
  3. Son komutun çıktısını panoya kopyalayın ya da ilk etapta buraya yerleştirin .
  4. Yürüt sudo apt-get remove[panonun içeriğini buraya yapıştır]

Bitti.

Temel olarak, apt listesini log-get 'in anlayabileceği bir Ģekilde paket listesini biçimlendirmemiz gerekir. Parantez, aradaki sözcükler ve virgüllerin gitmesi gerekir, böylece perl oynamak için gelir. Evet, daha iyi (daha verimli) yollar var - ama bunu yaptım, anlaşılması kolay ve işe yarıyor.


Kişisel deneyim ve açıklama için +1, ancak daha önce de belirttiğim gibi, Live USB'yi zaten sıfırladım
Karthik T

1

Son apt kurulumunu geri almak için ayrıca aşağıdakileri de kullanabilirsiniz:

sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep ":amd64\|:i386" | tr "\n" " ")

Bu, geçmişden en son apt kurulumunu yakalar ve burada kurulu tüm paketleri temizler.

Her zaman elinizin altında olması için aptpurgelastinstall adında bir işlev oluşturabilirsiniz (kodu ~ / .bashrc dosyasına ekler):

echo 'aptpurgelastinstall () { sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep ":amd64\|:i386" | tr "\n" " ") ; }' >> .bashrc

Şimdi son yüklemeyi yeniden yapmak için kabuğa aptpurgelastinstall yazmanız yeterlidir.


Tepki gösteren önerdi Düzenlemenin comment: “(Ben kayıtlı önce) Kendi yazı iyileştirildi.” Sen, hesapları birleştirme sormak görebilirsiniz askubuntu.com/help/merging-accounts .
Melebius

0

Yeni bir ppa eklediyseniz ve geri dönmek istiyorsanız, aşağıda açıklanan adımları uygulamanız gerekir. Kaldırmak istemediğiniz diğer paketleri yüklediğinizde bunun başarısız olabileceğini anlayın. Bunun bir senaryo ile yapılabileceğinden eminim. Şahsen bunun uygun bir parçası olması gerektiğini düşünüyorum ve bağımlılıklar nedeniyle hangi paketlerin yüklendiğini ve kullanıcının isteğine göre hangi paketlerin yüklendiğini daha iyi yönetmeliyim.

1) ppa'yı /etc/apt/sources.list adresinden kaldırın. Ppa'yı eklediğiniz zamanı hatırlayın. Şanslıysanız, kesin olmanıza gerek yok.

2) PPA'yı kurduğunuz andan itibaren neyin yeniden kurulacağını gösteren bir liste yapın: cat /var/log/dpkg.log | grep 'yükseltme'

3) PPA'yı kurduğunuz andan itibaren ne çıkarılacağına dair bir liste yapın: cat /var/log/dpkg.log | grep 'install'

4) 3. adımdaki tüm paketleri kaldırın: sudo apt-get remove {3. adımdaki paketlerin listesi}

5) 2. adımdaki tüm paketleri yeniden yükleyin: sudo apt-get install --reinstall {2. adımdaki paketlerin listesi}

6) İşler ters giderse ve bir çözüm düşünemiyorsanız, PPA'yı geri koyun ve tüm paketleri iki listeden yeniden yükleyin.


0

Oldukça eski bir soru olduğunu biliyorum ama buraya yardım aramaya geldim ve belki birine yardım edebilirim. Yüklemeden sonra @ Karthik-T'ninkine benzer bir durum vardı unity8-desktop-session-mir. Büyük bir tane olduğunu biliyorum. Yanında 233 paket çıkardı.

Kullanarak autoremoveyalnızca 34 tanesini kaldırıyorum. Mesele şu ki, unity8-desktop-session-mirkurulum sırasında iki paketi ( python3-aptdaemon.pkcompatve evolution-data-server-online-accounts) çıkardı . Bölümden /var/log/apt/history.logsonra Installyazılmıştır.

Unity 8 kurulumunu tamamen geri almak için aşağıdakileri yayınladım:

  1. sudo apt-get purge unity8-desktop-session-mir
  2. sudo apt-get --purge autoremove
  3. sudo apt-get install python3-aptdaemon.pkcompat evolution-data-server-online-accounts (Unity 8 ile ilgili 8 paketi kaldırdı)
  4. sudo apt-get --purge autoremove

Bu, daha önce kurduğunuz her şeyi kesinlikle kaldırmaz, ancak bazı durumlarda yeterince iyidir.

Not: belki autoremovedördüncü adımda tekrar yayınladığım gibi , ikinci adımda gerekli değildir.


0

Teknik olarak "kaldır" veya "otomatik kaldır" işlemleri "geri almaz" olsa da, çoğu zaman işi yeterince iyi yapabilmeleri için yapılabilir.

Belirlemediğiniz sürece, apt-get varsayılan olarak paketleri geride bırakacaktır. -o APT::Suggests-Important=0 -o APT::Recommends-Important=0

Apt bakmak history.logve yüklü tüm paketleri kaldırmak için daha güvenilirdir . Süreci kolaylaştırmak için küçük bir düğüm tabanlı komut dosyası oluşturdum:

https://github.com/rolfen/apt-history

Ayrıca, "geri alma" değişikliklerine yönelik daha manuel bir yaklaşım daha:

https://unix.stackexchange.com/a/236711

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.