Tại sao `sudo apt-get cài đặt XXXX` đôi khi yêu cầu xác nhận, những người khác thì không?


29

Chỉ vì tò mò, đôi khi trong khi cài đặt phần mềm apt-get install software_name, thiết bị đầu cuối nhắc tôi xác nhận "loại Có hoặc Không", nhưng không phải lúc nào cũng được.

Tôi không có nghĩa là nhắc mật khẩu sudo, nhưng thông báo "Sẽ được tải xuống và định cấu hình XXX Kb, tiếp tục?" (hoặc một cái gì đó tương tự)

Tại sao?


2
Về cơ bản, nếu các gói khác ngoài các gói được đề cập trong các đối số cần được cài đặt, nó sẽ yêu cầu.
muru

Câu trả lời:


24

Nó thường sẽ hỏi bạn nếu có các gói được đề xuất hoặc được đề xuất phụ thuộc vào phần mềm bạn đang cố cài đặt, Nó cũng có thể phụ thuộc vào kích thước của chương trình hoặc bảo mật của kho lưu trữ mà bạn đang tải xuống.


tôi nghĩ những động lực tương tự .. nhưng tôi muốn được an toàn với câu trả lời
Strae

Vâng, câu trả lời này là chính xác. Tôi sẽ thêm rằng bạn có thể (hữu ích nếu bạn đang cố gắng tự động hóa một cái gì đó) sử dụng -ycờ nếu bạn không muốn được nhắc.
Umang

@Umang: cảm ơn vì gợi ý, nhưng tôi không cần tự động hóa bất cứ điều gì vào lúc này, chỉ là một sự tò mò;)
Strae

12

apt-get install new-package sẽ chỉ yêu cầu xác nhận nếu nó cũng cài đặt các phụ thuộc của gói đã cho.

Nếu chỉ gói duy nhất bạn chỉ định sẽ được cài đặt mà không có bất kỳ nội dung bổ sung nào, thì gói đó sẽ giữ im lặng như bạn đã "xác nhận" bạn muốn có gói đó bằng cách nhập gói đó.
Nhưng nếu có một số gói phụ thuộc, bạn có thể thay đổi ý định và muốn dừng cài đặt (ví dụ: vì một trong số chúng đã gây rắc rối trước đó), vì vậy nó sẽ nhắc bạn về y / n.

Bây giờ nếu bạn muốn xem nó sẽ làm gì, bạn có thể thực hiện chạy khô / mô phỏng lệnh cài đặt. Bạn đặt công tắc này bằng cách thêm một -sđối số. Ví dụ: Cài đặt gói duy nhấtsudoku

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])

Điều đó cho bạn thấy những gì sẽ xảy ra, nhưng không phải là tải xuống sẽ lớn như thế nào, như lời nhắc xác nhận sẽ làm.

Do đó, một công tắc khác có thể được sử dụng , --print-uris. Ví dụ tương tự:

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

Công --print-uristắc sẽ không chỉ chặn cài đặt thực tế mà còn hiển thị kích thước được tải xuống và cài đặt cũng như thông tin bổ sung về gói (địa chỉ web và MD5Sum).
Chú ý: Không sử dụng --print-uris -s cùng nhau. Nó sẽ giống như -schỉ.
Cũng lưu ý rằng bạn nên thêm công -ytắc (= giả sử có cho mọi câu hỏi) nếu bạn muốn xử lý đầu ra, vì điều này sẽ nhắc bạn xác nhận theo các quy tắc giống như cài đặt thông thường mà không cần chuyển đổi.


Bây giờ nếu bạn chỉ muốn lọc thông tin kích thước tệp tải xuống và cài đặt mà không cần phải đọc qua tất cả những thứ khác, bạn có thể sử dụng lệnh sau để đạt được điều này (cảm ơn @terdon đã hỗ trợ). Một lần nữa với ví dụ 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

Bạn thấy rằng dòng đầu tiên của đầu ra là kích thước tải xuống và dòng thứ hai mô tả không gian cần thiết cho việc cài đặt.

Vì lệnh này không dễ gõ và thậm chí khó nhớ hơn, hãy sao chép phần sau vào tệp script, ví dụ: được gọi là 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: /'

Đừng quên chmod +x apt-install-checker.shtrước khi bạn thực hiện nó!

Ví dụ đầu ra:

bytecommander@AlkaliMetal:~/bin$ ./apt-install-checker.sh sudoku
Download size: 28.4 kB 
Installed size: 106 kB 

Kịch bản vẫn đang được phát triển! Các tính năng theo kế hoạch: Nó sẽ hỏi bạn xem bạn có muốn thực hiện cài đặt không, sau đó tiếp tục và chạy nó. Có thể một số tiện ích tốt đẹp khác xuất hiện trong tâm trí tôi vào ngày mai ...


Nhưng có cách nào để nó hỏi bạn mọi lúc không? Thậm chí bằng cách thay đổi mã thực tế của chương trình.

@Toroidal thay đổi mã của chương trình nằm ngoài phạm vi một chút ở đây - bạn có thể phải tìm hiểu apthoặc apt-getsử dụng các trang để tìm cách thay đổi tùy chọn, vì có thể bạn đã có thể thay đổi cài đặt để buộc nó.
Thomas Ward

9

Từ những gì tôi hiểu apt-get chỉ yêu cầu xác nhận khi có thêm phụ thuộc để cài đặt. Không có cách nào để buộc xác nhận theo mặc định cho tất cả các gói.

Tuy nhiên, có thể buộc xác nhận trên bất kỳ lệnh cài đặt nào khi sử dụng aptitude.

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

Hoặc, để nhận được aptitudenhắc nhở về một lần chạy cụ thể, hãy sử dụng aptitude -P.
Eliah Kagan
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.