Come posso rendere apt-get install meno rumoroso?


128

Se uso apt-get install -qq mono-devel, mi aspetto che sia silenzioso, tranne per gli errori, secondo l'aiuto:

-qq No output except for errors

Invece ottengo:

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.

e altro ancora ...

In effetti, un valore di circa duecento righe di output. Questo non sembra corrispondere a no output except for errors.

Come posso effettivamente apt-get installstampare solo quando ci sono errori che impediscono l'installazione?


Hai provato a usare -q = # dove # è un livello basso? (È nel manuale.) Potresti voler sollevare una segnalazione di bug a questo proposito.
Paddy Landau,

@PaddyLandau l'ho fatto davvero. Non so perché si tratti di selezionare un pacchetto precedentemente non selezionato o perché questo sarebbe importante, e non sono sicuro che sia correlato allo stato del VMS che sto eseguendo su questi su entrambi, travis-ci . Ma la risposta ha funzionato bene.
jbtule,

"Selezione di pacchetti precedentemente non selezionati" significa semplicemente che il gestore pacchetti include un pacchetto necessario per soddisfare le dipendenze. Come ho scritto in precedenza, potresti voler sollevare un bug report --quietsull'opzione che sembra non funzionare correttamente.
Paddy Landau,

Non sono contento di segnalare lo stesso sintomo in Ubuntu 15.04 20150709.
Lloyd Dewolf,

Sembra che ciò si riferisca al rapporto sul rilascio di dpkg del 2009: bugs.debian.org/cgi-bin/bugreport.cgi?bug=539617 .
Lloyd Dewolf,

Risposte:


83

La pagina man di apt-get è la seguente:

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}}

Il flag -qo -qqdovrebbe andare prima del comando, in questo modo:

apt-get -qq upgrade


3
Questa è la risposta corretta! Qualsiasi implementazione pratica deve preservare i suggerimenti. Usato correttamente, -qfunziona assolutamente (nessun output "animato") e -qq(nessun output tranne errori). Per favore, vota!
Charney Kaye,

27
No, non funziona. Anche con -qqprima del comando di installazione ho ancora tonnellate di spazzatura, dalla lettura del database allo spacchettamento e alla configurazione dei messaggi.
CrazyCasta,

2
Beh, ho provato sudo apt-get -qq -y install mercurial, sudo apt-get install -qq -y mercurial, sudo apt-get -qq install -qq -y mercuriale altre variazioni che coinvolgono anche più di (anche se non vedo alcuna documentazione che suggerisce che questo avrebbe funzionato. Io corro Debian Jessie su Google Cloud BTW (8). Ho anche provato q Goetz di e non sembra funzionare neanche. Non sembra funzionare, intendo dire che non noto alcuna differenza
CrazyCasta,

3
Questo è Ubuntu 16.04.1, in esecuzione come contenitore Docker. La mia ipotesi è che i messaggi provengano effettivamente dpkg, che viene chiamato da apt-get. Il comando è apt-get -qq update && apt-get -qq upgrade && apt-get -qq install build-essential. Vedi gist.github.com/stefanlasiewski/…
Stefan Lasiewski l'

3
In Docker hai 2 alternative: (1) esegui ciascun comando separatamente anziché &&unirli (potrebbe funzionare, ma non è il "modo docker") (2) reindirizzare l'output a / dev / null come nell'altra risposta. L'opzione 2 è probabilmente la tua migliore scommessa mentre c'è questo bug.
Mike,

55

Un semplice reindirizzamento potrebbe fare questo. Non è esattamente quello che avevi in ​​mente, ne sono sicuro, ma sicuramente funziona come l'inferno :)

In breve, basta colpire > /dev/nullalla fine di qualsiasi comando in cui si desidera reindirizzare tutto stdoutnel nulla. Le cose emesse stderrverranno comunque visualizzate nella console.

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

Niente spazzatura! Ed ecco cosa succede se siamo sciocchi e rompiamo qualcosa:

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

7
Questo è un po 'un problema se ricevi un messaggio ...
l0b0

1
Se questo fa parte di una sceneggiatura, non lo metti sudodi fronte apt-get. Lo faresti invece sudoquando esegui lo script.
Xion,

3
@Oli Se sei assolutamente sicuro di non far prendere fuoco al tuo sistema, puoi sempre sudo apt-get upgrade -qq --force-yes > /dev/null. -qqimplica -y, come diceva WulfHart, e lo --force-yesfa scavare praticamente in tutto.
JamesTheAwesomeDude,

2
@Vorac No è ​​solo il reindirizzamento stdout(vedere gli errori è una cosa desiderabile IMO).
Oli

3
Questa non è la risposta alla domanda; è una soluzione alternativa.
Charney Kaye,

42

Abbiamo affrontato lo stesso problema. apt-get install -qqrimuove la maggior parte degli output ma il fastidioso "(lettura del database ..." persiste ancora.

Abbiamo dato un'occhiata alla fonte di apt e scoperto che l'output è prodotto da dpkg che è stato biforcato da apt. Quindi la fonte di dpkg mostra che il fastidioso soutput viene emesso solo quando isatty (1) è vero. Questo è solo il caso in cui la forcella utilizza pty anziché pipe. Tornando ad apt, esiste una variabile di configurazione non documentata che consente di utilizzare pipe invece di pty che quindi risolve il problema:

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

Aspettarsi che possa aiutare gli altri.


2
In realtà questa è la risposta completamente corretta. Permette anche di eseguire apt-get con single -q e vedere un po 'di output e non vedere il fastidioso "Reading database"
valodzka,

1
Sto provando questo su gcloud debian jessie (8) e continuo a leggere le linee del database e a decomprimere / configurare le linee.
CrazyCasta,

3
Questa risposta non funziona per Ubuntu 18.04.
Amedee Van Gasse,

1
C'è ancora un sacco di selezione / preparazione / impostazione delle linee ...
hayd

1
L' -o=Dpkg::Use-Pty=0ha funzionato perfettamente su Ubuntu 18.04. Mostra solo un "Database di lettura" invece di più con aggiornamenti di avanzamento ogni 5%.
wisbucky

2

Come puoi vedere qui e qui
Puoi fare:

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

O una riga:

DEBIAN_FRONTEND=noninteractive apt-get -yq install [packagename]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.