O apt-get install com '-' (menos / hífen) remove os pacotes

22

Eu estava procurando por algum pacote ( nautilus-terminal) e acidentalmente fiz isso:

$ sudo apt-get install nautilus-
Reading package lists... Done                                                                                                                                                                                                 
Building dependency tree                                                                                                                                                                                                      
Reading state information... Done                                                                                                                                                                                             
The following packages were automatically installed and are no longer required:                                                                                                                                               
  apturl apturl-common libgail-3-0 linux-headers-4.4.0-57 linux-headers-4.4.0-57-generic linux-image-4.4.0-57-generic linux-image-extra-4.4.0-57-generic                                                                      
Use 'sudo apt autoremove' to remove them.                                                                                                                                                                                     
The following packages will be REMOVED:                                                                                                                                                                                       
  gnome-session-flashback nautilus nautilus-sendto nautilus-share ubuntu-desktop                                                                                                                                              
0 upgraded, 0 newly installed, 5 to remove and 69 not upgraded.                                                                                                                                                               
After this operation, 2 031 kB disk space will be freed.                                                                                                                                                                      
Do you want to continue? [Y/n] ^[[^C                                                                                                                                                                                          

Isso é bastante perigoso, porque remover é muito mais difícil de digitar do que um simples traço de uma falha no preenchimento automático.

Isso é equivalente apt-get remove? Não consegui encontrar nenhuma documentação para isso. Edit: exceto para negligenciar a página de manual ...

Ondra Žižka
fonte
1
Por que isso é mais perigoso do que apt-get remove? O Apt-get ainda diz o que vai fazer e pede confirmação.
Marcelm
3
@marcelm, porque removeé muito mais difícil digitar errado do que um simples traço de uma falha no preenchimento automático.
stebu92
@ stebu92 Formulação perfeita, estou adicionando isso se você não se importa.
Ondra Žižka
Eu acho que pelo menos o Y / n deve ser alterado para y / N quando -é usado.
Ondra Žižka
Talvez eu esteja interpretando mal, mas isso parece mais uma queixa / reclamação do que uma pergunta. Qual é a pergunta que você espera obter uma resposta como resultado da postagem?
thomasrutter

Respostas:

28

A partir de man apt-get :

instalar
   A instalação é seguida por um ou mais pacotes desejados para
   instalação ou atualização. Cada pacote é um nome de pacote, não um
   nome completo do arquivo (por exemplo, em um sistema Debian,
   apt-utils seria o argumento fornecido, não
   apt-utils_1.2.10_amd64.deb). Todos os pacotes exigidos pelo
   pacotes especificados para instalação também serão recuperados e
   instalado. O arquivo /etc/apt/sources.list é usado para localizar o
   pacotes desejados. Se um hífen for anexado ao nome do pacote (com
   nenhum espaço intermediário), o pacote identificado será removido se
   está instalado. Da mesma forma, um sinal de mais pode ser usado para designar um
   pacote para instalar. Esses últimos recursos podem ser usados ​​para substituir
   decisões tomadas pelo sistema de resolução de conflitos do apt-get.
muru
fonte
Portanto, o OP deveria estar fazendo: sudo apt install nautilus && sudo apt install nautilus-terminalonde o OP havia passado com o removecomando else: sudo apt install nautilus-terminalse NO foi escolhido?
George Udosen 6/02
3
A lógica desse recurso é que, às vezes, você deseja instalar um pacote que conflita com um que já está instalado, mas um deles é exigido por outro pacote, portanto, ambas as ações precisam estar na mesma execução. Por exemplo apt install sysvinit-core systemd-sysv-(é exigido pelo pacote init do Essential ) ou apt install msmtp postfix-(muitos pacotes dependem de um MTA).
Simon Richter
1
O @SimonRichter que tenta o apt -s install upstart-sysv16.04 indica que aptserá removido automaticamente systemd-sysv(uma vez que conflitam). O mesmo vale para msmtp-mtae postifx. Um exemplo mais complicado pode ser necessário, onde aptpode escolher o pacote errado para remover.
muru
Obrigado por reparar meu olho cego. Observou que apt-get remove foo+instala foo.
Ondra Žižka
Esse é um recurso interessante. : D
Andrea Lazzarotto
0

Os dois seguintes significam o mesmo:

# apt-get remove nautilus
# apt-get install nautilus-

Portanto, se você está apenas instalando ou removendo uma coisa, não há realmente nenhuma razão para escolher uma sobre a outra, e o removecomando também pode ser usado.

Onde o operador "menos" é útil é nos casos em que você deseja remover um pacote e instalar outro na mesma operação :

# apt-get install php5-cgi libapache2-mod-php5- 

Eu não conseguia pensar em um exemplo melhor, mas há algumas situações em que a remoção de uma e a adição de outra em operações separadas podem desencadear instalações ou remoções desnecessárias adicionais, enquanto as duas em uma única operação satisfazem imediatamente algumas co-dependências e fazem com que uma operação geral mais simples.

Quanto a saber se adicionando a menos faz com que seja mais fácil de remover acidentalmente algo involuntariamente, eu em primeiro lugar encaminhá-lo para o quão fácil é criar danos ao seu sistema involuntariamente na linha de comando de qualquer maneira . Ele não foi desenvolvido para proteger você de si mesmo e existem bilhões de comandos ainda mais simples que podem manejar seu sistema. Mas, em segundo lugar, neste caso, ele diz exatamente o que vai fazer e confirma que você realmente deseja fazê-lo. Isso é de baixo risco.

thomasrutter
fonte