Quando você usaria o apt-get remove sobre o apt-get autoremove?

16

Entendo que apt-get removeremova pacotes e apt-get autoremoveé para remover todos os pacotes que foram instalados para cumprir uma dependência de um determinado pacote. Por exemplo, se eu instalei o LibreOffice e ele dependia do Java e o instalei como parte da instalação quando executo o comando apt-get libreoffice, por que executaria o comando apt-get remove libreofficeseguido por apt-get autoremove? Não sou capaz de simplesmente executar o comando apt-get autoremove libreoffice? Ou é a combinação de apt-get removee apt-get autoremovepara um propósito diferente?

AmendoimMacaco
fonte

Respostas:

11

Depende de quanto você confia no rastreador de dependência. Embora quase sempre esteja correto, há momentos em que você deseja que uma dependência permaneça, principalmente quando você é um desenvolvedor ou usuário avançado que instala software que não está no repositório.

Se você sempre instala o software por meio do apt-get, sem exceção, e confia que todas as dependências estejam corretas (o que geralmente são), poderá usar apt-get autoremovee ganhar uma pequena quantidade de espaço em disco e uma exposição reduzida a possíveis falhas de segurança. remove pacotes que não possuem mais pacotes que precisam deles.

Porém, se você instalar o software manualmente, ou desenvolver um software, ou não quiser lidar com um possível erro de dependência, não usar a remoção automática para limpar pacotes potencialmente não utilizados é provavelmente a opção mais segura. Independentemente de você usar de apt-get autoremovevez em quando ou não, você sempre removerá o software usandoapt-get remove Package

Por exemplo, se eu instalar AwesomePackage, pode depender AwesomeLibrarye, assim, AwesomeLibraryserá instalado automaticamente como uma dependência . Quando eu removo AwesomePackageusando o autoremove, enquanto nenhum outro pacote tiver AwesomeLibraryuma dependência, ele também será desinstalado. Mas se SuperPackagetambém exigir AwesomeLibrary, ou se eu tivesse instalado AwesomeLibraryexplicitamente eu mesmo, em vez de entrar automaticamente como uma dependência ( apt-get install AwesomeLibrary), a remoção automática não se livraria dela.

O motivo pelo qual não é o padrão é que o fato AwesomeLibraryde o sistema não ser utilizado é um problema muito menor. Quase nunca causará problemas, e a maioria das dependências não ocupa muito espaço. Há exceções, mas os horários em que a remoção de uma dependência causa problemas superam os horários em que resolverão ou impedirão um problema.

Myrddin Emrys
fonte
Desculpe Myrddin Emrys. Você me perdeu lá. Então deixe-me tentar entender o que você disse. Por exemplo, se eu instalei o libreoffice usando o apt-get, ele instalaria um monte de dependências, supondo que eu ainda não as tivesse instalado. Agora, se eu então decidir se livrar de libreoffice, presumo eu corriaapt-get remove libreoffice
PeanutsMonkey
Se eu quisesse que as dependências instaladas permanecessem, está correto? Se eu quisesse me livrar do libreoffice e de suas dependências associadas, assumindo que não foram usadas por outro programa, presumo que executaria o comando apt-get autoremovelibreoffice? Isso está correto?
PeanutsMonkey
Isso é absolutamente correto @PeanutsMonkey. O Autoremove também removerá outros pacotes dos quais o pacote nomeado dependia, se não forem mais necessários por nada e não foram instalados separadamente de propósito.
Myrddin Emrys
Na verdade, isso não está absolutamente correto; Eu tinha uma sintaxe incorreta na minha resposta (como @cooper apontou). Eu corrigi isso na resposta acima. apt-get autoremoveé um comando separado de apt-get remove Package, peço desculpas pela desinformação inicial.
Myrddin Emrys
Obrigado Myrddin Emrys. Desculpe se estou sendo um n00b. Quando você diz isso There are exceptions, but the times when removing a dependancy will cause problems outnumber the times when it will solve or prevent a problem. O que você quer dizer exatamente?
PeanutsMonkey
12

Você pode encontrar a descrição de remover , autoremove , expurgo , limpo e autoclean , bem como a sintaxe nas manpages para apt-get: man apt-get.

Se você ainda não tiver certeza depois de lê-lo (eu estava), a melhor maneira de esclarecer isso é experimentá-lo.

Abaixo está um exemplo de uma árvore de dependência completa para o vim :

vim-dependency-tree

Você pode obtê-lo com:

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

Você também pode obter uma lista das dependências imediatas usando apt-cache depends(consulte Declarando relacionamentos entre pacotes para obter mais informações):

$ 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

Portanto, parece que o vim depende de vários pacotes, vamos tentar instalá-lo apt-get installe ver o que acontece:

$ 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

Para que o vim funcione, precisamos dos pacotes vim-common e vim-runtime e apt-getcuidaremos dele. Podemos verificar com dpkg -s pkg...(consulte man dpkgpara obter mais informações sobre status):

$ 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

Assim como verificamos do que o vim depende, também podemos verificar quais outras coisas dependem dos mesmos pacotes que o vim usa apt-cache rdepends. Deveríamos ver o vim entre (possivelmente) outras coisas:

$ 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

Vamos continuar com a instalação. Depois de instalar o vim , podemos experimentar a diferença entre remover e remover automaticamente . Vamos tentar remover primeiro:

$ 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 removeremoveria o vim, mas não suas dependências, deixando-os para trás . Vamos agora tentar remover uma das dependências do 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

Isso removeria a dependência vim-runtime , bem como o pacote que depende dele , o vim . Por curiosidade, vamos ver o que aconteceria se removêssemos uma dependência menor na árvore de dependências do 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

Ele removeria o vim e muitos brindes!

Vamos prosseguir com apt-get remove vimisso. Uma vez que tenhamos feito isso, devemos ter algumas sobras. Se agora tentarmos remover automaticamente , podemos ver:

$ 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

Estes são os dois pacotes apt-get removedeixados para trás, apesar de nada mais precisar deles.

Experimentou o apt-get 0.9.7.9.

Johnny Baloney
fonte
4

De acordo com isso: http://ubuntuforums.org/showthread.php?t=996053 autoremove removerá todos os pacotes que outros programas não precisam. Você faria 'apt-get autoremove', não 'apt-get autoremove libreoffice'. A remoção de pacotes desnecessários não apenas libera pouco espaço em disco, como também reduz a 'superfície de ataque' do seu sistema.

conspiritech
fonte
Percebo que as bibliotecas não utilizadas podem ser um vetor de ataque, mas parece ser um problema muito pequeno para mim, em relação à dor significativa da remoção inadequada (que já vi acontecer mais de uma vez). No entanto, obrigado pelas informações sobre o uso ... Na verdade, eu descrevi a remoção automática incorretamente (eu não a uso, então não percebi), obrigado pela correção.
Myrddin Emrys
3

removeexcluirá o programa especificado autoremovee incluirá dependências que, de outra forma, não serão mais usadas.

Além disso, se você deseja liberar espaço na unidade, um comando útil e seguro é ...

sudo apt-get clean

Isso remove o cache do aptitude em / var / cache / apt / archives

kobaltz
fonte
Desculpe por ser um n00b, mas eu não sigo isso. Portanto, se eu executar o comando apt-get remove libreoffice, suponho que ele simplesmente remova o libreoffice. Isso está certo? No entanto, se eu executar o comando apt-get autoremove libreoffice, isso removeria não apenas o libreoffice, mas também suas dependências?
PeanutsMonkey
Está correto. Então, digamos que eu instale neverballe neverballdependa de um pacote chamado libisfun. Se eu apt-get remove neverballentão ele irá remover apenas o neverballpacote. Se eu apt-get autoremove neverballremover, neverballe libisfunse libisfunnão for dependente de nenhum outro aplicativo.
kobaltz