Làm cách nào để nâng cấp một gói bằng apt-get?


827

Làm cách nào để cập nhật một gói duy nhất? Theo như man apt-getnói apt-get upgradekhông lấy một 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 các phiên bản mới có sẵn được lấy và nâng cấp; trong mọi trường hợp, các gói hiện đang được cài đặt bị loại bỏ hoặc các gói chưa được cài đặt được lấy và cài đặt. Các phiên bản mới của các gói hiện được cài đặt 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 chúng. 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.

Câu trả lời:


1027

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ếu có, bạn có thể bỏ đi --only-upgrade.


88
apt-get install --only-upgrade <packagename>sẽ không cài đặt bất kỳ gói mới nào
taneli

9
Sẽ installlệnh cũng nâng cấp các phụ thuộc của gói duy nhất nếu cần thiết?
Pino

7
@Pino Nó sẽ, nó có ý nghĩa để làm như vậy. 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 thì sao? Bạn đang hos nếu bạn không nâng cấp cả hai. Đây là lý do tại sao installlà lệnh đúng cho việc này, ngay cả khi nó có vẻ phản trực giác.
Matt Dodge

6
Điều này có loại bỏ dấu "tự động" không? Đôi khi khi bạn cài đặt các thư viện cụ thể, gói được đánh dấu là 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

3
Tôi chỉ thử nghiệm, vì tất cả thông tin là khá mơ hồ; trên Ubuntu 16.04 ( apt 1.0.1), việc nâng cấp gói sử dụng apt installkhông ảnh hưởng đến autonhãn hiệu, cho dù --only-upgradeđược cung cấp hay không. Mặc dù tất nhiên sử dụng --only-upgradecó ý nghĩa nếu bạn không muốn vô tình cài đặt một cái gì đó mới. Nó cũng sẽ nâng cấp bất kỳ phụ thuộc cần thiết .
đôi

129

Để cập nhật một gói duy nhất 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.

11
Tôi gặp lỗi với lệnh này:E: Sense only is not understood, try true or false.
Michael

1
Đối với những người gặp phải lỗi của người bình luận trước, xem câu trả lời của tôi dưới đây .
golem

3
bị hạ thấp vì nó không thêm thông tin mới từ các câu trả lời trước
gokul_uf 22/03/2016

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

55

Có hai cách tôi có thể nghĩ ra:

  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ụng Synaptic Package Manager: Nhấp chuột phải → Đánh dấu để nâng cấp :

    nhập mô tả hình ảnh ở đây

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


1
Vâng, nó nên và sudo apt-get install whatevernên tự nâng cấp.
Binarylife

4
upgradekhông có một đối số gói.
ℝaphink

25

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

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

Tương tự, tôi không muốn chạy lệnh nâng cấp, 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 PPA ondrej vào apt.source của mình bằng cách sử dụng -

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, sau đó sao chép toàn bộ chuỗi tham chiếu nó. Ví dụ: chuỗi cho PHP 5.5 trên Ubuntu là "5.5.16 + dfsg-1 + deb.sury.org ~ chính xác + 2".

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

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

Tôi chỉ thêm thông tin 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!


16

Trên Ubuntu 9.04 Jickyy,

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


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

10

Đố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 kịch bản, ví dụ:

nâng cấp-pack.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
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.