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

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

  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 [ 118]
  5. sudo apt-get autoremove
17
задан 1 August 2013 в 09:33

1 ответ

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

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

Полный ответ

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

  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, я рекомендую его справочную страницу . Для получения более общей информации см. это руководство .

0
ответ дан 1 August 2013 в 09:33

Другие вопросы по тегам:

Похожие вопросы: