Когда бы вы использовали apt-get remove over apt-get autoremove?

16

Я понимаю, что apt-get removeудаляет пакеты и apt-get autoremoveявляется удалить все пакеты, которые были установлены для выполнения зависимости для данного пакета. Так, например, если я установил LibreOffice и у него были зависимости, скажем, от Java и установил его как часть установки, когда я запускаю команду apt-get libreoffice, зачем мне запускать команду, apt-get remove libreofficeа затем apt-get autoremove? Разве я не могу просто запустить команду apt-get autoremove libreoffice? Или это сочетание apt-get removeи apt-get autoremoveдля другой цели?

PeanutsMonkey
источник

Ответы:

11

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

Если вы всегда устанавливаете программное обеспечение с помощью apt-get, без исключения, и доверяете всем зависимостям, чтобы они были правильными (какими они обычно являются), то вы можете использовать apt-get autoremoveи получить небольшой объем дискового пространства и уменьшенную подверженность потенциальным дырам в безопасности, имея он удаляет пакеты, которые больше не имеют пакетов, которые в них нуждаются.

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

Например, если я установлю AwesomePackage, это может зависеть от AwesomeLibrary, и, следовательно, AwesomeLibraryбудет автоматически установлен как зависимость . Когда я AwesomePackageудаляю с помощью функции автоудаления, пока ни один другой пакет не имеет AwesomeLibraryзависимости, он также будет удален. Но если SuperPackageтакже требуется AwesomeLibrary, или если я установил AwesomeLibraryявно сам, а apt-get install AwesomeLibraryне заставлял его автоматически входить в качестве зависимости ( ), то автоматическое удаление не избавилось бы от этого.

Причина, по которой он не используется по умолчанию, заключается в том, что наличие AwesomeLibraryв системе неиспользуемой является очень незначительной проблемой. Это почти никогда не вызовет проблем, и большинство зависимостей не занимают много места. Существуют исключения, но времена, когда удаление зависимости вызовет проблемы, будут превосходить количество раз, когда это решит или предотвратит проблему.

Мирддин Эмрис
источник
Извините, Мирддин Эмрис. Вы потеряли меня там. Итак, позвольте мне попытаться понять, что вы сказали. Так, например, если бы я установил libreoffice с помощью apt-get, он установил бы целую кучу зависимостей, предполагая, что они еще не установлены. Теперь, если я тогда решу избавиться от libreoffice, я предполагаю, что я буду работатьapt-get remove libreoffice
PeanutsMonkey
Если бы я хотел, чтобы установленные зависимости оставались, это правильно? Если бы я хотел избавить себя от libreoffice и связанных с ним зависимостей, предполагая, что они не использовались другой программой, я понял, что запустил бы команду apt-get autoremovelibreoffice? Это верно?
PeanutsMonkey
Это абсолютно правильно @PeanutsMonkey. Autoremove также удалит другие пакеты , от которых зависит указанный пакет, если они больше не требуются и не были специально установлены отдельно.
Мирддин Эмрис
На самом деле, это не совсем правильно; У меня был неправильный синтаксис в моем ответе (как указал @cooper). Я исправил это в ответе выше. apt-get autoremoveэто отдельная команда apt-get remove Package, я прошу прощения за первоначальную дезинформацию.
Мирддин Эмрис
Спасибо Мирддин Эмрис. Извините, если я n00b. Когда ты так говоришь There are exceptions, but the times when removing a dependancy will cause problems outnumber the times when it will solve or prevent a problem. Что ты конкретно имеешь ввиду?
PeanutsMonkey
12

Вы можете найти описание Вытащите , autoremove , чистки , чистой и AUTOCLEAN , а также синтаксис в страницах руководства для APT-получить: man apt-get.

Если вы все еще не уверены, прочитав его, хотя (я был) лучший способ уточнить это, попробуйте.

Ниже приведен пример полного дерева зависимостей для vim :

ВИМ-зависимость дерева

Вы можете получить это с:

apt-rdepends -d vim > vim.dot
dotty vim.dot

Вы также можете получить список непосредственных зависимостей, используя apt-cache depends(см. Объявление отношений между пакетами для получения дополнительной информации):

$ apt-cache depends vim
vim
  Depends: vim-common
  Depends: vim-runtime
  Depends: libacl1
  Depends: libc6
  Depends: libgpm2
  Depends: libselinux1
  Depends: libtinfo5
  Suggests: <ctags>
    exuberant-ctags
  Suggests: vim-doc
  Suggests: vim-scripts

Похоже, что vim зависит от количества пакетов, давайте попробуем установить его вместе apt-get installи посмотрим, что произойдет:

$ sudo apt-get install vim
...
The following extra packages will be installed:
  vim-common vim-runtime
Suggested packages:
  ctags vim-doc vim-scripts
The following NEW packages will be installed:
  vim vim-common vim-runtime
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
After this operation, 25.1 MB of additional disk space will be used.
Do you want to continue [Y/n]? n

Чтобы заставить vim работать, нам нужны пакеты vim-common и vim-runtime, и apt-getмы позаботимся об этом. Мы можем проверить это с помощью dpkg -s pkg...(см. man dpkgДополнительную информацию о статусах):

$ sudo dpkg -s libc6
Package: libc6
Status: install ok installed        // we already have it, no need to install

$ sudo dpkg -s vim-common
Package: vim-common
Status: deinstall ok config-files   // we don't have it, have to install

Подобно тому, как мы проверили, от чего зависит vim , мы также можем проверить, что еще зависит от тех же пакетов, которые использует vimapt-cache rdepends . Мы должны видеть Vim среди (возможно) других вещей:

$ apt-cache rdepends vim-common
vim-common
Reverse Depends:
  vim-latexsuite
  vim-addon-manager
  vim-tiny
  vim-nox
  vim-gtk
  vim-gnome
 |vim-dbg
  vim-athena
  vim                               // there it is

Давайте продолжим с установкой. После установки vim мы можем почувствовать разницу между удалением и автоматическим удалением . Давайте попробуем удалить сначала:

$ sudo apt-get remove vim
...
The following packages will be REMOVED:
  vim
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 1,922 kB disk space will be freed.
Do you want to continue [Y/n]? n

apt-get removeзатем удалил бы vim, но не его зависимости, оставив их позади . Давайте теперь попробуем удалить одну из зависимостей vim :

$ sudo apt-get remove vim-runtime
...
The following packages will be REMOVED:
  vim vim-runtime
0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
After this operation, 24.8 MB disk space will be freed.
Do you want to continue [Y/n]? n

Это удалит зависимость vim-runtime, а также пакет, который от нее зависит , а именно vim . Из любопытства посмотрим, что произойдет, если мы удалим зависимость, которая ниже в дереве зависимостей vim :

$ sudo apt-get remove libgpm2
...
The following packages were automatically installed and are no longer required:
  libgtkglext1 libqtassistantclient4 libtiff-tools libtiff5 python-qt4
  python-sip python-sqlalchemy python-sqlalchemy-ext
Use 'apt-get autoremove' to remove them.
The following packages will be REMOVED:
  anki cheese gimp gimp-gmic gimp-plugin-registry gnome-control-center      // !
  gnome-media gnome-video-effects gstreamer0.10-plugins-good libaa1         // !
  libcheese-gtk21 libcheese3 libgpm2 mplayer quodlibet vim vlc w3m          // !
0 upgraded, 0 newly installed, 18 to remove and 0 not upgraded.
After this operation, 63.1 MB disk space will be freed.
Do you want to continue [Y/n]? n

Это уберет vim и много вкусностей!

Давайте продолжим с этим apt-get remove vim. Как только мы это сделаем, у нас должны быть остатки. Если мы сейчас попробуем автоудаление, то увидим:

$ sudo apt-get autoremove
...
The following packages will be REMOVED:
  vim-common vim-runtime
0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
After this operation, 23.2 MB disk space will be freed.
Do you want to continue [Y/n]? y

Эти два пакета apt-get removeостались позади, хотя они больше никому не нужны.

Экспериментировал с apt-get 0.9.7.9.

Джонни Балони
источник
4

В соответствии с этим: http://ubuntuforums.org/showthread.php?t=996053 autoremove удалит все пакеты, которые не нужны другим программам. Вы должны сделать «apt-get autoremove», а не «apt-get autoremove libreoffice». Кроме того, удаление ненужных пакетов не только освобождает немного места на диске, но и уменьшает «поверхность атаки» вашей системы.

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

removeудалит указанную программу, тогда как autoremoveвключит зависимости, иначе больше не будет использоваться.

Кроме того, если вы хотите освободить место на диске, полезная и безопасная команда ...

sudo apt-get clean

Это удаляет кэш aptitude в / var / cache / apt / archives

kobaltz
источник
Извините за то, что я такой n00b, но я не совсем понимаю это. Поэтому, если я apt-get remove libreofficeвыполню команду , я понимаю, что она просто удалит libreoffice. Это правильно? Однако, если я apt-get autoremove libreofficeвыполню команду , это не только удалит libreoffice, но и его зависимости?
PeanutsMonkey
Правильно. Итак, скажем, что я устанавливаю neverballи neverballзависит от пакета под названием libisfun. Если я apt-get remove neverballтогда это удалит только neverballпакет. Если я, apt-get autoremove neverballто он будет удален, neverballи libisfunесли libisfunне зависит от любого другого приложения.
Кобальц