为什么 `sudo apt-get install XXXX` 有时候要求确认,有时候则不需要?

为什么 `sudo apt-get install XXXX` 有时候要求确认,有时候则不需要?

只是出于好奇,有时通过apt-get install software_name终端安装软件时会提示我确认“输入是或否”,但并非总是如此。

我不是指 sudo 密码提示,而是消息“将下载并配置 XXX Kb,继续吗?”(或类似的东西)

为什么?

答案1

它通常会询问您是否有取决于您尝试安装的软件的建议或推荐的软件包,它也可能取决于程序的大小或您正在下载的存储库的安全性。

答案2

apt-get install new-package仅当它也安装了给定包的依赖项时才会要求确认。

如果只安装您指定的单个包而不安装任何其他东西,则不会有任何反应,因为您已经通过键入“确认”要安装该包。
但如果有一些依赖包,您可能会改变主意并想要停止安装(例如,因为其中一个包之前造成了麻烦),因此它会提示您输入 y/n。

现在,如果您想看看它会做什么,您可以对安装命令进行试运行/模拟。您可以通过将一个添加到-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 

脚本仍在开发中!计划的功能:它会询问您是否要执行安装,然后继续并运行它。也许明天我会想到一些其他不错的小工具……

答案3

据我所知,apt-get 仅在需要安装其他依赖项时才会要求确认。无法默认强制所有软件包确认。

但是,使用 aptitude 时可以强制确认任何安装命令。

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

相关内容