当前位置: 首页>>技术问答>>正文


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

, , ,

问题描述

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

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

为什么?

最佳解决思路

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

次佳解决思路

只有当apt-get install new-package还安装了给定软件包的依赖项时,它才会要求确认。

如果您指定的单个软件包将在没有任何其他内容的情况下安装,则它会保持安静,因为您已经通过键入”confirmed”来获得该软件包。但是如果有一些依赖包,你可能会改变主意并想要停止安装(例如因为其中一个导致了麻烦),所以它会提示你输入y /n。

现在,如果您想了解它将做什么,您可以执行安装命令的dry-run /模拟。您可以通过向参数添加-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 

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

第三种解决思路

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

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

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7067.html,未经允许,请勿转载。