จะอัพเกรดแพ็คเกจเดียวโดยใช้ apt-get ได้อย่างไร


827

ฉันจะอัปเดตแพ็คเกจเดียวได้อย่างไร เท่าที่man apt-getกล่าวว่าapt-get upgradeไม่ใช้แพคเกจ / รายการแพคเกจเป็นพารามิเตอร์:

อัพเกรด

/etc/apt/sources.listอัพเกรดจะใช้ในการติดตั้งรุ่นใหม่ล่าสุดของแพ็กเกจทั้งหมดที่ติดตั้งอยู่ในระบบจากแหล่งที่มาแจกแจงใน แพคเกจปัจจุบันที่ติดตั้งด้วยเวอร์ชันใหม่ที่มีอยู่จะถูกเรียกคืนและอัปเกรด ภายใต้สถานการณ์ที่ไม่ได้ติดตั้งแพคเกจที่ถูกลบออกหรือแพคเกจที่ยังไม่ได้ติดตั้งเรียกและติดตั้ง แพ็คเกจที่ติดตั้งในปัจจุบันเวอร์ชั่นใหม่ที่ไม่สามารถอัพเกรดได้โดยไม่เปลี่ยนสถานะการติดตั้งของแพ็คเกจอื่นจะยังคงอยู่ในเวอร์ชั่นปัจจุบัน การอัปเดตจะต้องดำเนินการก่อนเพื่อให้ apt-get รู้ว่ามีแพ็คเกจรุ่นใหม่ที่พร้อมใช้งาน

คำตอบ:


1027

apt-get install --only-upgrade <packagename>คุณเพียงแค่ต้องทำ สิ่งนี้จะอัปเกรดเฉพาะแพ็คเกจเดียวและเฉพาะเมื่อติดตั้งแล้ว

หากคุณต้องการติดตั้งแพ็กเกจหากไม่มีอยู่หรืออัพเกรดหากเป็นเช่นนั้นคุณอาจเลิก--only-upgradeใช้งาน


88
apt-get install --only-upgrade <packagename>จะไม่ติดตั้งแพ็คเกจใหม่ใด ๆ
taneli

9
จะinstallสั่งการอัพเกรดยังพึ่งพาแพคเกจเดียวว่าถ้าจำเป็น?
Pino

7
@Pino มันจะทำให้รู้สึกถึงการทำเช่นนั้น จะทำอย่างไรถ้าเวอร์ชันที่คุณกำลังอัพเกรดขึ้นอยู่กับแพ็คเกจที่ใหม่กว่า? คุณจะถูกซ่อนถ้าคุณไม่ได้อัพเกรดทั้งคู่ นี่คือเหตุผลที่installเป็นคำสั่งที่ถูกต้องสำหรับสิ่งนี้แม้ว่ามันจะดูเหมือนว่าเคาน์เตอร์
Matt Dodge

6
สิ่งนี้ลบเครื่องหมาย "อัตโนมัติ" หรือไม่ บางครั้งเมื่อคุณติดตั้งไลบรารีโดยเฉพาะแพคเกจถูกทำเครื่องหมายว่าติดตั้งด้วยตนเอง ฉันไม่ชอบเรียกใช้ 'ติดตั้ง' ในไลบรารีด้วยเหตุผลนี้
isaaclw

3
ฉันเพิ่งทดสอบเนื่องจากข้อมูลทั้งหมดค่อนข้างคลุมเครือ บน Ubuntu 16.04 ( apt 1.0.1) การอัพเกรดแพ็คเกจโดยapt installไม่ส่งผลกระทบต่อautoเครื่องหมายไม่ว่าจะ--only-upgradeมีให้หรือไม่ แม้ว่าการใช้งาน--only-upgradeจะสมเหตุสมผลถ้าคุณไม่ต้องการติดตั้งสิ่งใหม่โดยไม่ตั้งใจ มันจะอัพเกรดการพึ่งพาที่จำเป็นใด ๆ
คู่

129

ในการอัปเดตแพ็คเกจเดียวโดยใช้ CLI:

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

เช่น, 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
ฉันได้รับข้อผิดพลาดด้วยคำสั่งนี้:E: Sense only is not understood, try true or false.
Michael

1
สำหรับผู้ที่พบข้อผิดพลาดวิจารณ์ก่อนหน้านี้มาดูคำตอบของฉันด้านล่าง
golem

3
downvoted เนื่องจากไม่ได้เพิ่มข้อมูลใหม่จากคำตอบก่อนหน้านี้
gokul_uf

1
คุณควรจะผ่าน--only-upgradeการinstallsubcommand ไม่โดยตรงไปแล้วคุณจะไม่ต้องผนวกapt-get true
Ruslan

55

มีสองวิธีที่เป็นไปได้ที่ฉันสามารถคิดได้:

  1. sudo apt-get install nameofpackage

    สิ่งนี้จะอัพเกรดแพ็คเกจแม้ว่าติดตั้งแล้ว:

    ~$ 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. การใช้Synaptic Package Manager: คลิกขวา→ทำเครื่องหมายเพื่ออัปเกรด :

    ป้อนคำอธิบายรูปภาพที่นี่

    หมายเหตุ : บางครั้งมันอาจขอแพคเกจเพิ่มเติมหรือการอ้างอิงมันเป็นเรื่องปกติ


1
ใช่มันควรและsudo apt-get install whateverควรทำการอัพเกรดด้วยตัวเอง
Binarylife

4
upgradeไม่ใช้อาร์กิวเมนต์ของแพคเกจ
ℝaphink

25

จากประสบการณ์ของฉันใน Ubuntu 12.04 LTS การใช้คำสั่งด้านล่างจะไม่อัพเกรดแพ็คเกจหากใช้ PPA แยก -

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

ในทำนองเดียวกันฉันไม่ต้องการรันคำสั่งอัพเกรดซึ่งจะอัพเกรดแพ็คเกจทั้งหมดบนเซิร์ฟเวอร์ของฉัน -

sudo apt-get dist-upgrade

ตัวอย่างเช่นฉันติดตั้ง PHP 5.3 และเพิ่ม ondrej PPA ใน apt.sources ของฉันโดยใช้ -

sudo add-apt-repository ppa:ondrej/php5

ถ้าฉันวิ่ง

sudo apt-get install php5

มันจะติดตั้ง PHP 5.3 อีกครั้ง

ฉันต้องก่อนกำหนดหมายเลขรุ่นเพื่ออัพเกรดโดยใช้

sudo apt-cache policy php5

นี่จะแสดงหมายเลขรุ่นที่มีทั้งหมด คุณควรค้นหาหมายเลขรุ่นที่คุณต้องการอัปเกรดแล้วคัดลอกสตริงทั้งหมดที่อ้างอิง ตัวอย่างเช่นสตริงสำหรับ PHP 5.5 บน Ubuntu คือ "5.5.16 + dfsg-1 + deb.sury.org ~ precision + 2"

ตอนนี้คุณสามารถรันคำสั่ง apt-get install ด้วยหมายเลขรุ่นเฉพาะและ voila!

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

ฉันเพิ่งเพิ่มสิ่งนี้เพราะฉันไม่สามารถหาข้อมูลนี้ได้ทุกที่!


16

บน Ubuntu 9.04 Jaunty

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

อัตราผลตอบแทน:

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

คำสั่ง

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

ทำงานในกรณีของฉัน


4
คุณควรจะผ่าน--only-upgradeการinstallsubcommand ไม่โดยตรงไปแล้วคุณจะไม่ต้องผนวกapt-get true
Ruslan

10

สำหรับโซลูชันบรรทัดคำสั่งที่ไม่ได้ติดตั้งแพคเกจหากยังไม่มีอยู่:

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

สามารถทำให้เป็นสคริปต์ได้อย่างง่ายดายเช่น:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.