Чем отличаются команды удаления пакетов APT?

17

В чем разница между этими командами?

  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
источник

Ответы:

24

Быстрый ответ

  • remove удаляет пакеты, названные в его честь.
  • autoremoveудаляет все автоматически установленные пакеты, которые больше не нужны. Неправильно перечислять имена пакетов после autoremove; они будут проигнорированы (и все подходящие пакеты будут удалены), что, вероятно, не то, что вы намереваетесь.
  • --purgeтакже вызывает удаление системных файлов конфигурации, связанных с удаляемыми пакетами. Он должен сопровождаться командой, такой как removeили autoremove. --purgeФлаг изменяет действие команды; оно не действует само по себе.
  • purgeозначает то же самое, что и --purge remove(то же самое, что и remove --purge). Неверно говорить purgeдважды; вторая purgeинтерпретируется как имя пакета для purged, что, вероятно, не то, что вы намереваетесь.

Полный ответ

Чтобы понять, что делают эти команды и чем они отличаются, полезно (и, вероятно, даже важно) понять две концепции:

  1. различие между установленными вручную и автоматически установленными пакетами
  2. различие между файлами пакета пакета и его файлами конфигурации

Установлено вручную или автоматически установлено

Установленный пакет устанавливается вручную или автоматически .

Когда вы указываете пакет для установки, и он установлен, он устанавливается вручную .

Но другие пакеты также могут быть установлены. Большинство пакетов имеют зависимости - другие пакеты, которые должны быть установлены, чтобы эти пакеты работали, как предполагалось. При установке пакета устанавливаются его зависимости (т. Е. Другие пакеты, от которых он зависит), за исключением тех, которые были установлены ранее.

Если пакет не указан вами для установки, а вместо этого устанавливается как зависимость пакета, который вы указали для установки, он устанавливается автоматически .

Обратите внимание, что если у вас установлено два пакета, и один из них является зависимостью от другого, это не означает, что эта зависимость устанавливается автоматически. Также возможно, что зависимость была установлена ​​вручную (т. Е. Указана вами, например, установлена ​​до или одновременно с пакетом, который от нее зависит).

В заключение:

  • Если вы попытаетесь вручную установить уже установленный пакет, он останется установленным. Но если он был установлен автоматически, изменение вносится - при попытке установить его вручную он помечается как установленный вручную.
  • Вы можете пометить любой пакет как установленный вручную или автоматически (с помощью apt-markкоманды), независимо от того, как или при каких обстоятельствах они были фактически установлены.
  • Пакеты, поставляемые с вашей системой Ubuntu, не все устанавливаются автоматически; некоторые из них отмечены как установленные автоматически, а другие отмечены как установленные вручную. Это должно удовлетворить логику, лежащую в основе различия между пакетами, устанавливаемыми вручную и автоматически, - идея о том, что некоторые пакеты нужны только для обслуживания других.

Как правило, для каждого автоматически установленного пакета у вас будет как минимум один установленный вручную пакет, который зависит от него (и который стал причиной его автоматической установки). Однако если вы затем удалите все установленные вручную пакеты, которые зависят от автоматически установленного пакета, автоматически установленный пакет больше не потребуется, но все равно будет установлен.

apt-get autoremove удаляет автоматически установленные пакеты, которые больше не имеют пакетов, установленных вручную, в зависимости от них.

Файлы пакета и файлы конфигурации

Пакет предоставляет файлы, которые должны быть и должны оставаться одинаковыми в каждой системе, где установлена ​​эта версия этого пакета. Такие файлы предоставляют исполняемые файлы, ресурсы, документацию и другие «ресурсы» для установленных программ. Мы обычно просто называем эти «файлы», которые предоставляет пакет.

Но пакет предоставляет и другие файлы, которые предназначены (возможно) для изменения. Они называются глобальными (или общесистемными) файлами конфигурации. Они почти всегда установлены в /etcкаталоге, и они могут быть автоматически и вручную изменены , чтобы изменить поведение установленных программ. Например, sudoимеет файл конфигурации /etc/sudoersи каталог для дополнительных файлов конфигурации /etc/sudoers.d. Этот файл и любые файлы , добавленные в этот каталог, указать , кому разрешено использовать sudoв каких отношениях.

Обычно желательно, чтобы удаление пакета и последующая его установка не изменили его поведение (если только файлы пакета не были повреждены, и поэтому вы, конечно, переустановили его). Поэтому, как правило, когда пакет удаляется, его файлы пакета удаляются, но его общесистемные файлы конфигурации остаются нетронутыми.

Когда вы удаляете пакет без указания того, что его системные файлы конфигурации также должны быть удалены, это называется «удалением» пакета.

Если вы также хотите удалить общесистемные файлы конфигурации пакета при удалении пакета, это называется «очисткой» пакета.

apt-get removeудалит пакет; то есть, он будет удалить пакет, но оставить свои общесистемные конфигурационные файлы.

apt-get purgeочистит пакет; то есть он удалит пакет, а также обязательно удалит его системные файлы конфигурации.

Другой способ удалить пакеты - использовать --purgeфлаг. Это не говорит, apt-getчто делать; вместо этого он изменяет то, что термины (или «команды»), как removeговорят, это делать. Этот --purgeфлаг приводит к тому, что любые деинсталляции пакетов сопровождаются удалением общесистемных файлов конфигурации для деинсталлируемых пакетов. Другими словами, --purgeфлаг превращает абсорбцию в чисток.

Почему у нас есть --purgeфлаг, когда у нас есть purgeкоманда? В конце концов, не sudo apt-get --purge remove packagenameэквивалентно sudo apt-get purge packagename. Они эквивалентны. Когда --purgeвам нужно изменить поведение команд, отличных от remove.

Например, предположим, что вы хотите удалить автоматически установленные пакеты, которые больше не нужны (поскольку в зависимости от них больше нет установленных вручную пакетов), но вы не просто хотите удалить эти автоматически установленные пакеты, вы также хотите удалить их общесистемные конфигурационные файлы. Тогда вы могли бы работать:

sudo apt-get --purge autoremove

Давайте рассмотрим еще один использование --purge. Существует флаг --reinstall, который превращает установки в переустановки. Это говорит о том, что, как правило, при попытке установить пакет , который уже установлен, либо ничего не произойдет, или (если пакет помечается автоматически установлен) пакет будет маркирован установлен вручную. Но с --reinstallфлагом установка пакета, который уже установлен, вызывает его удаление, а затем установку обратно :

sudo apt-get --reinstall install packagename

Но предположим, что вы хотите удалить общесистемные файлы конфигурации пакета, который вы переустанавливаете. Это несколько распространено; когда пакет не работает, и вы не знаете, почему, вы можете попробовать переустановить его, а также удалить его файлы конфигурации, чтобы его конфигурация была сброшена до значения по умолчанию. Для этого вы можете запустить:

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

Установка --reinstallпревращает установку в повторную установку (т.е. удаление, а затем установку), а --purgeчасть удаления повторной установки превращается в продувку.

Поведение ваших примеров

Теперь должно быть ясно, что именно делает каждая из ваших примеров apt-getкоманд:

  • sudo apt-get autoremove --purge packagenames

    Это удаляет автоматически установленные пакеты, у которых больше нет установленных вручную пакетов, которые зависят от них. То есть он удаляет эти пакеты (что влечет за собой удаление файлов их пакетов), а также удаляет их общесистемные файлы конфигурации.

    Здесь packagenamesничего не делает. В частности, если вы намеревались просто удалить пакеты, имена которых перечислены там, то это будет не так , как вы намерены.

  • sudo apt-get remove --purge packagenames

    Это очищает packagenames; Предполагая packagenames, что список имен пакетов разделен пробелами, он удалит их все. То есть, он будет удалять их (что влечет за собой удаление их файлы пакета), а также удалять их общесистемные конфигурационные файлы.

    Если какой-либо из перечисленных пакетов packagenamesне установлен, его присутствие в списке не окажет никакого влияния (за исключением того, что вы будете проинформированы о том, что он не был установлен). Если вы перечислите имена пакетов, которые не являются именами какого-либо фактического пакета, команда завершится с ошибкой.unable to locate packagename

  • sudo apt-get purge purge packagenmaes

    Если вы удалите одно из вхождений purgeэтой команды, оно будет эквивалентно предыдущему. В существующем состоянии он пытается очистить вызываемый пакет purge, а также очистить пакеты, перечисленные в packagenames. Поскольку purgeэто не имя какого-либо пакета, произойдет сбой с сообщением об ошибке.

  • sudo apt-get remove packagenames

    Это удаляет пакеты, перечисленные в packagenames, что влечет за собой удаление их файлов пакета. Это не удаляет их общесистемные файлы конфигурации (потому что это просто удаление, а не очистка).

  • sudo apt-get autoremove

    Это удаляет автоматически установленные пакеты, у которых больше нет установленных вручную пакетов, которые зависят от них. Это влечет за собой удаление их файлов пакета, но не их системных файлов конфигурации (то есть это удаление, но не очистка).

Для получения дополнительной информации о том, как использовать apt-get, я рекомендую его страницу руководства . Для получения более общей информации см. Это руководство .

Элия ​​Каган
источник