为什么`sudo apt-get install XXXX`有时会要求确认,其他人不是?

只是为了好奇,有时在通过apt-get install software_name ,终端提示我确认“输入是或否”,但不是总是如此。

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

为什么?

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

apt-get install new-package只有在安装了给定包的依赖项时才会要求确认。

如果您指定的单个包将在没有任何其他东西的情况下安装,它会保持安静,因为您已经“确认”您希望通过键入它来获得该包。
但是如果有一些依赖包,你可能会改变主意并想要停止安装(例如因为其中一个之前造成了麻烦),所以它会提示你输入y / n。

现在,如果你想看看它会做什么,你可以对install命令进行干运行/模拟。 您可以通过在参数中添加-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开关不仅会阻止实际安装,还会显示下载和安装的大小以及有关软件包的附加信息(Web地址和MD5Sum)。
注意:不要一起使用--print-uris -s 。 它看起来像-s only。
另请注意,如果要处理输出,则应添加-y开关(=对每个问题假设为yes),因为这将按照与没有开关的正常安装相同的规则提示您进行确认。


现在,如果您只想过滤下载和安装文件大小信息而不必阅读所有其他内容,您可以使用以下命令来实现此目的(感谢@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 

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

根据我的理解apt-get仅在需要安装其他依赖项时才要求确认。 默认情况下,无法强制确认所有包。

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

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