Câu hỏi Làm thế nào để nâng cấp một gói đơn bằng apt-get?


Làm cách nào để cập nhật một gói? Xa như man apt-get nói apt-get upgrade không lấy gói / danh sách các gói làm tham số:

nâng cấp

nâng cấp được sử dụng để cài đặt các phiên bản mới nhất của tất cả các gói   hiện được cài đặt trên hệ thống từ các nguồn được liệt kê trong    /etc/apt/sources.list. Các gói hiện được cài đặt với mới   các phiên bản có sẵn được lấy ra và nâng cấp; dưới bất kỳ tình huống   hiện đã được cài đặt các gói bị xóa hoặc các gói chưa   đã cài đặt được truy xuất và cài đặt. Phiên bản mới hiện được cài đặt   các gói không thể nâng cấp mà không thay đổi trạng thái cài đặt   của gói khác sẽ được để lại ở phiên bản hiện tại của họ. Một bản cập nhật   phải được thực hiện trước để apt-get biết rằng các phiên bản mới của   gói có sẵn.


715
2018-05-20 16:36


gốc




Các câu trả lời:


Bạn chỉ cần làm apt-get install --only-upgrade <packagename>. Điều này sẽ chỉ nâng cấp gói duy nhất đó và chỉ khi nó được cài đặt.

Nếu bạn muốn cài đặt gói nếu nó không tồn tại hoặc nâng cấp nó nếu có, bạn có thể bỏ qua --only-upgrade.


903
2018-05-20 16:41



@Raphink: Nhận xét của bạn về nâng cấp là đúng, nhưng cài đặt được coi là tương đương với nâng cấp một gói; install is followed **by one** or more packages desired for installation or upgrading , Nếu bạn có một câu trả lời tốt hơn, bạn có thể trả lời câu hỏi. Nó sẽ là tuyệt vời. - Binarylife
apt-get install --only-upgrade <packagename> sẽ không cài đặt bất kỳ gói mới nào - taneli
Liệu install nâng cấp lệnh cũng là phụ thuộc của gói đơn đó nếu cần thiết? - Pino
@ Pino Nó sẽ, nó làm cho tinh thần để làm như vậy. Điều gì sẽ xảy ra nếu phiên bản bạn đang nâng cấp phụ thuộc vào phiên bản mới hơn của gói khác? Bạn đang hosed nếu bạn không nâng cấp cả hai. Đây là lý do tại sao installlà lệnh phù hợp cho điều này, ngay cả khi nó có vẻ phản trực giác. - Matt Dodge
Điều này có xóa dấu "tự động" không? Đôi khi, khi bạn cài đặt các thư viện, gói cụ thể được đánh dấu là được cài đặt thủ công. Tôi không thích chạy 'cài đặt' trên các thư viện vì lý do này. - isaaclw


Để cập nhật một gói đơn bằng CLI:

sudo apt-get install --only-upgrade <packagename>

ví dụ., sudo apt-get install --only-upgrade ack

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Skipping **ack**, it is not installed and only upgrades are requested.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

116
2017-10-15 11:22



Tôi gặp lỗi với lệnh này: E: Sense only is not understood, try true or false. - Michael
Đối với những người gặp phải lỗi của người bình luận trước đó, hãy xem câu trả lời của tôi bên dưới. - golem
downvoted vì nó không thêm thông tin mới từ các câu trả lời trước - gokul_uf
Bạn nên vượt qua --only-upgrade đến install tiểu ban, không trực tiếp apt-get, sau đó bạn sẽ không phải thêm true. - Ruslan


Có hai cách có thể tôi có thể nghĩ đến:

  1. sudo apt-get install nameofpackage

    Điều này sẽ nâng cấp gói ngay cả khi đã được cài đặt:

    ~$ sudo apt-get install emesene
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following packages will be upgraded:
      emesene
    1 upgraded, 0 newly installed, 0 to remove and 5 not upgraded.
    Need to get 1,486 kB of archives.
    After this operation, 696 kB disk space will be freed.
    Get:1 http://il.archive.ubuntu.com/ubuntu/ natty-updates/universe emesene all 2.11.4+dfsg-0ubuntu1 [1,486 kB]
    
  2. Sử dụngSynaptic Package Manager: Nhấp chuột phải → Đánh dấu để nâng cấp:

    enter image description here

    chú thích: Đôi khi nó có thể yêu cầu các gói bổ sung hoặc phụ thuộc, nó là bình thường.


48
2018-05-20 16:39



Phải, nó nên, và sudo apt-get install whatever nên tự nâng cấp. - Binarylife
upgrade không lấy một đối số gói. - ℝaphink
Phải, cảm ơn, nó nâng cấp tất cả các gói. - Binarylife


Theo kinh nghiệm của tôi trên Ubuntu 12.04 LTS, sử dụng lệnh dưới đây sẽ không nâng cấp gói nếu sử dụng một PPA riêng biệt -

sudo apt-get --only-upgrade install <packagename>

Tương tự như vậy, tôi không muốn chạy lệnh nâng cấp, điều này sẽ nâng cấp tất cả các gói trên máy chủ của tôi -

sudo apt-get dist-upgrade

Ví dụ, tôi đã cài đặt PHP 5.3 và đã thêm ondrej PPA vào tài khoản apt.sources của tôi -

sudo add-apt-repository ppa:ondrej/php5

Nếu tôi chạy

sudo apt-get install php5

nó sẽ chỉ cài đặt lại PHP 5.3.

Trước tiên, tôi phải xác định số phiên bản để nâng cấp lên, sử dụng

sudo apt-cache policy php5

Điều này sẽ liệt kê tất cả các số phiên bản có sẵn. Bạn nên tìm số phiên bản bạn muốn nâng cấp lên, và sau đó sao chép toàn bộ chuỗi tham chiếu đến nó. Ví dụ, chuỗi cho PHP 5.5 trên Ubuntu là "5.5.16 + dfsg-1 + deb.sury.org ~ exact + 2".

Bây giờ, bạn có thể chạy lệnh apt-get install với số phiên bản cụ thể, và thì đấy!

sudo apt-get install php5=5.5.16+dfsg-1+deb.sury.org~precise+2

Tôi chỉ thêm điều này vì tôi không thể tìm thấy thông tin này ở bất kỳ nơi nào khác!


22
2017-09-18 16:14





Trên Ubuntu 9.04 Jaunty,

apt-get --only-upgrade install <package>

sản lượng:

E: Sense only is not understood, try true or false.

Lệnh

apt-get --only-upgrade true install <package>

đã làm việc trong trường hợp của tôi.


15
2018-04-13 18:21



Bạn nên vượt qua --only-upgrade đến install tiểu ban, không trực tiếp apt-get, sau đó bạn sẽ không phải thêm true. - Ruslan


Đối với giải pháp dòng lệnh không cài đặt gói nếu nó chưa tồn tại:

dpkg -s <package> 2>/dev/null | grep -q Status.*installed && sudo apt-get install <package>

Điều này có thể dễ dàng được tạo thành một tập lệnh, ví dụ:

upgrade-package.sh:

#!/bin/bash

[[ -z $1 ]] && { echo "Usage: $(basename $0) package"; exit 1; }

if dpkg -s "$1" 2>/dev/null | grep -q Status.*installed; then
    echo "Attempting to upgrade $1"
    sudo apt-get install "$1"
else
    echo "Package $1 is not installed"
fi

9
2018-05-22 07:58