Làm cách nào để cài đặt apt-get bớt ồn hơn?


128

Nếu tôi sử dụng apt-get install -qq mono-devel, tôi hy vọng nó sẽ yên lặng ngoại trừ lỗi, theo trợ giúp:

-qq No output except for errors

Thay vào đó tôi nhận được:

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.

hơn thế nữa ...

Trong thực tế, một vài trăm giá trị đầu ra. Điều này dường như không phù hợp với no output except for errors.

Làm thế nào để thực sự có được apt-get installin ra chỉ khi có lỗi giữ nó từ cài đặt?


Bạn đã thử sử dụng -q = # trong đó # là mức yên tĩnh chưa? (Đó là trong hướng dẫn.) Bạn có thể muốn đưa ra một báo cáo lỗi chống lại điều này.
Paddy Landau

@PaddyLandau Tôi thực sự đã làm. Tôi không biết tại sao nó lại nói về việc chọn gói chưa được chọn trước đó hoặc tại sao điều đó lại quan trọng và tôi không chắc liệu nó có liên quan đến trạng thái của các vms mà tôi đang chạy trên các gói này không, trên travis-ci . Nhưng câu trả lời đã làm việc tốt.
jbtule

"Chọn gói chưa được chọn trước đó" đơn giản có nghĩa là trình quản lý gói bao gồm một gói được yêu cầu để đáp ứng các phụ thuộc. Như tôi đã viết trước đây, bạn có thể muốn đưa ra một báo cáo lỗi về --quiettùy chọn dường như không hoạt động chính xác.
Paddy Landau

Tôi không vui khi báo cáo cùng một triệu chứng trong Ubuntu 15.04 20150709.
Lloyd Dewolf

Có vẻ như điều này liên quan đến báo cáo vấn đề dpkg năm 2009: bug.debian.org/cgi-bin/ormsreport.cgi?orms=539417 .
Lloyd Dewolf 7/8/2015

Câu trả lời:


83

Trang hướng dẫn cho apt-get như sau:

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

Các -qhoặc -qqcờ nên đi trước khi lệnh, như vậy:

apt-get -qq upgrade


3
Đây là câu trả lời chính xác! Bất kỳ thực hiện thực tế cần phải bảo tồn nhắc nhở. Được sử dụng chính xác, -qhoàn toàn hoạt động (không có đầu ra "hoạt hình") cũng như -qq(không có đầu ra ngoại trừ lỗi). Xin hãy ủng hộ!
Charney Kaye

27
Không, nó không hoạt động. Ngay cả -qqtrước khi có lệnh cài đặt, tôi vẫn nhận được vô số thứ linh tinh từ việc đọc cơ sở dữ liệu đến giải nén và thiết lập tin nhắn.
CrazyCasta

2
Vâng, tôi đã cố gắng sudo apt-get -qq -y install mercurial, sudo apt-get install -qq -y mercurial, sudo apt-get -qq install -qq -y mercurialvà các biến thể khác liên quan đến nhiều hơn q (mặc dù tôi không nhìn thấy bất kỳ tài liệu gợi ý rằng điều này sẽ làm việc. Tôi đang chạy Debian Jessie trên google cloud btw (8). Tôi cũng đã thử Goetz Trả lời và nó dường như cũng không hoạt động. Có vẻ như không hoạt động. Ý tôi là tôi không nhận thấy sự khác biệt.
CrazyCasta

3
Đây là Ubuntu 16.04.1, chạy như một container Docker. Tôi đoán là các tin nhắn thực sự là từ dpkg, được gọi bởi apt-get. Lệnh là apt-get -qq update && apt-get -qq upgrade && apt-get -qq install build-essential. Xem gist.github.com/stefanlasiewski/ từ
Stefan Lasiewski

3
Trong Docker, bạn có 2 lựa chọn thay thế: (1) chạy riêng từng lệnh thay vì &&nối chúng (có thể hoạt động, nhưng đó không phải là "cách docker") (2) chuyển hướng đầu ra sang / dev / null như trong câu trả lời khác. Tùy chọn 2 có lẽ là đặt cược tốt nhất của bạn trong khi có lỗi này.
Mike

55

Một chuyển hướng đơn giản có thể làm điều này. Đó không phải là chính xác những gì bạn đã nghĩ, tôi chắc chắn, nhưng nó chắc chắn như địa ngục hoạt động :)

Nói tóm lại, chỉ cần đánh > /dev/nullvào cuối bất kỳ lệnh nào mà bạn muốn chuyển hướng tất cả stdoutvào hư vô. Những thứ xuất ra trên stderrvẫn sẽ hiển thị trong bảng điều khiển.

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

Không có rác! Và đây là những gì xảy ra nếu chúng ta ngớ ngẩn và phá vỡ một cái gì đó:

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

7
Đó là một chút vấn đề nếu bạn nhận được lời nhắc ...
l0b0

1
Nếu đây là một phần của một kịch bản, bạn sẽ không đặt sudotrước apt-get. Bạn sẽ chỉ sudokhi chạy kịch bản thay thế.
Xion

3
@Oli Nếu bạn hoàn toàn chắc chắn rằng bạn sẽ không làm cho hệ thống của bạn bốc cháy, bạn luôn có thể sudo apt-get upgrade -qq --force-yes > /dev/null. -qqngụ ý -y, như WulfHart đã nói, và --force-yeskhiến nó cày xới bất cứ thứ gì.
JamesTheAwgieDude

2
@Vorac Không chỉ là chuyển hướng stdout(nhìn thấy lỗi là một điều đáng mong đợi IMO).
Oli

3
Đây không phải là câu trả lời cho câu hỏi; đó là một cách giải quyết.
Charney Kaye

42

Chúng tôi phải đối mặt với cùng một vấn đề. apt-get install -qqloại bỏ hầu hết các kết quả đầu ra nhưng vẫn gây khó chịu "(Đọc cơ sở dữ liệu ...".

Chúng tôi đã xem xét nguồn của apt và phát hiện ra rằng đầu ra được tạo ra bởi dpkg được rẽ nhánh bởi apt. Sau đó, nguồn của dpkg cho thấy rằng soutput gây phiền nhiễu chỉ được ban hành khi isatty (1) là đúng. Đây chỉ là trường hợp khi ngã ba sử dụng pty thay vì đường ống. Quay lại apt, có một biến cấu hình không có giấy tờ cho phép sử dụng ống thay vì pty để giải quyết vấn đề:

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

Mong rằng có thể giúp đỡ người khác.


2
Trên thực tế đây là câu trả lời đầy đủ. Nó cũng cho phép chạy apt-get với một -q và xem một số đầu ra và không thấy "Đọc cơ sở dữ liệu" gây phiền nhiễu
valodzka

1
Tôi đang thử điều này trên gcloud debian jessie (8) và tôi vẫn nhận được các dòng cơ sở dữ liệu và giải nén / thiết lập các dòng.
CrazyCasta

3
Câu trả lời này không hoạt động cho Ubuntu 18.04.
Amedee Van Gasse

1
Vẫn còn một loạt các lựa chọn / chuẩn bị / thiết lập các dòng ...
hayd

1
Công -o=Dpkg::Use-Pty=0việc hoàn hảo trên Ubuntu 18.04. Nó chỉ hiển thị một "Cơ sở dữ liệu đọc" thay vì nhiều cơ sở cập nhật tiến độ cứ sau 5%.
wvducky

2

Như bạn có thể thấy ở đâyở đây
Bạn có thể làm:

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

Hoặc một dòng:

DEBIAN_FRONTEND=noninteractive apt-get -yq install [packagename]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.