Warum fordern "sudo apt-get install XXXX" manchmal eine Bestätigung an, andere nicht?

29

Nur aus Neugier, manchmal während der Installation von Software über apt-get install software_namedas Terminal fordern Sie mich zur Bestätigung auf "Geben Sie Ja oder Nein", aber nicht immer.

Ich meine nicht die Aufforderung zur Eingabe des Sudo-Passworts, aber die Meldung "Wird heruntergeladen und konfiguriert XXX Kb, fahren Sie fort?" (oder etwas ähnliches)

Warum?

Strae
quelle
2
Wenn andere als die in den Argumenten genannten Pakete installiert werden müssen, werden Sie grundsätzlich gefragt.
muru

Antworten:

24

In der Regel werden Sie gefragt, ob es vorgeschlagene oder empfohlene Pakete gibt, die von der zu installierenden Software abhängen. Dies kann auch von der Größe des Programms oder der Sicherheit des Repositorys abhängen, von dem Sie herunterladen.

Hellola
quelle
Ich dachte, die gleichen
Motive
Ja, diese Antwort ist richtig. Ich werde hinzufügen, dass Sie (nützlich, wenn Sie versuchen, etwas zu automatisieren) das -yFlag verwenden können, wenn Sie nicht aufgefordert werden möchten.
Umang
@Umang: Danke für den Hinweis, aber ich brauche im Moment nichts zu automatisieren, war nur eine Kuriosität;)
Strae
12

apt-get install new-package bittet nur um Bestätigung, wenn auch Abhängigkeiten des angegebenen Pakets installiert werden.

Wenn nur das von Ihnen angegebene einzelne Paket ohne zusätzliches Material installiert wird, bleibt es still, da Sie bereits "bestätigt" haben, dass Sie dieses Paket haben möchten, indem Sie es eingeben.
Wenn es jedoch einige Abhängigkeitspakete gibt, können Sie Ihre Meinung ändern und die Installation stoppen (z. B. weil einer von ihnen zuvor Probleme verursacht hat), sodass Sie zur Eingabe des j / n aufgefordert werden.

Wenn Sie nun sehen möchten, was es tun wird, können Sie den Installationsbefehl im Probelauf simulieren. Sie setzen diesen Schalter, indem Sie -sden Argumenten ein hinzufügen . Beispiel: Installation des Einzelpaketssudoku

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])

Das zeigt Ihnen, was passieren wird, aber nicht, wie groß die Downloads sein werden, wie es die Bestätigungsaufforderung tun würde.

Daher kann ein anderer Schalter verwendet werden --print-uris. Das gleiche Beispiel:

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

Der --print-urisSwitch blockiert nicht nur die eigentliche Installation, sondern zeigt auch die heruntergeladenen und installierten Größen sowie zusätzliche Informationen zum Paket (Webadresse und MD5Sum) an.
Achtung: Verwenden Sie nicht --print-uris und -s zusammen. Es wird -snur so aussehen .
Beachten Sie auch, dass Sie den -ySchalter hinzufügen sollten (= für jede Frage ein Ja annehmen), wenn Sie die Ausgabe verarbeiten möchten, da dieser Sie zur Bestätigung auffordert, indem Sie dieselben Regeln wie bei der normalen Installation ohne Schalter befolgen.


Wenn Sie jetzt nur die Informationen zum Download und zur installierten Dateigröße herausfiltern möchten, ohne alle anderen Dinge durchlesen zu müssen, können Sie den folgenden Befehl verwenden, um dies zu erreichen (danke an @terdon für die Unterstützung). Wieder mit dem Beispiel 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

Sie sehen, dass die erste Zeile der Ausgabe die Downloadgröße und die zweite Zeile den für die Installation benötigten Speicherplatz beschreibt.

Da dieser Befehl ist nicht leicht zu geben und noch schwerer zu erinnern, kopieren Sie die folgende in eine Skriptdatei zB genannt 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: /'

Vergessen Sie nicht, chmod +x apt-install-checker.shbevor Sie es ausführen!

Beispielausgabe:

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

Skript noch in der Entwicklung! Geplante Funktionen: Sie sollten gefragt werden, ob Sie die Installation ausführen und dann fortfahren und ausführen möchten. Vielleicht kommen mir morgen noch ein paar andere nette Gadgets in den Sinn ...

Byte Commander
quelle
Aber gibt es eine Möglichkeit, Sie jedes Mal danach zu fragen? Auch durch Ändern des eigentlichen Programmcodes.
@Toroidal Das Ändern des Programmcodes liegt hier etwas außerhalb des Bereichs. Möglicherweise müssen Sie in den Manpages von aptoder apt-getnachsehen, um herauszufinden, wie Sie die Einstellungen ändern können. Möglicherweise gibt es bereits eine Einstellung, die Sie ändern können, um sie zu erzwingen.
Thomas Ward
9

Soweit ich weiß, bittet apt-get nur dann um Bestätigung, wenn zusätzliche Abhängigkeiten zu installieren sind. Es gibt keine Möglichkeit, die Bestätigung standardmäßig für alle Pakete zu erzwingen.

Es ist jedoch möglich, bei Verwendung von aptitude eine Bestätigung für jeden Installationsbefehl zu erzwingen.

echo 'Aptitude::CmdLine::Always-Prompt "true";' | sudo tee -a /etc/apt/apt.conf.d/05aptitude
komputes
quelle
Oder verwenden Sie, um aptitudezu einem bestimmten Lauf aufzufordern aptitude -P.
Eliah Kagan,