l'installation d'apt-get avec '-' (moins / trait d'union) supprime les packages

22

Je cherchais un paquet ( nautilus-terminal), et j'ai accidentellement fait ceci:

$ 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                                                                                                                                                                                          

C'est assez dangereux car la suppression est beaucoup plus difficile à saisir par erreur qu'un simple tiret à partir d'un échec de l'autocomplétion.

Est-ce un équivalent de apt-get remove? Je n'ai trouvé aucune documentation pour cela. Modifier: sauf pour ignorer la page de manuel ...

Ondra Žižka
la source
1
Pourquoi est-ce plus dangereux que ça apt-get remove? Apt-get vous dit même ce que cela va faire et vous demande une confirmation.
marcelm
3
@marcelm, car il removeest beaucoup plus difficile à taper qu'un simple tiret à partir d'une saisie semi-automatique échouée.
stebu92
@ stebu92 Formulation parfaite, j'ajoute que si cela ne vous dérange pas.
Ondra Žižka
Je pense qu'au moins le Y / n devrait être changé en y / N lorsqu'il -est utilisé.
Ondra Žižka
Peut-être que j'interprète mal, mais cela ressemble plus à une plainte / plainte qu'à une question. À quelle question espérez-vous obtenir une réponse après avoir publié ceci?
thomasrutter

Réponses:

28

De man apt-get:

installer
   l'installation est suivie d'un ou plusieurs packages souhaités pour
   installation ou mise à niveau. Chaque package est un nom de package, pas un
   nom de fichier complet (par exemple, dans un système Debian,
   apt-utils serait l'argument fourni, pas
   apt-utils_1.2.10_amd64.deb). Tous les packages requis par le
   les packages spécifiés pour l'installation seront également récupérés et
   installée. Le fichier /etc/apt/sources.list est utilisé pour localiser le
   packages souhaités. Si un tiret est ajouté au nom du package (avec
   pas d'espace intermédiaire), le colis identifié sera supprimé s'il
   est installé. De même, un signe plus peut être utilisé pour désigner un
   package à installer. Ces dernières fonctionnalités peuvent être utilisées pour remplacer
   décisions prises par le système de résolution des conflits d'apt-get.
muru
la source
Par conséquent, OP devrait faire: sudo apt install nautilus && sudo apt install nautilus-terminaloù OP était passé avec la removecommande else: sudo apt install nautilus-terminalsi NON a été choisi?
George Udosen du
3
La raison de cette fonctionnalité est que, parfois, vous souhaitez installer un package en conflit avec celui qui est déjà installé, mais l'un d'eux est requis par un autre package, les deux actions doivent donc être exécutées simultanément. Par exemple apt install sysvinit-core systemd-sysv-(soit est requis par le package d'initialisation essentiel ) ou apt install msmtp postfix-(de nombreux packages dépendent d'un MTA).
Simon Richter
1
@SimonRichter essayant apt -s install upstart-sysvle 16.04 indique qu'il aptsera automatiquement supprimé systemd-sysv(car ils sont en conflit). Idem pour msmtp-mtaet postifx. Un exemple plus compliqué pourrait être nécessaire, où aptpourrait choisir le mauvais paquet à supprimer.
muru
Merci d'avoir fixé mon œil aveugle. A noté que apt-get remove foo+installe foo.
Ondra Žižka
C'est une sorte de fonctionnalité intéressante. : D
Andrea Lazzarotto
0

Les deux suivants signifient la même chose:

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

Donc, si vous installez ou supprimez simplement une chose, il n'y a vraiment aucune raison de choisir l'une plutôt que l'autre, et la removecommande peut également être utilisée.

L'opérateur «moins» est utile dans les cas où vous souhaitez supprimer un package et en installer un autre au cours de la même opération :

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

Je ne pourrais pas penser à un meilleur exemple, mais il y a des situations où la suppression de l'un et l'ajout d'un autre dans des opérations distinctes pourraient déclencher des installations ou des suppressions inutiles supplémentaires, alors que les faire les deux en une seule opération satisfera immédiatement certaines co-dépendances et le rendra une opération globalement plus simple.

Quant à savoir si l'ajout du moins facilite la suppression accidentelle de quelque chose par inadvertance, je vous renvoie d'abord et avant tout à la façon dont il est facile de créer des dommages à votre système par inadvertance sur la ligne de commande de toute façon . Il n'a pas été conçu pour vous protéger de vous-même et il existe des milliards de commandes encore plus simples qui peuvent arroser votre système. Mais deuxièmement, dans ce cas, il vous indique exactement ce qu'il va faire et confirme que vous voulez vraiment le faire. C'est un risque faible.

thomasrutter
la source