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


29

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

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

为什么?


2
本质上,如果需要安装参数中提到的软件包以外的软件包,它将询问。
muru

Answers:


24

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


我以同样的动机..但我想确保答案的
正确性

是的,这个答案是正确的。我还要补充一点:-y如果您不想被提示,则可以使用该标志(如果您要使某些东西自动化)。
Umang

@Umang:谢谢你的提示,但是我现在不需要自动化任何东西,只是出于好奇;)
Strae 2010年

12

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开关不仅会阻止实际安装,还会显示已下载和已安装的大小以及有关软件包的其他信息(网址和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 

脚本仍在开发中!计划的功能:它应该询问您是否要执行安装,然后继续并运行它。也许明天我会想到其他一些好玩的东西。


但是有没有办法让它每次都问你呢?即使更改程序的实际代码。

@Toroidal更改程序代码超出了此处的范围-您可能必须深入研究aptapt-get的联机帮助页以了解如何更改首选项,因为可能已经有可以更改的设置来强制执行。
托马斯·沃德

9

据我了解,apt-get仅在有其他依赖项要安装时才要求确认。默认情况下,没有办法对所有软件包强制进行确认。

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

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

或者,要aptitude提示特定的运行,请使用aptitude -P
伊莱亚·卡根
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.