ทำไมถึงมีการแยกการอัปเดตและอัปเกรดอยู่?


12

ฉันเข้าใจว่าในaptคำสั่งupdateอัปเดตรายการแพ็คเกจที่มีอยู่ แต่ไม่อัปเกรดซอฟต์แวร์ที่ติดตั้งจากแพ็คเกจเหล่านี้แล้ว

ฉันเข้าใจด้วยว่าupgradeการอัพเกรดซอฟต์แวร์ใด ๆ ที่ฉันติดตั้งไว้แล้วจากแพ็คเกจที่ฉันอัปเดตด้วยupdateตามที่อธิบายไว้ข้างต้น

อะไรคือสาเหตุที่นักพัฒนา Ubuntu / Debian แยกส่วนนี้updateและupgradeทำงานร่วมกับคำสั่งเดียวเพื่อทำงานทั้งสอง

นี่เป็นคำถามเกี่ยวกับปรัชญาสถาปัตยกรรมของนักพัฒนา Ubuntu


ถ้าฉันจะติดตั้งแอพจำนวนมาก (และกำลังจัดกลุ่มไว้ดังนั้นหนึ่งคำสั่งสำหรับหนึ่งกลุ่มคำสั่งถัดไปสำหรับ ฯลฯ ) ทำไมฉันถึงต้องการดาวน์โหลด repo สำหรับแต่ละกลุ่ม - โดยแยก repo.update และ ขั้นตอนการติดตั้งที่ตามมาฉันสามารถบันทึกแบนด์วิดธ์ หากฉันต้องการให้คำสั่งทำทั้งสองอย่างฉันสามารถเขียนสคริปต์หรือทำเช่นaliasนั้นได้ วิธี unix คือหนึ่งคำสั่งทำสิ่งเดียวเท่านั้นดังนั้นการแยกเหมาะสมกว่าด้วยวิธี unix ถ้าอาร์กิวเมนต์ 'เทววิทยา / ปรัชญา' เป็นสิ่งที่คุณเกินไป
guiverc

ถ้าฉันไปapt dist-upgradeแล้วกด "n" เพื่อยกเลิกแล้วเปลี่ยนใจฉันจะบันทึกแบนด์วิดท์เพราะจะไม่ 'อัปเดต' เพื่อทำapt dist-upgradeคำสั่งของฉันอีกครั้ง... แม้ว่า 'dist-upgrade' จะทำการอัปเดต โดยอัตโนมัติมีเหตุผลในการ 'อัปเดต' ซึ่งไม่รวมถึง 'ติดตั้ง', 'อัพเกรด' หรือ 'dist-upgrade' ดังนั้นคำสั่ง 'อัปเดต' จะมีอยู่ต่อไป ..
guiverc

ฉันได้แย้งว่าการแยกไม่ควรอยู่ในมุมมองของผู้ใช้และการกระทำของapt updateควรจะทำงานโดยอัตโนมัติเมื่อจำเป็น
Robie Basak

คำตอบ:


7

การอัพเกรดไม่ใช่เพียงครั้งเดียวที่คุณอาจต้องใช้apt-get updateและฉันไม่ต้องการอัพเกรดทุกครั้งที่ฉันต้องการอัปเดตรายการแพ็กเกจ

การapt-get upgradeทำงานที่ดีอาจขึ้นอยู่กับapt-get updateการวิ่งเมื่อไม่นานมานี้ แต่นั่นก็เป็นจริงapt-get removeและapt-get installเช่นกัน! สิ่งเหล่านี้ควรบอกเป็นนัยapt-get updateหรือไม่ ไม่แน่นอน! เป็นเรื่องง่าย ๆ ของประสิทธิภาพของทรัพยากรและการออกแบบความสะอาดถ้าการดำเนินการเป็นเรื่องธรรมดาสำหรับการดำเนินการอื่น ๆ มันควรจะถูกนำมาพิจารณา

ตรงกันข้ามที่ได้รับapt-get removeและapt-get installยังอาจขึ้นอยู่กับapt-get updateการถูกเรียกใช้เมื่อเร็ว ๆ นี้จะประสบความสำเร็จเสร็จสิ้นไม่ได้ทำให้รู้สึกapt-get upgradeสำหรับการทำงานของแต่ละapt-get update? ไม่อีกครั้งเนื่องจากสิ่งที่ฉันตั้งใจจะทำอาจขัดแย้งกับสิ่งที่apt-get upgradeจะทำ


6

เมื่อใดก็ตามที่คุณเปลี่ยนแหล่งซอฟต์แวร์คุณต้องเรียกใช้คำสั่งsudo apt updateเพื่อรีเฟรชรายการซอฟต์แวร์ที่มีอยู่ จากนั้นคุณสามารถค้นหาแพ็คเกจที่มีในแหล่งซอฟต์แวร์ใหม่ที่คุณเพิ่งเพิ่มและ / หรือติดตั้ง

คำสั่งsudo apt upgradeเทียบเท่ากับเทอร์มินัลสำหรับการอัพเกรดรายการแพคเกจที่ติดตั้งโดยใช้แอพพลิเคชั่น Software Updater สิ่งนี้แตกต่างจากเวิร์กโฟลว์ปกติของการเพิ่มแหล่งซอฟต์แวร์ใหม่อัปเดตรายการซอฟต์แวร์ที่มีอยู่เพื่อรวมแพ็คเกจจากแหล่งซอฟต์แวร์ใหม่และติดตั้งแพคเกจใหม่จากแหล่งซอฟต์แวร์ใหม่ที่คุณเพิ่งเพิ่มดังนั้นจึงสะดวกยิ่งขึ้น และทำให้สับสนน้อยกว่าsudo apt updateและsudo apt upgradeเป็นคำสั่งแยกต่างหาก

นอกจากนี้ยังมีความสับสนน้อยกว่าในการแยกsudo apt updateและsudo apt upgradeเนื่องจากเมื่อคุณทำงานได้sudo apt updateสำเร็จคุณได้ยืนยันว่าคุณมีการเชื่อมต่ออินเทอร์เน็ต หากมีปัญหาเมื่อทำงานsudo apt upgradeหลังจากนั้นปัญหาน่าจะเป็นปัญหาการจัดการแพ็กเกจมากกว่าปัญหาเกี่ยวกับการเชื่อมต่ออินเทอร์เน็ตและผลลัพธ์ของsudo apt upgradeจะให้เบาะแสสำหรับการวินิจฉัยและแก้ไขปัญหา


5

ประวัติของความแตกต่างระหว่างupdateและupgradeจริง ๆ แล้วสวยเท่ห์

นานมาแล้ว - ประมาณ 2000 ปีก่อนที่ Ubuntu จะมีอยู่ - แบนด์วิดท์และพื้นที่ดิสก์มี จำกัด มาก ... แม้ว่าจะขยายตัวเมื่อเทียบกับกลางปี ​​1990 บรอดแบนด์เพิ่งเริ่มต้นใช้งานและการหมุนหมายเลขยังเป็นวิธีสำคัญในการออนไลน์ ดิสก์ขนาดใหญ่ยังคงมีอยู่เพียงไม่กี่ร้อย MB Apt ฉลาดและใหม่หัวรุนแรงและการปฏิวัติสร้างขึ้นบน dpkg

ฐานข้อมูลที่ฉลาดเมื่อคุณคิดเกี่ยวกับมันเป็นประหลาดใจ: มันเป็นฐานข้อมูลที่ถูกต้องต่อนาทีของทุกซอฟต์แวร์จากทั้งหมดที่เก็บที่รู้จักกัน มีรายละเอียดเพียงพอสำหรับการคำนวณการพึ่งพาและระบุการอัพเกรดที่มีอยู่ แต่มีขนาดเล็กพอที่จะส่งผ่านโมเด็ม dial-up ของเวลาและเก็บไว้ในไดรฟ์ขนาดเล็กของเวลา การอัพเดตฐานข้อมูลของคุณทางโทรศัพท์อาจใช้เวลาสักครู่ในการเชื่อมต่อที่ดี ในขณะที่เป็นเวลานานแล้วเงยหน้าขึ้นมองแพคเกจด้วยตนเอง (ก่อนที่จะฉลาด) สามารถใช้ชั่วโมง

ย้อนกลับไปที่ distros ถูกสร้างขึ้นแตกต่างกัน - ไม่มีการรวมอย่างต่อเนื่องไม่มีการทดสอบควัน (ดีไม่มากทดสอบเลย!) สร้างฟาร์มเพิ่งเริ่มต้น การอัพเกรดต้องถูกเปลี่ยนกลับบ่อยกว่าตอนนี้ ผู้ใช้หลายคนเลือกที่จะไม่อัพเกรดแพ็คเกจบางอย่างด้วยเหตุผลต่าง ๆ หรือเลือกเฉพาะการอัพเกรดบางอย่างในวันนี้ (เพื่อทดสอบด้วยตนเอง) และการอัพเกรดอื่น ๆ ในวันพรุ่งนี้

ในอีก 15 ปีข้างหน้าเครื่องมือจะไม่เปลี่ยนแปลงมากนักซึ่งเป็นเหตุผลว่าทำไมเรายังคงแยกจากกันupdateและupgradeดำเนินการ ใช้ขั้นตอนการทำงานมีการพัฒนาเป็นความน่าเชื่อถือ distro ได้ดีขึ้นและมากของแหล่งที่มา / ปรับปรุงการจัดการ / การปรับรุ่นที่ใช้จะได้รับคู่มือที่ซ่อนอยู่เบื้องหลังช้าชั้นของระบบอัตโนมัติ ( software-updater, unattended-upgrades)

การทำให้เครื่องมือแพคเกจซอฟต์แวร์มีความทันสมัยเป็นเหตุผลหนึ่งที่ Snaps และ AppImage และ Flatpack เพิ่งปรากฏ แต่นั่นคือบทต่อไป


2

พวกเขาทำสิ่งต่าง ๆ ด้วยเหตุผลหลายประการ

ตัวอย่างหนึ่งคือคำถามที่ฉันโพสต์และตอบตนเอง: จะลบ PPA โดยใช้ GUI ได้อย่างไร . บนหน้าจอนี้เราต้องการที่จะลบ PPAไม่ได้อัพเกรดซอฟต์แวร์:

ลบ PPA.png

หลังจากถอด PPA GUI sudo apt updateซอฟต์แวร์โดยอัตโนมัติวิ่ง หากคุณต้องการลบ PPA ออกจากบรรทัดคำสั่งคุณต้องเรียกใช้sudo apt update หลังจากลบ PPA ออกจากรายการแหล่งที่มา

หากไม่มีapt updateฟังก์ชั่นแยกจะไม่มีวิธีลบ PPA!


อีกตัวอย่างหนึ่งคือคุณต้องเรียกใช้sudo apt updateจากบรรทัดคำสั่งเพื่อรีเฟรชแหล่งที่มา จากนั้นคุณสามารถค้นหาสิ่งที่สามารถอัพเกรดได้โดยไม่ต้องอัพเกรดจริง:

$ apt list --upgradable
Listing... Done
conky-std/xenial 1.10.1-3 amd64 [upgradable from: 1.9.0-4]
google-chrome-stable/stable 65.0.3325.181-1 amd64 [upgradable from: 63.0.3239.132-1]
libxnvctrl0/xenial 390.48-0ubuntu0~gpu16.04.1 amd64 [upgradable from: 387.22-0ubuntu0~gpu16.04.1]
nvidia-settings/xenial 390.48-0ubuntu0~gpu16.04.1 amd64 [upgradable from: 387.22-0ubuntu0~gpu16.04.1]
peek/xenial 1.3.1-0~ppa23~ubuntu16.04.1 amd64 [upgradable from: 1.2.1-0~ppa20~ubuntu16.04.1]

เมื่อดูผลลัพธ์ที่คุณสามารถตัดสินใจได้ว่าจะให้แพ็คเกจ "ตรึง" หรือ "หยุดไว้" และไม่อัพเกรดในครั้งต่อไปที่มีการเรียกใช้งาน `sudo apt upgrade" หากมีกระบวนการ "อัปเดต / อัปเกรด" เดียวคุณจะสูญเสียความสามารถเหล่านี้ .

โดยไม่ต้องแยกจากกันapt updateคุณไม่สามารถเห็นสิ่งที่จะได้รับการอัพเกรด!


Para ที่สองเป็นเท็จ yumและdnfเรียกใช้การอัปเดตที่เทียบเท่าโดยอัตโนมัติเมื่อทำการดำเนินการที่เกี่ยวข้อง ตัวอย่างเช่นเทียบเท่าapt list --upgradableคือyum check-updateซึ่งจะอัพเดตรายการแพ็กเกจหากไม่ได้อัพเดตล่าสุด แน่นอนว่ามันเป็นไปได้ที่จะทำงานได้ดังที่เห็นได้จากผู้จัดการแพคเกจอื่น ๆ
muru

@muru ขึ้นอยู่กับคำตอบที่โหวต 238 ขึ้นอยู่ว่าคุณต้องทำงานsudo apt updateหลังจากลบที่เก็บ
WinEunuuchs2Unix

ส่วนที่สอง --- แยกจากนั้น
muru

ตอนนี้คุณพูดถึงมันแล้วนั่นก็เป็นเท็จ ดังที่เห็นได้จากตัวอย่างของyum/ dnfอีกครั้งการดำเนินการอัปเดตเป็นไปโดยอัตโนมัติดังนั้นแหล่งที่ถูกปิดใช้งานจะถูกลบออกจากการดำเนินการถัดไปโดยอัตโนมัติ อีกครั้งสิ่งที่เป็นไปได้ทั้งหมด
muru

@muru นอกจากนี้ในระบบของฉันอย่างน้อยค่าyumมิได้dnfมีการติดตั้ง การติดตั้งหนึ่งในนั้นเพื่อแทนที่จะapt updateเพิ่มค่าใช้จ่ายของระบบและเวลาเรียนรู้
WinEunuuchs2Unix

0

อาจถามว่าทำไมต้องดาวน์โหลดโปรแกรมจากที่เก็บ Ubuntu อย่างเป็นทางการaptแล้วติดตั้งหรือไม่ จะแตกต่างกันอย่างไรถ้าคุณดาวน์โหลดครั้งแรกแล้วติดตั้งแทนที่จะดาวน์โหลดและติดตั้งในการทำงานครั้งเดียว

ดีหลังจากที่ได้อ่านแสดงความคิดเห็นและความคิดเกี่ยวกับเรื่องนี้ผมเข้าใจว่านี่คือสาเหตุที่ปรัชญา Unixเป็นแบบแยกส่วนปรัชญาที่ว่าโดยทั่วไปว่า "แต่ละโปรแกรมไม่สิ่งหนึ่งที่" แรกดาวน์โหลดแล้วติดตั้ง --- การดำเนินการแต่ละกับโปรแกรมเฉพาะของตัวเอง .


0

ในการแจกจ่ายไม่มีสิ่งหนึ่งคำสั่งอัปเดตการอัปเกรดถ้ามีมันไม่มีอะไรนอกจากนามแฝงที่กำหนดไว้ล่วงหน้าเท่าที่ฉันเข้าใจ นามแฝงเหล่านั้นสามารถตั้งค่าบน Ubuntu ได้อย่างง่ายดายด้วยการแก้ไข ~ / .bashrc

การอัพเดตใช้เพื่อซิงโครไนซ์ที่เก็บข้อมูลอีกครั้งและแก้ไขปัญหาใด ๆ ที่นั่น จากนั้นเมื่อคุณอัปเกรดคุณจะอัพเกรดแพ็คเกจที่ติดตั้งไว้จริง ๆ แต่เมื่อคุณอัพเกรด Dist, คุณอัพเกรดเต็ม ใน Arch linux พวกเขาให้ความสำคัญกับการอัพเกรดแบบเต็มด้วย Syu คุณสามารถทำเช่นเดียวกันใน Ubuntu ในการอัปเกรดแบบเต็มคุณจะสามารถแก้ไขระบบการอ้างอิงที่ชาญฉลาดซึ่งอาจเกิดขึ้นในการอัพเกรดบางส่วน

หวังว่ามันจะช่วย โปรดแก้ตัวข้อความดิบเป็นลายลักษณ์อักษรทางโทรศัพท์


2
yumและdnfดำเนินการเทียบเท่าupdateกับการดำเนินการส่วนใหญ่โดยอัตโนมัติหากข้อมูลแคชเก่าพอ ดูตัวอย่างเช่นการสนทนาเกี่ยวกับการเปลี่ยนพฤติกรรมนั้นในdnf
muru
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.