Jaki jest prawidłowy sposób całkowitego usunięcia aplikacji?

545

Szukałem takich informacji w sieci i znalazłem różne wiersze poleceń, takie jak te:

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*

Więc jaki jest właściwy sposób? Czy konieczne jest użycie tego „*”?

Potem znalazłem też następujące polecenia:

sudo updatedb
sudo locate application
sudo rm -rf (file/folder name)
użytkownik48949
źródło
1
Odpowiedź na niektóre pytania można znaleźć w tym poście: askubuntu.com/questions/1143/how-can-i-uninstall-software
Glutanimate
8
application*może czasami dać nieoczekiwane wyniki - na przykład, jeśli masz plik w bieżącym katalogu o nazwie application_information, powłoka rozszerzy go, zanim zostanie przekazany do apt-get. Jeśli tak się dzieje i chcesz literalnej gwiazdki, możesz użyć application\*lub'application*'
Izkata
6
application*jest jeszcze bardziej niebezpieczne, gdy w bieżącym katalogu nie ma plików: apt-getużywa wyrażeń regularnych, bez wzorców globów. Ludzie prawie wyczyścili cały system, próbując go usunąć wine*.
Andrea Corbellini,
3
Czy możesz zaakceptować odpowiedź? Być wdzięcznym ludziom, którzy ci odpowiedzieli.
m-ric
Ani application*nie application\*jest bezpieczny! Cytowanie *z \lub ' 'tylko zwiększa ryzyko, upewniając się, że *jest przekazywane tak, jak jest apt-get(choć zwykle tak jest!), Powoduje apt-getinterpretację argumentu jako wyrażenia regularnego. W wyrażeniu regularnym *oznacza „zero lub więcej poprzedniego znaku”. Powszechną formą błędu jest odinstalowanie wine*, usuwając wszystkie pakiety z win(nie wine, win) nigdzie w swoich nazwach i wszystkich pakietów w zależności od każdego z nich. Zobacz to wyjaśnienie i możliwe poprawki . @Izkata
Eliah Kagan

Odpowiedzi:

704
  • apt-get remove packagename

    usunie pliki binarne, ale nie pliki konfiguracyjne ani pliki pakietu packagename. Pozostawi również zainstalowane zależności w czasie instalacji bez zmian.

  • apt-get purge packagename lub apt-get remove --purge packagename

    usunie prawie wszystko dotyczące pakietu packagename, ale nie zależności zainstalowane z nim podczas instalacji. Oba polecenia są równoważne.

    Jest to szczególnie przydatne, gdy chcesz „zacząć wszystko od nowa” w aplikacji, ponieważ pomieszałeś konfigurację. Nie usuwa jednak plików konfiguracyjnych ani danych znajdujących się w domowych katalogach użytkowników, zwykle w ukrytych folderach. Nie ma też łatwego sposobu na ich usunięcie.

  • apt-get autoremove

    usuwa osierocone pakiety, tj. zainstalowane pakiety, które były instalowane jako zależność, ale już nie są. Użyj tego po usunięciu pakietu z zainstalowanymi zależnościami, które już Cię nie interesują.

  • aptitude remove packagenamelub aptitude purge packagename(podobnie)

    spróbuje również usunąć inne pakiety, które były wymagane przez packagenameon, ale nie są wymagane przez pozostałe pakiety. Pamiętaj, że aptitudezapamiętuje tylko informacje o zależnościach dla zainstalowanych pakietów.

I istnieje wiele innych. dpkgMożna używać poleceń niższego poziomu (zaawansowane) lub narzędzi GUI, takich jak Muon, Synaptic, Software Center itp. Nie ma jednego „poprawnego sposobu” usuwania aplikacji lub wykonywania innych zadań współdziałających z zarządzaniem pakietami.

Lista, którą znalazłeś, to tylko przykłady. Upewnij się, że rozumiesz znaczenie i wypróbuj, co chce zrobić, zanim zaakceptujesz akcję (musisz nacisnąć, Yzanim faktycznie wykona czynności zgodnie z propozycją).

Wersja gwiazdki w pytaniu jest prawdopodobnie nieprawidłowa ; apt-getprzyjmuje jako powłokę wyrażenie regularne, a nie wzorzec globalny. Co się dzieje z

sudo apt-get remove application*

jest następujący:

  1. Powłoka próbuje się rozwinąć, application*patrząc na pliki w bieżącym katalogu. Jeśli (jak to zwykle bywa) nic nie znajdzie, zwraca niezmieniony wzorzec globalny (zakładając, że bashzachowanie domyślne tutaj --- zshspowoduje błąd).

  2. apt-getusunie pakiety, których nazwa zawiera ciąg , który spełnia wyrażenie regularne application*, to znaczy, applicationastępnie dowolnej liczby n: applicatio, application, applicationn, libapplicatio, itd.

  3. Aby zobaczyć, jak może to być niebezpieczne, spróbuj (bez rootowania dla podwójnego bezpieczeństwa) apt-get -s remove "wine*"( -ssymuluje to, zamiast tego robić) - powie, że usunie wszystkie pakiety, które mają „win” w nazwie i zależne, prawie cały system ...

Prawdopodobnie polecenie, które miało na myśli, jest naprawdę

 sudo apt-get remove "^application.*"

(zwróć uwagę na cudzysłowy i kropkę), co spowoduje usunięcie wszystkich pakietów, których nazwa zaczyna się od application.

Te polecenia,

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.

są całkowicie poza zakresem zarządzania pakietami. Nie usuwaj plików należących do pakietów bez użycia menedżera pakietów! Będzie się mylić i jest to zły sposób robienia rzeczy.

Jeśli nie wiesz, do którego pakietu należy plik, spróbuj tego:

dpkg -S /path/to/file
gertvdijk
źródło
9
Opcja --purge jest również przydatna przy próbie pełnego usunięcia pozostałych zależności, w tym ich plików konfiguracyjnych: apt-get-autoremove --purge Należy również pamiętać, że opcja --purge nie ma wpływu na pliki konfiguracyjne w katalogu domowym. Te będziesz musiał usunąć ręcznie.
Glutanimate,
1
Wystąpił błąd: apt-get akceptuje RE, a nie glob; więc apt-get remove pack * usunie wszystkie pakiety zaczynające się od pac, po których następuje zero lub więcej k ... co zwykle jest nieoczekiwane. Zredagowałem anser. Zobacz także askubuntu.com/questions/210976/…
Rmano,
Myślę, że ta odpowiedź nie jest już dokładna. Każda apt remove -s texlive*z apt-getlinii zwrotnych lub jej odpowiedniki, takie jak Note, selecting 'texlive-font-utils' for glob 'texlive*'(co oznacza, że ​​faktycznie akceptują globusy), a następnie zwykłe Package 'texlive-common' is not installed, so not removedi na końcu Remvwiersze, takie jak Remv texlive-font-utils [2015.20160320-1] [...].
Jonathan Y.
@JathanathanY. Wybrałbyś również niezainstalowane pakiety. W każdym razie, czy mógłbyś zadać NOWE Pytanie i bardziej szczegółowo wyjaśnić, jaka jest Twoja sytuacja? Z przyjemnością na to spojrzę :)
gertvdijk
Nie zadaję nowego pytania. Wskazuję na możliwą zmianę, ponieważ udzielono tej odpowiedzi, która powoduje, że niektóre szczegóły są nieprawidłowe. To znaczy, wydaje się, że apt-get remove packa*rzeczywiście bierze glob packa*zamiast patrzeć na niego jako wyrażenie regularne: pasuje, packageale nie pack.
Jonathan Y.
109

W przypadku systemu Ubuntu 12.04 i nowszych poprawna metoda to:

sudo apt-get --purge autoremove packagename

Jak wyszczególniono tutaj .

Nie używaj, packagename*ponieważ może to usunąć niezamierzone pakiety i spowodować więcej problemów niż rozwiązuje. Lub jeśli trzeba, przynajmniej uruchomić go z -s, --simulate, --dry-runflaga najpierw dokładnie sprawdzić, co to zrobi bez robią.

Kurtosis
źródło
13
to jest poprawna odpowiedź, krótka i zwięzła:
Anwar
20

Możesz użyć tego polecenia:

sudo apt-get purge --auto-remove packagename

Oczyści wymagane pakiety wraz z zależnościami zainstalowanymi z tymi pakietami. --auto-removeOpcja (jako alias autoremove) działa podobnie do sudo apt-get autoremove. Za pomocą tego polecenia możemy uruchomić jedno polecenie:

sudo apt-get purge --auto-remove packagename

Zamiast:

sudo apt-get purge packagename
sudo apt-get autoremove
pl_rock
źródło
2
Chociaż masz rację, ale można również użyć sudo apt-get --purge autoremove packagename. To samo 1 polecenie tutaj
Anwar
Czy całe polecenie można również zapisać jako apt-get autoremove --purgezamiast apt-get purge --auto-remove?
felwithe
3
Czy ktoś może mnie zastrzelić?
Martin Andersson,
7

Możesz bezpiecznie używać sudo apt-get remove --purge applicationlub sudo apt-get remove applications99% czasu. Kiedy używasz purgeflagi, po prostu usuwa również wszystkie pliki konfiguracyjne. Które mogą, ale nie muszą być, w zależności od tego, czy chcesz ponownie zainstalować tę aplikację. application*Będzie pasował do wszystkich aplikacji, które zaczynają się application, które są zwykle wtyczek, dodatkowe funkcje, itp głównego aplikacji, usuwanie. to znaczy

sudo apt-get remove gedit*

byłoby usunąć gedit, gedit-pluginsi gedit-common. Zazwyczaj nie jest to konieczne, ponieważ większość wtyczek / powiązanych programów zależy od głównej aplikacji i zostanie automatycznie usunięta (lub oznaczona do usunięcia) po odinstalowaniu głównej aplikacji.

Twoim ostatnim poleceniem jest po prostu usunięcie resztek z aplikacji, o których wiadomo, że mają niechlujne deinstalatory, i to po prostu usunięcie wszelkich pozostałości aplikacji.

reverendj1
źródło
5

Otrzymałem kilka komunikatów o błędach podczas usuwania pakietu, jedynym sposobem, który działał, było:

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

Przekonałem się, że chociaż używam tylko

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

nie usuwa pakietu, pokazuje mi poprawną ścieżkę do pliku, z którym należy się przenieść:

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

Zastąp pakiet nazwą aplikacji. Używaj sudo w Ubuntu, zostań rootem w Debianie.

DangerFireBob
źródło
1

To zależy od aplikacji, którą chcesz usunąć. Zawsze należy sprawdzić jego zależności przed wydaniem polecenia tak. Gdy usuniesz coś za pomocą wiersza polecenia, czasami wyświetli garść bibliotek, które nie są już potrzebne. Można je usunąć za pomocą apt-get autorove.

Uważaj, używając poleceń takich jak sudo apt-get remove --purge nazwa_aplikacji może usunąć niektóre zależności, które są potrzebne innym aplikacjom, i jako takie może uszkodzić system.

Jeśli chcesz to zrobić w bezpieczniejszy sposób, zawsze możesz go usunąć za pomocą tylko centrum oprogramowania lub apt-get remove nazwa aplikacji. Jeśli zależności nie są już potrzebne, należy wydać apt-get autorove później.

gustavokrm
źródło
Myślę, że cały system pakietów Debiana został zaprojektowany tak, aby nie usuwać pakietu, jeśli istnieją inne pakiety zależne od niego. Możesz zostać (pomocniczo) zapytany, czy chcesz usunąć wszystkie zależne pakiety, i właśnie tam powinieneś przeczytać listę pakietów, które mają zostać usunięte, i myślę, że to , co próbujesz powiedzieć.
Xen2050,
1

Chciałem tylko wyjaśnić jedną rzecz, która wydaje się być źródłem zamieszania. dpkgNarzędzie nie wiedzieć lub śledzić pakiety zależności w stosunku do siebie, co było ważnym powodem, który aptzostał opracowany wierzę. Możesz o tym przeczytać w sekcji 8.6 na tej stronie FAQ Debiana GNU / Linux - narzędzia do zarządzania pakietami Debiana

  • Z apt: Jeśli chciałbym wyczyścić pakiet A i ma on zależność o nazwie pakiet B, a pakiet B nie miał innych zależnych pakietów, wówczas pakiety A i B zostaną usunięte. Jeśli pakiet B DID ma inne pakiety zależne, tylko pakiet A zostanie wyczyszczony.

  • Z dpkg: jaka zależność? Właśnie kazałeś mi wyczyścić tę cholerną
    paczkę, więc to właśnie zrobiłem! Złe planowanie z twojej strony nie
    stanowi zagrożenia z mojej strony.

Powiedziawszy to, oto dwie jednowarstwowe, które można zastosować do każdej metody oczyszczania:

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}')

Usuń, --dry-runaby wykonać rzeczywistą operację czyszczenia zamiast zgłaszać, jakie działania byś podjął.

Sysinfo.io
źródło