Bir uygulamayı tamamen kaldırmanın doğru yolu nedir?


546

Bu tür bilgiler için ağı aradım ve bunlar gibi farklı komut satırları buldum:

sudo apt-get remove application
sudo apt-get remove application*

sudo apt-get remove --purge application
sudo apt-get remove --purge application*

sudo apt-get purge application
sudo apt-get purge application*

Peki doğru yol nedir? Bu "*" kullanmak gerekli midir?

Ondan sonra şu komutları da buldum:

sudo updatedb
sudo locate application
sudo rm -rf (file/folder name)

1
Sorularınızdan bazıları bu yayında
Glutanimate 14.01.2012

8
application*zaman zaman beklenmeyen sonuçlar verebilir - örneğin, geçerli dizinde bir dosyanız varsa application_information, kabuk apt-get öğesine geçmeden önce onu genişletir. Bu oluyor ve değişmez yıldızı istiyorsanız, söz kullanabilirsiniz application\*veya'application*'
Izkata

6
application*Geçerli dizinde dosya bulunmadığı durumlarda daha tehlikelidir: apt-getnormal ifadeler kullanır, glob kalıpları kullanmaz. İnsanlar neredeyse tüm sistemi kaldırmaya çalışırken sildiler wine*.
Andrea Corbellini

3
Bir cevap kabul edebilir misin? Size cevap verenlere minnettar olmak.
m-ric,

Ne application*de ne application\*güvenli! Alıntı *yapmak \veya ' 'sadece riski arttırmak , *olduğu gibi geçirilmesini sağlamak apt-get(genellikle de olsa!), apt-getArgümanı düzenli ifade olarak yorumlamaya neden olur . Bir regex'te *"önceki karakterin sıfır veya daha fazlası" anlamına gelir. Yanlışlıkla bir yaygın biçimi kaldırmak için wine*tüm paketleri kaldırarak, win(değil wine, win) her yerde isimleri ve bunlardan herhangi bağlı tüm paketlerde. Bkz bu açıklamayı ve olası çözümleri . @Izkata
Eliah Kagan

Yanıtlar:


705
  • apt-get remove packagename

    İkilileri kaldıracak ancak paketin yapılandırma veya veri dosyalarını kaldıracaktır packagename. Ayrıca, kurulum süresinde onunla birlikte kurulu olan bağımlılıkları el değmeden bırakacaktır.

  • apt-get purge packagename veya apt-get remove --purge packagename

    Paketle ilgili her şeyi kaldıracak packagename, ancak yükleme sırasında yüklü olan bağımlılıkları kaldıracaktır . Her iki komut da eşdeğerdir.

    Bir uygulama ile 'baştan başlamak' istediğinizde özellikle kullanışlıdır çünkü yapılandırmayı bozmuşsunuzdur. Ancak, kullanıcıların ev dizinlerinde, genellikle oradaki gizli klasörlerde bulunan yapılandırma veya veri dosyalarını kaldırmaz. Bunları kaldırmanın kolay bir yolu yok

  • apt-get autoremove

    artık paketleri, yani eskiden bağımlılık olarak kurulan paketleri, ancak artık kaldırmadıklarını kaldırır. Bunu, artık ilgilenmediğiniz bağımlılıkları kurmuş bir paketi çıkardıktan sonra kullanın.

  • aptitude remove packagenameveya aptitude purge packagename(aynı şekilde)

    ayrıca, packagenameüzerinde kalan ama kalan paketler için zorunlu olmayan diğer paketleri de çıkarmaya çalışır . Not aptitudesadece yüklediği paketleri bağımlılık bilgileri hatırlar.

Ve daha pek çok şey var. Alt düzey dpkgkomutlar (gelişmiş) veya Muon, Synaptic, Software Center, vb. Gibi GUI araçları kullanılabilir. Uygulamaları kaldırmanın veya paket yönetiminizle etkileşimde bulunan diğer görevleri gerçekleştirmenin tek bir 'doğru yolu' yoktur.

Bulduğun liste sadece örnek. Anlamları anladığınızdan ve eylemi kabul etmeden önce ne yapmak istediğini denediğinizden emin olun ( Yaslında önerilen eylemleri gerçekleştirmeden önce basmanız gerekir ).

Sorudaki yıldız versiyonu büyük olasılıkla yanlıştır ; apt-getnormal bir ifadeyi kabul eder ve kabuk olarak glob kalıbı kabul etmez. Peki ne olur

sudo apt-get remove application*

takip ediliyor:

  1. Kabuk application*, geçerli dizindeki dosyalara bakarak genişlemeye çalışır . Eğer (normalde olduğu gibi) hiçbir şey bulamazsa, glob düzenini değiştirmeden döndürür ( bashburada varsayılan davranışla varsayalım --- zshhata verir).

  2. apt-getAdını paketlerini kaldıracak bir dize içeren düzenli ifade karşılayan application*olup, applicatiokeyfi bir sayı izledi n: applicatio, application, applicationn, libapplicatio, vb

  3. Bunun ne kadar tehlikeli olabileceğini görmek için deneyin (çifte güvenlik için kök olmadan) apt-get -s remove "wine*"( -syapmak yerine şeyi simüle edecek) --- kendi adında ve bağımlılarında "kazanan" olan tüm paketleri çıkaracak diyecektir. neredeyse tüm sistem ...

Muhtemelen, kastedilen komut gerçekten.

 sudo apt-get remove "^application.*"

(tırnak işaretleri ve noktaya dikkat edin) adıyla başlayan tüm paketleri kaldıracaktır application.

Bu komutlar

sudo updatedb                  # <-- updates the locate database (index). harmless
sudo locate application        # <-- locates the file 'application'. harmless
sudo rm -rf (file/folder name) # <-- removes files/dirs recursively. dangerous.

tamamen paket yönetim kapsamı dışındadır. Paket yöneticisini kullanmadan paketlere ait dosyaları kaldırmayın! Kafası karışacak ve işleri yapmanın yanlış yolu.

Bir dosyanın hangi pakete ait olduğunu bilmiyorsanız, şunu deneyin:

dpkg -S /path/to/file

9
--Purge seçeneği, yapılandırma dosyaları dahil olmak üzere kalan bağımlılıkları tamamen kaldırmaya çalışırken de kullanışlıdır: apt-get-autoremove --purge Ayrıca, ana dizininizdeki yapılandırma dosyalarının --purge seçeneğinden etkilenmediğini unutmayın. Bunları manuel olarak kaldırmak zorunda kalacaksınız.
Glutanimate

1
Burada bir hata oluştu: apt-get, RE'yi kabul ediyor, globs'u değil; Bu nedenle apt-get remove pack *, pac ile başlayan ve sıfır veya daha fazla k ... ile başlayan tüm paketleri kaldırır; bu normalde beklenmeyen bir durumdur. Anser'i düzenledim. Ayrıca bakınız askubuntu.com/questions/210976/…
Rmano

Bence bu cevap artık doğru değil. Ya apt remove -s texlive*da apt-getmeslektaşı gibi satırları Note, selecting 'texlive-font-utils' for glob 'texlive*'(onların gerçekten küre kabul ettiklerini ima ederek), ardından normal Package 'texlive-common' is not installed, so not removedve sonunda Remvsatırlar gibi satırları döndürürler Remv texlive-font-utils [2015.20160320-1] [...].
Jonathan Y.,

@JonathanY. Ayrıca kurulu olmayan paketleri de seçersiniz. Her neyse, lütfen YENİ bir soru sorabilir ve durumunuzla ilgili sorununuzu biraz daha ayrıntılı olarak anlatabilir misiniz?
Bakmaktan

Yeni bir soru sormuyorum. Bazı detayları yanlış yapan bu cevap yapıldığı için olası bir değişikliğe işaret ediyorum. Tanık olmak gerekirse, regex olarak bakmak yerine apt-get remove packa*, dünyayı gerçekten ele geçirecek gibi görünüyor packa*: eşleşiyor packageama değil pack.
Jonathan Y.,

110

Ubuntu 12.04 ve belki de daha yükseği için doğru yöntem:

sudo apt-get --purge autoremove packagename

Gibi ayrıntılı burada .

packagename*İstenmeyen paketleri silen ve çözdüğünden daha fazla soruna neden olabileceği için kullanmayın . Eğer en az bir ile çalıştırmak gerekiyorsa Veya -s, --simulate, --dry-runbayrak ilk bunu yapmadan ne yapacağını tam olarak görmek için.


13
bu doğru cevap, kısa ve özlü:
Anwar

20

Bu komutu kullanabilirsiniz:

sudo apt-get purge --auto-remove packagename

Gerekli paketleri, bu paketlerle yüklenen bağımlılıklar ile birlikte temizleyecektir. --auto-removeSeçeneği (bir takma ad olması autoremove) benzer şekilde çalışır sudo apt-get autoremove. Bu komutu kullanarak tek bir komut çalıştırabiliriz:

sudo apt-get purge --auto-remove packagename

Onun yerine:

sudo apt-get purge packagename
sudo apt-get autoremove

2
Haklı olsan da, biri de kullanabilir sudo apt-get --purge autoremove packagename. Burada 1 komut aynı
Anwar

Complete komutu apt-get autoremove --purgeyerine yerine de yazılabilir apt-get purge --auto-removemi?
16'da 18

3
Biri lütfen beni vurabilir mi?
Martin Andersson

7

Güvenle kullanabilir sudo apt-get remove --purge applicationveya sudo apt-get remove applicationszamanın% 99. purgeBayrak kullandığınızda, tüm yapılandırma dosyalarını da kaldırır. Söz konusu uygulamayı yeniden yüklemek isteyip istemediğinize bağlı olarak, istediğinizi veya hangisi olamayacağına karar verin. Bu , kaldırdığınız ana uygulamanın genellikle eklentileri, ek özellikleri vb. Olan application*başlangıçtaki tüm uygulamalarla eşleşir application. yani

sudo apt-get remove gedit*

kaldıracak gedit, gedit-pluginsve gedit-common. Genellikle bunu yapmak gerekmez, çünkü çoğu eklenti / ilişkili program ana uygulamaya bağlıdır ve ana uygulamayı kaldırdığınızda otomatik olarak kaldırılır (veya kaldırılmak üzere işaretlenir).

Son komutunuz, yalnızca kalanları dağınık kaldırıcıların olduğu bilinen uygulamalardan kaldırmaktır ve yalnızca uygulamanın kalanlarını kaldırmaktadır.


5

Bir paketi kaldırırken bazı hata mesajları aldım, çalıştığım tek yol şuydu:

mv /var/lib/dpkg/info/package.* /tmp/
dpkg --remove --force-remove-reinstreq package

Ben sadece kullanırken rağmen buldum

dpkg --remove --force-remove-reinstreq package

paketi kaldırmayan bana taşınacak dosyanın doğru yolunu gösterir:

mv /var/lib/dpkg/info/package.* /tmp/

Uygulama adınızla bir paket değiştirin. Ubuntu'da sudo kullanın, Debian'da root olun.



1

Kaldırmak istediğiniz uygulamaya bağlıdır. Yes komutunu vermeden önce daima bağımlılıklarını kontrol ettiğinizden emin olun. Bir şeyi komut satırına göre kaldırdığınızda, bazen artık gerekmeyen bir avuç kitaplık gösterilecektir. Bunlar apt-get autoremove ile kaldırılabilir.

Sudo apt-get remove --purge applicationname gibi komutları kullanarak, diğer uygulamaların ihtiyaç duyduğu bazı bağımlılıkları kaldırabilir ve bu nedenle sisteminizi bozabilir.

Daha güvenli bir şekilde yapmak istiyorsanız, sadece yazılım merkezini veya apt-get remove applicationname öğesini kullanarak her zaman kaldırabilirsiniz. Bağımlılıklar artık gerekli değilse, daha sonra apt-get autoremove öğesini sorun.


Ben bütün Debian paket sistemi için özel olarak tasarlanmış olduğunu düşünüyorum değil ona bağımlı diğer paketleri varsa bir paketi kaldırmak. Bağımlı tüm paketleri de kaldırmak isteyip istemediğiniz sorulabilir (ve yardım istemek için) ve bu, kaldırılmak üzere olan paket listesini gerçekten okumanız gereken yer, bu yüzden ne söylemeye çalıştığınızı düşünüyorum .
Xen2050

1

Sadece burada bir kafa karışıklığı kaynağı gibi görünen bir şeyi açıklığa kavuşturmak istedim. Yardımcı dpkgprogram, birbirleriyle ilişkili olarak paket bağımlılıklarını bilmiyor ya da izlemiyor, ki bu apt, geliştirilmesinin büyük bir nedeni . Bu sayfada bölüm 8.6'da bu konuda bilgi edinebilir Debian GNU / Linux SSS - Debian paket yönetim araçlarını

  • Apt ile: Eğer A paketini temizlemek istersem ve B paketi adı verilen bir bağımlılığa sahipsem ve B paketinin başka bağımlı paketleri olmazsa, A ve B paketi temizlenir. B DID paketi diğer bağımlı paketlere sahipse, sadece A paketi temizlenir.

  • Dpkg ile: Ne bağımlılık? Az önce bana lanet
    paketi temizlememi söyledin, ben de öyle yaptım! Sizin açınızdan zayıf planlama
    benim açımdan acil durum oluşturmaz.

Bununla birlikte, burada her temizleme yönteminde kullanılabilecek iki adet astar bulunmaktadır:

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --dry-run --purge

apt-get autoremove -y; apt-get --dry-run purge -y $(dpkg --list |grep '^rc' |awk '{print $2}')

--dry-runHangi işlemleri yapacağını bildirmek yerine, fiili temizleme işlemini gerçekleştirmek için kaldırın .

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.