Почему `sudo apt-get install XXXX` иногда запрашивает подтверждение, другие нет?

29

Просто для любопытства, иногда при установке программного обеспечения через apt-get install software_nameтерминал запрашивается подтверждение «введите Да или Нет», но не всегда.

Я не имею в виду приглашение пароля sudo, но сообщение "Будет ли загружено и настроено XXX Kb, продолжить?" (Или что-то подобное)

Зачем?

Strae
источник
2
По сути, если необходимо установить пакеты, отличные от упомянутых в аргументах, он спросит.
Муру

Ответы:

24

Обычно он спрашивает вас, есть ли предлагаемые или рекомендуемые пакеты, которые зависят от программного обеспечения, которое вы пытаетесь установить. Это также может зависеть от размера программы или безопасности репозитория, из которого вы загружаете.

Hellola
источник
я думал, что те же мотивы .. но я хочу быть уверенным в ответе
Strae
Да, этот ответ правильный. Я добавлю, что вы можете (полезно, если вы пытаетесь что-то автоматизировать) использовать -yфлаг, если вы не хотите, чтобы вас приглашали.
Уманг
@Umang: спасибо за подсказку, но мне не нужно ничего автоматизировать на данный момент, это было просто любопытство;)
Strae
12

apt-get install new-package будет запрашивать подтверждение, только если он также устанавливает зависимости данного пакета.

Если будет установлен только один указанный вами пакет без каких-либо дополнительных ресурсов, он будет оставаться тихим, поскольку вы уже «подтвердили», что хотите получить этот пакет, набрав его.
Но если есть какие-то пакеты зависимостей, вы можете передумать и захотеть остановить установку (например, из-за того, что один из них раньше вызывал проблемы), поэтому он запрашивает ввод / вывод.

Теперь, если вы хотите посмотреть, что он будет делать, вы можете выполнить пробный прогон / симуляцию команды установки. Вы устанавливаете этот переключатель, добавляя -sк аргументам. Пример: установка одного пакетаsudoku

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

Это показывает вам, что произойдет, но не то, насколько большими будут загрузки, как в случае подтверждения.

Следовательно, можно использовать другой переключатель --print-uris. Тот же пример:

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

--print-urisВыключатель будет не только блокировать фактический установить, но показать загруженные и установленные размеры и дополнительную информацию о пакете (веб - адрес и md5sum).
Внимание: не используйте --print-uris и -s вместе. Это будет похоже -sтолько на.
Также обратите внимание, что вы должны добавить -yпереключатель (= принять да к каждому вопросу), если вы хотите обработать вывод, потому что этот запрос будет запрашивать подтверждение в соответствии с теми же правилами, что и при обычной установке без переключателей.


Теперь, если вы хотите отфильтровать информацию только о загрузке и установленном размере файла, не читая все остальное, вы можете использовать следующую команду для достижения этой цели (спасибо @terdon за помощь). Опять с примером 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

Вы видите, что первая строка вывода - это размер загрузки, а вторая строка описывает пространство, необходимое для установки.

Поскольку эту команду нелегко набрать и еще труднее запомнить, скопируйте следующую информацию в файл сценария, например, с именем 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: /'

Не забудьте chmod +x apt-install-checker.shперед тем, как выполнить его!

Пример вывода:

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

Скрипт еще в разработке! Запланированные функции: он должен спросить вас, хотите ли вы выполнить установку, а затем продолжить и запустить ее. Может быть, некоторые другие хорошие гаджеты, которые приходят мне в голову завтра ...

Byte Commander
источник
Но есть ли способ заставить его спрашивать вас каждый раз? Даже путем изменения фактического кода программы.
@ Тороидальное изменение кода программы здесь немного выходит за рамки - вам, возможно, придется покопаться в man-страницах aptили apt-getсправочных страницах, чтобы выяснить, как изменить настройки, поскольку возможно, что уже есть настройка, которую вы можете изменить, чтобы заставить ее.
Томас Уорд
9

Из того, что я понимаю, apt-get запрашивает подтверждение только при наличии дополнительных зависимостей для установки. По умолчанию не существует способа принудительного подтверждения для всех пакетов.

Однако при использовании aptitude можно принудительно подтвердить любую команду установки.

echo 'Aptitude::CmdLine::Always-Prompt "true";' | sudo tee -a /etc/apt/apt.conf.d/05aptitude
komputes
источник
Или, чтобы получить aptitudeприглашение на конкретный прогон, используйте aptitude -P.
Элия ​​Каган