Pourquoi `sudo apt-get install XXXX` demande parfois une confirmation, d'autres non?


29

Juste pour la curiosité, parfois lors de l'installation du logiciel via apt-get install software_namele terminal, je demande une confirmation "tapez Oui ou Non", mais pas toujours.

Je ne veux pas dire l'invite de mot de passe sudo, mais le message "Sera téléchargé et configuré XXX Ko, continuer?" (ou quelque chose de similaire)

Pourquoi?


2
Essentiellement, si des packages autres que ceux mentionnés dans les arguments doivent être installés, il demandera.
muru

Réponses:


24

Il vous demandera généralement s'il existe des packages suggérés ou recommandés qui dépendent du logiciel que vous essayez d'installer, cela peut également dépendre de la taille du programme ou de la sécurité du référentiel à partir duquel vous téléchargez.


je pensais aux mêmes motivations .. mais je veux être sûr de la réponse
Strae

Oui, cette réponse est correcte. J'ajouterai que vous pouvez (utile si vous essayez d'automatiser quelque chose) utiliser l' -yindicateur si vous ne voulez pas être invité.
Umang

@Umang: merci pour l'astuce, mais je n'ai pas besoin d'automatiser quoi que ce soit pour le moment, c'était juste une curiosité;)
Strae

12

apt-get install new-package ne demandera de confirmation que s'il installe également les dépendances du package donné.

Si seul le paquet que vous avez spécifié va être installé sans aucun élément supplémentaire, il reste silencieux car vous avez déjà "confirmé" que vous voulez l'avoir en le tapant.
Mais s'il existe des packages de dépendances, vous pouvez changer d'avis et vouloir arrêter l'installation (par exemple, parce que l'un d'entre eux a causé des problèmes auparavant), il vous invite donc à indiquer le y / n.

Maintenant, si vous voulez voir ce qu'il fera, vous pouvez faire un essai à blanc / simulation de la commande d'installation. Vous définissez ce commutateur en ajoutant un -saux arguments. Exemple: installation du package uniquesudoku

bytecommander@AlkaliMetal:~$ sudo apt-get install sudoku -s
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  sudoku
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst sudoku (1.0.1-5 Ubuntu:14.10/utopic [i386])
Conf sudoku (1.0.1-5 Ubuntu:14.10/utopic [i386])

Cela vous montre ce qui se passera, mais pas la taille des téléchargements, comme le ferait l'invite de confirmation.

Par conséquent, un autre commutateur peut être utilisé --print-uris,. Le même exemple:

bytecommander@AlkaliMetal:~$ sudo apt-get install sudoku --print-uris
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  sudoku
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 28.4 kB of archives.
After this operation, 106 kB of additional disk space will be used.
'http://ftp.uni-stuttgart.de/ubuntu/pool/universe/s/sudoku/sudoku_1.0.1-5_i386.deb' sudoku_1.0.1-5_i386.deb 28426 MD5Sum:ecd0e3cd4fc1e4e4edfe6c59d1c54847

Le --print-uriscommutateur bloquera non seulement l'installation réelle, mais affichera les tailles téléchargées et installées et des informations supplémentaires sur le package (adresse Web et MD5Sum).
Attention: ne pas utiliser --print-uris et -s ensemble. Cela ressemblera -sseulement.
Notez également que vous devez ajouter le -ycommutateur (= supposez oui à chaque question) si vous souhaitez traiter la sortie, car celle-ci vous demandera une confirmation en suivant les mêmes règles que l'installation normale sans commutateurs.


Maintenant, si vous souhaitez filtrer les informations de téléchargement et de taille de fichier installé uniquement sans avoir à lire toutes les autres choses, vous pouvez utiliser la commande suivante pour y parvenir (merci à @terdon pour vous aider). Encore une fois avec l'exemple sudoku:

bytecommander@AlkaliMetal:~$ LANG=C sudo apt-get -y --print-uris install sudoku | grep -Po '^(Need to|After this).*?\K[0-9.]+[ a-zA-Z]+? '
28.4 kB
106 kB

Vous voyez que la première ligne de la sortie est la taille du téléchargement et la deuxième ligne décrit l'espace nécessaire pour l'installation.

Parce que cette commande n'est pas facile à taper et encore plus difficile à retenir, copiez ce qui suit dans un fichier de script appelé par exemple apt-get-install-checker.sh:

#! /bin/bash

LANG=C sudo apt-get install -y --print-uris $* |
grep -Po '^(Need to|After this).*?\K[0-9.]+[ a-zA-Z]+? ' |
sed '1,1s/^/Download size: /;2,2s/^/Installed size: /'

N'oubliez pas de l' chmod +x apt-install-checker.shexécuter!

Exemple de sortie:

bytecommander@AlkaliMetal:~/bin$ ./apt-install-checker.sh sudoku
Download size: 28.4 kB 
Installed size: 106 kB 

Script encore en développement! Fonctionnalités prévues: Il devrait vous demander si vous souhaitez effectuer l'installation, puis continuer et l'exécuter. Peut-être d'autres gadgets sympa qui me viennent à l'esprit demain ...


Mais existe-t-il un moyen de le faire vous demander à chaque fois? Même en changeant le code réel du programme.

@Toroidal changer le code du programme est un peu en dehors de la portée ici - vous pourriez avoir à creuser dans aptou apt-getpour savoir comment modifier les préférences, car il est possible , il y a déjà un cadre de pages de manuel de » vous pouvez changer pour le forcer.
Thomas Ward

9

D'après ce que je comprends, apt-get ne demande de confirmation que lorsqu'il y a des dépendances supplémentaires à installer. Il n'y a aucun moyen de forcer la confirmation par défaut pour tous les packages.

Cependant, il est possible de forcer la confirmation sur n'importe quelle commande d'installation lors de l'utilisation d'aptitude.

echo 'Aptitude::CmdLine::Always-Prompt "true";' | sudo tee -a /etc/apt/apt.conf.d/05aptitude

Ou, pour obtenir aptitudeune invite sur une exécution spécifique, utilisez aptitude -P.
Eliah Kagan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.