Questão Qual é a maneira correta de remover completamente um aplicativo?


Eu procurei na rede por essas informações e encontrei diferentes linhas de comando, como estas:

sudo apt-get remove application
sudo apt-get remove application*

sudo apt-get remove --purge application
sudo apt-get remove --purge application*

sudo apt-get purge application
sudo apt-get purge application*

Então, qual é o caminho correto? É necessário usar esse "*"?

Depois disso, também encontrei estes comandos:

sudo updatedb
sudo locate application
sudo rm -rf (file/folder name)

478
2017-09-14 21:54


origem


Algumas de suas perguntas podem ser respondidas nesta postagem: askubuntu.com/questions/1143/how-can-i-uninstall-software - Glutanimate
application* pode ocasionalmente dar resultados inesperados - por exemplo, se você tiver um arquivo no diretório atual application_information, o shell iria expandi-lo antes de ser passado para o apt-get. Se isso está acontecendo e você quer o asterisco literal, você pode usar application\* ou 'application*' - Izkata
application* é ainda mais perigoso quando não há arquivos no diretório atual: apt-get usa expressões regulares, sem padrões glob. As pessoas quase apagaram todo o sistema tentando remover wine*. - Andrea Corbellini
Você pode aceitar uma resposta? Para ser grato a pessoas que lhe responderam. - m-ric
Nem application* nem application\* é seguro! Citando * com \ ou '  ' só aumenta o risco, garantindo * é passado como é para apt-get (embora geralmente seja assim mesmo!), causa apt-get interpretar o argumento como regex. Em um regex * significa "zero ou mais do caractere precedente". Uma forma comum do erro é desinstalar wine*, removendo todos os pacotes com win (não wine, win) qualquer lugar em seus nomes e todos os pacotes, dependendo de qualquer um deles. Vejo esta explicação e possíveis correções. @Izkata - Eliah Kagan


Respostas:


  • apt-get remove packagename

    irá remover os binários, mas não os arquivos de configuração ou dados do pacote packagename. Ele também deixará dependências instaladas com ele no tempo de instalação intocado.

  • apt-get purge packagename ou apt-get remove --purge packagename

    irá remover cerca de tudo em relação ao pacote packagename, mas não as dependências instaladas com ele na instalação. Ambos os comandos são equivalentes.

    Particularmente útil quando você quer 'começar tudo de novo' com um aplicativo porque você bagunçou a configuração. No entanto, ele não remove arquivos de configuração ou de dados que residem nos diretórios iniciais dos usuários, geralmente em pastas ocultas. Não há uma maneira fácil de removê-los também.

  • apt-get autoremove

    remove pacotes órfãos, ou seja, pacotes instalados que costumavam ser instalados como uma dependência, mas não são mais. Use isso depois de remover um pacote que tinha dependências instaladas nas quais você não está mais interessado.

  • aptitude remove packagename ou aptitude purge packagename (Da mesma forma)

    também tentará remover outros pacotes que foram requeridos por packagename mas não são exigidos por nenhum pacote restante. Observe que aptitude apenas lembra informações de dependência para pacotes que foram instalados.

E muitos mais existem. Nível mais baixo dpkg-comandos podem ser usados ​​(avançados), ou ferramentas GUI como Muon, Synaptic, Software Center, etc. Não existe uma única 'maneira correta' de remover aplicativos ou executar outras tarefas interagindo com o gerenciamento de pacotes.

A lista que você encontrou é apenas um exemplo. Certifique-se de entender os significados e tente o que ele quer fazer antes de aceitar a ação (você precisa pressionar Y antes de realmente executar as ações conforme proposto).

A versão do asterisco na questão é provavelmente errado; apt-get aceita uma expressão regular e não um padrão glob como o shell. Então, o que acontece com

sudo apt-get remove application*

é o seguinte:

  1. O shell tenta expandir application* olhando os arquivos no diretório atual. Se (como é normalmente o caso) não encontrar nada, ele retorna o padrão glob inalterado (supondo bash com comportamento padrão aqui --- zsh vai errar).

  2. apt-get irá remover os pacotes cujo nome contém uma string que satisfaz a expressão regular application*, isso é, applicatio seguido por um número arbitrário de n: applicatio, application, applicationn, libapplicatioetc.

  3. Para ver como isso pode ser perigoso, tente (sem raiz para dupla segurança) apt-get -s remove "wine*" (-s vai simular a coisa em vez de fazê-lo) --- vai dizer que vai remover todos os pacotes que tem "win" em seu nome e o dependente, quase todo o sistema ...

Provavelmente, o comando que foi feito é realmente

 sudo apt-get remove "^application.*"

(observe as aspas e o ponto), que removerá todos os pacotes cujo nome começa com application.

Esses comandos,

sudo updatedb                  # <-- updates the locate database (index). harmless
sudo locate application        # <-- locates the file 'application'. harmless
sudo rm -rf (file/folder name) # <-- removes files/dirs recursively. dangerous.

estão completamente fora do escopo do gerenciamento de pacotes. Não remova arquivos pertencentes a pacotes sem usar o gerenciador de pacotes! Vai ficar confuso e é o errado maneira de fazer as coisas.

Se você não sabe a qual pacote um arquivo pertence, tente isto:

dpkg -S /path/to/file

638
2017-09-14 22:04



A opção --purge também é útil ao tentar remover completamente todas as dependências restantes, incluindo seus arquivos de configuração: apt-get-autoremove --purge  Também é importante observar que os arquivos de configuração em seu diretório pessoal não são afetados pela opção --purge. Estes você terá que remover manualmente. - Glutanimate
Houve um erro aqui: o apt-get aceita RE, não globs; então o apt-get remove pack * irá remover todos os pacotes que iniciam com pac seguidos por zero ou mais k ... o que é normalmente inesperado. Eu editei o anser. Veja também askubuntu.com/questions/210976/… - Rmano
Eu acho que essa resposta não é mais precisa. Ou apt remove -s texlive* ou a sua apt-get linhas de retorno de contrapartida como Note, selecting 'texlive-font-utils' for glob 'texlive*' (implicando que eles realmente aceitam globs), seguido pelo habitual Package 'texlive-common' is not installed, so not removed, e finalmente Remv linhas, como Remv texlive-font-utils [2015.20160320-1] [...]. - Jonathan Y.
@JonathanY. Você também selecionaria pacotes não instalados. De qualquer forma, você poderia, por favor, fazer uma NOVA pergunta e elaborar um pouco mais detalhadamente qual é a sua situação na questão. Eu ficaria feliz em olhar para isso :) - gertvdijk
Eu não estou fazendo uma nova pergunta. Eu estou apontando para uma possível mudança desde que esta resposta foi feita que faz alguns dos detalhes incorretos. A saber, parece que apt-get remove packa* realmente leva o glob packa* em vez de olhar para ele como regex: corresponde package mas não pack. - Jonathan Y.


Para o Ubuntu 12.04 e talvez superior, o método correto é:

sudo apt-get --purge autoremove packagename

Como detalhado Aqui.

Não use packagename* como isso pode excluir pacotes não intencionais e causar mais problemas do que resolve. Ou se você deve, pelo menos, executá-lo com um -s, --simulate, --dry-run marque primeiro para ver exatamente o que fará sem fazê-lo.


92
2017-11-20 20:01



esta é a resposta correta, curta e concisa: - Anwar


Você pode usar este comando:

sudo apt-get purge --auto-remove packagename

Ele irá limpar os pacotes necessários junto com as dependências instaladas com esses pacotes. o --auto-remove opção (sendo um alias de autoremove) funciona semelhante a sudo apt-get autoremove. Usando este comando, podemos executar um único comando:

sudo apt-get purge --auto-remove packagename

Ao invés de:

sudo apt-get purge packagename
sudo apt-get autoremove

17
2017-09-16 20:08



Embora você esteja correto, mas também pode usar sudo apt-get --purge autoremove packagename. O mesmo comando aqui - Anwar
O comando completo também pode ser escrito como apt-get autoremove --purge ao invés de apt-get purge --auto-remove ? - felwithe
Alguém pode por favor atirar em mim? - Martin Andersson


Você pode usar com segurança sudo apt-get remove --purge application ou sudo apt-get remove applications 99% do tempo. Quando você usa o purge flag, ele simplesmente remove todos os arquivos de configuração também. Que pode ou não ser o que você quer, dependendo se você deseja reinstalar o aplicativo. o application* irá corresponder a todas as aplicações que começam com application, que geralmente são plugins, recursos adicionais, etc do aplicativo principal que você está removendo. isto é

sudo apt-get remove gedit*

removeria gedit, gedit-plugins e gedit-common. Normalmente, não é necessário fazer isso, porque a maioria dos plug-ins / programas associados depende do aplicativo principal e será removida automaticamente (ou marcada para remoção) quando você desinstalar o aplicativo principal.

Seu último comando é apenas para remover sobras de aplicativos que são conhecidos por terem desinstaladores desarrumados, e é apenas remover todos os restos do aplicativo.


7
2017-09-14 22:05





Eu recebi algumas mensagens de erro removendo um pacote, a única maneira que encontrei que funcionou foi esta:

mv /var/lib/dpkg/info/package.* /tmp/
dpkg --remove --force-remove-reinstreq package

Eu achei que, embora usando apenas

dpkg --remove --force-remove-reinstreq package

não remove o pacote mostra-me o caminho correto para o arquivo para mover com:

mv /var/lib/dpkg/info/package.* /tmp/

Substitua o pacote pelo nome do seu aplicativo. Use o sudo no Ubuntu, torne-se root no Debian.


5
2018-02-26 09:26





Eu encontrei este comando na internet.

dpkg --purge --force-depends application

http://www.debian-administration.org/article/Reinstalling_packages_to_fix_problems.


3
2017-09-14 22:10





Depende do aplicativo que você deseja remover. Certifique-se sempre de verificar suas dependências antes de emitir o comando yes. Quando você remove algo por linha de comando, algumas vezes ele mostra um punhado de bibliotecas que não são mais necessárias. Estes podem ser removidos com o apt-get autoremove.

Cuidado com isso usando comandos como sudo apt-get remove - limpar applicationname pode remover algumas dependências que são necessárias para outros aplicativos e, como tal, pode quebrar seu sistema.

Se você quiser fazê-lo da maneira mais segura, você pode sempre removê-lo usando apenas o centro de software ou o apt-get remove applicationname. Se as dependências não forem mais necessárias, execute o apt-get autoremove mais tarde.


1
2017-09-14 22:10



Eu acho que todo o sistema de pacotes Debian foi projetado especificamente para não remova um pacote se houver outros pacotes dependentes dele. Você pode ser (útil) perguntado se você deseja remover todos os pacotes dependentes também, e é aí que você deve realmente ler a lista do pacote prestes a ser removido, que é eu acho que o que você está tentando dizer. - Xen2050


Eu só queria esclarecer uma coisa que parece ser uma fonte de confusão aqui. o dpkgutilitário não sabe sobre ou rastrear dependências de pacotes em relação ao outro, o que foi uma grande razão que apt foi desenvolvido eu acredito. Você pode ler sobre isso na seção 8.6 desta página. A FAQ (perguntas freqüentes) do Debian GNU / Linux - As ferramentas de gerenciamento de pacotes Debian

  • Com apt: Se eu quisesse purgar o pacote A, e ele tem uma dependência chamado pacote B, e o pacote B não tinha outros pacotes dependentes, então pacote A e B serão limpos. Se o pacote B DID tiver outros dependentes pacotes, então apenas o pacote A será removido.

  • Com o dpkg: qual dependência? Você acabou de me dizer para limpar o maldito
    pacote e é isso que eu fiz! O planejamento inadequado da sua parte não
    constituir uma emergência da minha parte.

Com isto dito, aqui estão dois one-liners que podem ser usados ​​para cada método de limpeza:

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --dry-run --purge

apt-get autoremove -y; apt-get --dry-run purge -y $(dpkg --list |grep '^rc' |awk '{print $2}')

Remova o --dry-run para executar a operação de limpeza real em vez de relatar quais ações ela teria tomado.


1
2017-08-23 23:32