如何减少apt-get安装的噪音?


128

如果使用apt-get install -qq mono-devel,根据帮助,我希望它会保持安静,除了错误:

-qq No output except for errors

相反,我得到:

Extracting templates from packages: 100%
Selecting previously unselected package binfmt-support.
(Reading database ... 84711 files and directories currently installed.)
Unpacking binfmt-support (from .../binfmt-support_2.0.8_i386.deb) ...
Selecting previously unselected package cli-common.
Unpacking cli-common (from .../cli-common_0.8.2_all.deb) ...
Selecting previously unselected package libgdiplus.
Unpacking libgdiplus (from .../libgdiplus_2.10-3_i386.deb) ...
Selecting previously unselected package libmono-2.0-1.
Unpacking libmono-2.0-1 (from .../libmono-2.0-1_2.10.8.1-1ubuntu2.2_i386.deb) ...
Selecting previously unselected package libmono-2.0-dev.
Unpacking libmono-2.0-dev (from .../libmono-2.0-dev_2.10.8.1-1ubuntu2.2_i386.deb) ...
Selecting previously unselected package libmono-corlib4.0-cil.
Unpacking libmono-corlib4.0-cil (from .../libmono-corlib4.0-cil_2.10.8.1-1ubuntu2.2_all.deb) ...
Selecting previously unselected package libmono-system-xml4.0-cil.
Unpacking libmono-system-xml4.0-cil (from .../libmono-system-xml4.

还有更多 ...

实际上,有几百行的价值。这似乎与不符no output except for errors

实际上apt-get install只有在出现无法安装的错误时,如何打印?


您是否尝试过使用-q =#,其中#是安静级别?(在手册中。)您可能要针对此提出错误报告。
Paddy Landau

@PaddyLandau我确实做到了。我不知道为什么要谈论选择以前未选择的软件包,或者为什么这很重要,而且我不确定它是否与vm的状态有关,我正在travis-ci上对它们进行运行。但是答案很好。
jbtule

“选择先前未选择的程序包”仅表示程序包管理器包括满足依赖关系所需的程序包。如我先前所写,您可能想提出一个错误报告,说明该--quiet选项似乎无法正常工作。
帕迪·兰道

我很不高兴地报告说,同一症状在Ubuntu 15.04 20150709.
劳埃德Dewolf

看起来这与2009年dpkg问题报告有关:bugs.debian.org/cgi-bin/bugreport.cgi?bug=539617
劳埃德·德沃尔夫

Answers:


83

apt-get的手册页如下:

NAME
       apt-get - APT package handling utility -- command-line interface

SYNOPSIS
       apt-get [-asqdyfmubV] [-o=config_string] [-c=config_file] [-t=target_release]
               [-a=architecture] {update | upgrade | dselect-upgrade | dist-upgrade |
               install pkg [{=pkg_version_number | /target_release}]...  | remove pkg...  |
               purge pkg...  | source pkg [{=pkg_version_number | /target_release}]...  |
               build-dep pkg [{=pkg_version_number | /target_release}]...  |
               download pkg [{=pkg_version_number | /target_release}]...  | check | clean |
               autoclean | autoremove | {-v | --version} | {-h | --help}}

-q-qq标志应该去之前的命令,就像这样:

apt-get -qq upgrade


3
这是正确的答案!任何实际的实现都需要保留提示。正确使用,-q绝对有效(无“动画”输出)以及-qq(除错误外无输出)。请投票!
查尼·凯

27
不,它不起作用。即使使用-qqinstall命令之前,从读取数据库到解压缩和设置消息,我仍然会遇到很多麻烦。
CrazyCasta '16

2
嗯,我已经试过sudo apt-get -qq -y install mercurialsudo apt-get install -qq -y mercurialsudo apt-get -qq install -qq -y mercurial和涉及其他变化更Q的(虽然我不认为这意味着这将工作的任何文档。我跑在谷歌云Debian的杰西BTW(8)。我也试过戈茨的答案,这似乎也没有用。似乎没有用,我的意思是我没注意到有什么不同
CrazyCasta

3
这是Ubuntu 16.04.1,作为Docker容器运行。我的猜测是消息实际上来自dpkg,由调用apt-get。命令是apt-get -qq update && apt-get -qq upgrade && apt-get -qq install build-essential。见gist.github.com/stefanlasiewski/...
斯特凡Lasiewski

3
在Docker中,您有2种选择:(1)单独运行每个命令,而不是将&&它们连接在一起(可能会起作用,但这不是“ docker方式”)(2)像其他答案一样,将输出重定向到/ dev / null。如果存在此错误,选项2可能是您最好的选择。
迈克,

54

一个简单的重定向可以做到这一点。我敢肯定,这与您的想法并不完全相同,但是可以肯定的是,它确实可行:)

简而言之,只要敲击> /dev/null要重定向所有内容的命令末尾即可stdout。输出的内容stderr仍将显示在控制台中。

$ sudo apt-get update > /dev/null
[sudo] password for oli: 
$ 

没有垃圾!如果我们愚蠢地打破了某些东西,就会发生以下情况:

$ apt-get cheese > /dev/null
E: Invalid operation cheese
$

7
如果您得到提示,
那就

1
如果这是脚本的一部分,则不会sudo在前面放置apt-get。您只需要sudo在运行脚本时就可以。
Xion

3
@Oli如果您绝对确定不会使系统着火,则可以始终这样做sudo apt-get upgrade -qq --force-yes > /dev/null。就像WulfHart所说的那样,它-qq隐含着一切。-y--force-yes
JamesTheAwesomeDude 2013年

2
@Vorac不,它只是重定向stdout(看到错误是IMO所希望的)。
奥利(Oli)

3
这不是问题的答案;这是一种解决方法。
查尼·凯

42

我们面临着同样的问题。apt-get install -qq删除了大多数输出​​,但是令人讨厌的“(Reading database ...”仍然存在。

我们查看了apt的来源,发现输出是由apt派生的dpkg产生的。然后dpkg的源表明只有当isatty(1)为true时才发出烦人的soutput。仅当前叉使用pty代替管道时才如此。回到apt,有一个未记录的配置变量,允许使用管道代替pty来解决问题:

apt-get install -qq -o=Dpkg::Use-Pty=0 <packages>

期望可以帮助别人。


2
实际上,这是完全正确的答案。它还允许使用-q运行apt-get并看到一些输出,而不会看到烦人的“读取数据库”
valodzka

1
我正在gcloud debian jessie(8)上尝试此操作,但仍然可以读取数据库行并解包/设置行。
CrazyCasta

3
此答案不适用于Ubuntu 18.04。
Amedee Van Gasse

1
仍然有很多选择/准备/设置生产线……
hayd

1
-o=Dpkg::Use-Pty=0在Ubuntu 18.04的工作完美。它仅显示一个“读取数据库”,而不是多个,每5%更新一次进度。
Wisbucky

2

正如您在此处此处所看到的,
您可以执行以下操作:

export DEBIAN_FRONTEND=noninteractive
apt-get -yq install [packagename]
export DEBIAN_FRONTEND=dialog

或一行:

DEBIAN_FRONTEND=noninteractive apt-get -yq install [packagename]
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.