Czym różnią się różne polecenia usuwania pakietu APT?

17

Jaka jest różnica między tymi poleceniami?

  1. sudo apt-get autoremove --purge packagenames
  2. sudo apt-get remove --purge packagenames
  3. sudo apt-get purge purge packagenmaes
  4. sudo apt-get remove packagenames
  5. sudo apt-get autoremove
sajjad
źródło

Odpowiedzi:

24

Szybka odpowiedź

  • remove odinstalowuje pakiety nazwane po nim.
  • autoremoveodinstalowuje wszystkie automatycznie zainstalowane pakiety, które nie są już potrzebne. Niepoprawne jest wyświetlanie nazw pakietów po autoremove; zostaną zignorowane (i wszystkie kwalifikujące się pakiety zostaną usunięte), co prawdopodobnie nie jest tym, co zamierzasz.
  • --purgepowoduje również usunięcie ogólnosystemowych plików konfiguracyjnych powiązanych z usuwanymi pakietami. Musi mu towarzyszyć polecenie, takie jak removelub autoremove. --purgeFlag modyfikuje działanie polecenia; nie działa samodzielnie.
  • purgeoznacza to samo co --purge remove(co jest takie samo jak remove --purge). Nie można powiedzieć purgedwa razy; drugi purgejest interpretowany jako nazwa pakietu purge, który ma być d, co prawdopodobnie nie jest tym, co zamierzasz.

Pełna odpowiedź

Aby zrozumieć, co robią te polecenia i jak się różnią, pomaga (i prawdopodobnie jest nawet niezbędne) zrozumieć dwie koncepcje:

  1. rozróżnienie między ręcznie instalowanymi i automatycznie instalowanymi pakietami
  2. rozróżnienie między plikami pakietu i plikami konfiguracyjnymi

Zainstalowane ręcznie a zainstalowane automatycznie

Zainstalowany pakiet jest instalowany ręcznie lub automatycznie .

Po określeniu pakietu do zainstalowania, który jest zainstalowany, jest on instalowany ręcznie .

Ale mogą być również instalowane inne pakiety. Większość pakietów ma zależności - inne pakiety, które należy zainstalować, aby działały zgodnie z przeznaczeniem. Podczas instalowania pakietu instalowane są jego zależności (tj. Inne pakiety, od których zależy), z wyjątkiem tych, które były wcześniej instalowane.

Jeśli pakiet nie jest określony przez Ciebie do zainstalowania, ale zamiast tego jest instalowany jako zależność od pakietu określonego do zainstalowania, jest on instalowany automatycznie .

Należy pamiętać, że jeśli masz zainstalowane dwa pakiety, a jeden z nich jest zależnością drugiego, nie oznacza to, że zależność jest instalowana automatycznie. Możliwe jest również, że zależność została zainstalowana ręcznie (tj. Określona przez Ciebie, na przykład zainstalowana przed lub w tym samym czasie, co pakiet, który jest od niej zależny).

Wreszcie:

  • Jeśli spróbujesz ręcznie zainstalować pakiet, który jest już zainstalowany, pozostanie zainstalowany. Ale jeśli został zainstalowany automatycznie, wprowadzana jest zmiana - próba ręcznej instalacji spowoduje oznaczenie go jako zainstalowanego ręcznie.
  • Możesz oznaczyć dowolny pakiet jako zainstalowany ręcznie lub automatycznie (za pomocą apt-markpolecenia), bez względu na to, w jaki sposób lub w jakich okolicznościach zostały one faktycznie zainstalowane.
  • Pakiety, które są fabrycznie zainstalowane z systemem Ubuntu, nie są wszystkie instalowane automatycznie; niektóre z nich są oznaczone automatycznie zainstalowane, a inne oznaczone ręcznie. Ma to na celu spełnienie logiki rozróżnienia pomiędzy pakietami instalowanymi ręcznie i automatycznie - idea, że ​​niektóre pakiety są potrzebne tylko w służbie innym.

Zazwyczaj dla każdego automatycznie instalowanego pakietu będziesz mieć co najmniej jeden ręcznie zainstalowany pakiet, który zależy od niego (i który spowodował, że został on automatycznie zainstalowany). Jeśli jednak usuniesz wszystkie ręcznie zainstalowane pakiety, które zależą od automatycznie zainstalowanego pakietu, automatycznie zainstalowany pakiet nie będzie już potrzebny, ale nadal będzie zainstalowany.

apt-get autoremove usuwa automatycznie zainstalowane pakiety, które nie mają już żadnych ręcznie zainstalowanych pakietów w zależności od nich.

Pliki pakietów i pliki konfiguracji

Pakiet zawiera pliki, które mają pozostać takie same w każdym systemie, w którym zainstalowana jest ta wersja tego pakietu. Takie pliki zapewniają pliki wykonywalne, zasoby, dokumentację i inne „zasoby” dla zainstalowanych programów. Zwykle nazywaliśmy je „plikami” dostarczanymi przez pakiet.

Ale pakiet zawiera również inne pliki, które mają (ewentualnie) zostać zmienione. Są to tak zwane globalne (lub systemowe) pliki konfiguracyjne. Prawie zawsze są instalowane w /etckatalogu i można je automatycznie i ręcznie modyfikować, aby zmienić zachowanie zainstalowanych programów. Na przykład sudoma plik konfiguracyjny /etc/sudoersi katalog na więcej plików konfiguracyjnych /etc/sudoers.d. Ten plik i wszystkie pliki dodane do tego katalogu określają, kto może korzystać sudow jaki sposób.

Zwykle pożądane jest, aby odinstalowanie pakietu, a następnie ponowne zainstalowanie go nie zmieniło jego zachowania (chyba że pliki pakietu były uszkodzone i dlatego oczywiście go ponownie zainstalowałeś). Dlatego zazwyczaj, gdy pakiet jest odinstalowywany, pliki pakietu są usuwane, ale pliki konfiguracji systemu pozostają niezmienione.

Po odinstalowaniu pakietu bez określenia, że ​​jego systemowe pliki konfiguracyjne również powinny zostać usunięte, jest to nazywane „usuwaniem” pakietu.

Jeśli chcesz również usunąć pliki konfiguracji całego pakietu podczas odinstalowywania pakietu, nazywa się to „czyszczeniem” pakietu.

apt-get removeusunie paczkę; oznacza to, że odinstaluje pakiet, ale pozostawi pliki konfiguracji systemu.

apt-get purgeoczyści paczkę; oznacza to, że odinstaluje pakiet, a także usunie swoje systemowe pliki konfiguracyjne.

Innym sposobem na wyczyszczenie pakietów jest użycie --purgeflagi. To nie mówi, apt-getco robić; zamiast tego modyfikuje to, co oznaczają takie polecenia (lub „polecenia”) remove. --purgeFlaga powoduje żadnych uninstallations pakietów towarzyszyć skreślenia systemowy plików konfiguracyjnych dla pakietu (ów) jest odinstalowane. Innymi słowy, --purgeflaga zmienia przeprowadzki w czystki.

Dlaczego mamy --purgeflagę, kiedy mamy purgepolecenie? W końcu nie jest sudo apt-get --purge remove packagenamerównoważne z sudo apt-get purge packagename. Są równoważne. Gdzie --purgejest przydatna jest, gdy chcesz zmienić zachowanie poleceń innych niż remove.

Załóżmy na przykład, że chcesz odinstalować automatycznie zainstalowane pakiety, które nie są już potrzebne (ponieważ w zależności od nich nie ma już żadnych ręcznie zainstalowanych pakietów), ale nie chcesz tylko usunąć tych automatycznie zainstalowanych pakietów, ale chcesz również usunąć ich systemowe pliki konfiguracyjne. Następnie możesz uruchomić:

sudo apt-get --purge autoremove

Rozważmy jeszcze jedno zastosowanie --purge. Istnieje flaga o nazwie --reinstall, która zmienia instalacje w ponowne instalacje. Oznacza to, że zwykle przy próbie zainstalowania pakietu, który jest już zainstalowany, nic się nie stanie lub (jeśli pakiet zostanie oznaczony jako zainstalowany automatycznie), pakiet zostanie oznaczony jako zainstalowany ręcznie. Ale z --reinstallflagą zainstalowanie pakietu, który jest już zainstalowany, powoduje jego usunięcie, a następnie ponowne zainstalowanie :

sudo apt-get --reinstall install packagename

Załóżmy jednak, że chcesz usunąć ogólnosystemowe pliki konfiguracyjne ponownie instalowanego pakietu. Jest to dość powszechne; gdy pakiet nie działa i nie wiesz dlaczego, możesz spróbować zainstalować go ponownie, a także usunąć jego pliki konfiguracyjne, aby przywrócić domyślną konfigurację. Aby to osiągnąć, możesz uruchomić:

sudo apt-get --purge --reinstall install packagename

--reinstallInstalacja zamienia reinstalacji (czyli usunięcie następuje instalacji), a --purgezamienia część usuwania reinstalacji do czystki.

Zachowanie twoich przykładów

Teraz powinno być jasne dokładnie, co każdy z twojego przykładu apt-get poleceń:

  • sudo apt-get autoremove --purge packagenames

    Spowoduje to automatyczne zainstalowanie pakietów, które nie mają już żadnych ręcznie zainstalowanych pakietów, które od nich zależą. Oznacza to, że odinstalowuje te pakiety (co pociąga za sobą usunięcie ich plików), a także usuwa ich ogólnosystemowe pliki konfiguracyjne.

    Tutaj packagenamesnic nie robi. W szczególności, jeśli zamierzasz po prostu usunąć pakiety, których nazwy są tam wymienione, nie będzie to działało tak, jak chcesz.

  • sudo apt-get remove --purge packagenames

    To czyści packagenames ; zakładając, że packagenameslista nazw pakietów jest oddzielona spacjami, wyczyści je wszystkie. Oznacza to, że odinstaluje je (co pociąga za sobą usunięcie ich plików pakietu), a także usunie ich systemowe pliki konfiguracyjne.

    Jeśli którykolwiek z wymienionych w nim pakietów packagenamesnie zostanie zainstalowany, jego obecność na liście nie przyniesie żadnego efektu (poza tym, że zostaniesz poinformowany, że nie został zainstalowany). Jeśli podasz nazwy pakietów, które nie są nazwami rzeczywistych pakietów, polecenie zakończy się niepowodzeniem z błędem.unable to locate packagename

  • sudo apt-get purge purge packagenmaes

    Jeśli usuniesz jedno z wystąpień purgetego polecenia, będzie ono równoważne z poprzednim. W obecnej postaci próbuje wyczyścić pakiet o nazwie purge, a także wyczyścić pakiety wymienione w packagenames. Ponieważ purgenie jest to nazwa żadnego pakietu, nie powiedzie się komunikat o błędzie.

  • sudo apt-get remove packagenames

    Spowoduje to usunięcie pakietów wymienionych w packagenames, co pociąga za sobą usunięcie ich plików pakietów. Nie usuwa to ich ogólnosystemowych plików konfiguracyjnych (ponieważ jest to jedynie usunięcie, a nie wyczyszczenie).

  • sudo apt-get autoremove

    Spowoduje to odinstalowanie automatycznie zainstalowanych pakietów, które już nie mają zależnych od nich pakietów. Oznacza to usunięcie ich plików pakietu, ale nie ich systemowych plików konfiguracyjnych (to znaczy, że jest to usunięcie, ale nie czyszczenie).

Aby uzyskać więcej informacji na temat korzystania apt-get, polecam jego stronę podręcznika . Więcej ogólnych informacji znajduje się w tym przewodniku .

Eliah Kagan
źródło