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

Str*_*rae 30 package-management apt software-installation

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

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

为什么?

Hel*_*ola 25

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


Byt*_*der 14

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])
Run Code Online (Sandbox Code Playgroud)

这会向您显示会发生什么,但不会像确认提示那样显示下载量有多大。

因此,可以使用另一个开关--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
Run Code Online (Sandbox Code Playgroud)

--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
Run Code Online (Sandbox Code Playgroud)

您会看到输出的第一行是下载大小,第二行描述了安装所需的空间。

由于此命令不易键入且更难记住,请将以下内容复制到脚本文件中,例如名为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: /'
Run Code Online (Sandbox Code Playgroud)

chmod +x apt-install-checker.sh在执行之前不要忘记!

示例输出:

bytecommander@AlkaliMetal:~/bin$ ./apt-install-checker.sh sudoku
Download size: 28.4 kB 
Installed size: 106 kB 
Run Code Online (Sandbox Code Playgroud)

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


kom*_*tes 10

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

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

echo 'Aptitude::CmdLine::Always-Prompt "true";' | sudo tee -a /etc/apt/apt.conf.d/05aptitude
Run Code Online (Sandbox Code Playgroud)