Score:4

ติดตั้งจากไฟล์ที่มีเอาต์พุตจาก apt list --installed

ธง co

ฉันมีไฟล์ที่มีผลลัพธ์ของ รายการ apt -- ติดตั้ง จากเครื่องอื่น

เช่น.

accountsservice-ubuntu-schemas/focal,focal ตอนนี้ 0.0.7+17.10.20170922-0ubuntu1 ทั้งหมด [ติดตั้งอัตโนมัติ]
accountsservice/focal-updates,focal-security ตอนนี้ 0.6.55-0ubuntu12~20.04.5 amd64 [ติดตั้งอัตโนมัติ]
acl/focal ตอนนี้ 2.2.53-6 amd64 [ติดตั้งอัตโนมัติ]

...และอื่น ๆ

มีวิธีง่ายๆ ในการติดตั้งแพ็คเกจเหล่านี้โดยใช้ไฟล์และบรรทัดคำสั่งดังกล่าวหรือไม่?

muru avatar
us flag
คุณต้องการติดตั้งเวอร์ชันเฉพาะเหล่านี้หรือไม่?
Gigi Bayte 2 avatar
co flag
@muru นั่นเป็นคำถามที่ดีตราบใดที่ทุกอย่างในรายการแพ็คเกจมีการดูแลการขึ้นต่อกัน ฉันก็โอเคถ้าเวอร์ชันเดียวกันหรือใหม่กว่า (ตามที่เป็นอยู่ สามารถสันนิษฐานได้ว่าการพึ่งพาได้รับการดูแล)
Score:5
ธง us

คุณสามารถแยกส่วนก่อนส่วนแรกได้ / และใช้สิ่งนั้นกับ xargs เพื่อติดตั้งผ่าน ฉลาด:

xargs -a <(awk -F/ '{print $1}' บางไฟล์) apt install

หรือ:

awk -F/ '{พิมพ์ $1}' บางไฟล์ | xargs apt ติดตั้ง -y
Score:5
ธง zw

APT ระบุอย่างชัดเจนว่าไม่ได้ออกแบบมาเพื่อใช้กับสคริปต์:

การใช้สคริปต์และความแตกต่างจากเครื่องมือ APT อื่นๆ
เดอะ ฉลาด(8) บรรทัดคำสั่งได้รับการออกแบบให้เป็นเครื่องมือของผู้ใช้ปลายทาง และอาจเปลี่ยนลักษณะการทำงานระหว่างเวอร์ชันต่างๆ แม้ว่าจะพยายามไม่ทำลายความเข้ากันได้แบบย้อนกลับ แต่ก็ไม่รับประกันเช่นกันหากการเปลี่ยนแปลงดูเหมือนจะเป็นประโยชน์สำหรับการใช้งานแบบโต้ตอบ

คุณสมบัติทั้งหมดของ ฉลาด(8) มีอยู่ในเครื่องมือ APT โดยเฉพาะ เช่น ฉลาดรับ(8) และ ฉลาดแคช(8) เช่นกัน ฉลาด(8) เพียงแค่เปลี่ยนค่าเริ่มต้นของบางตัวเลือก (ดู apt.conf(5) และโดยเฉพาะขอบเขตไบนารี) ดังนั้นคุณควรเลือกใช้คำสั่งเหล่านี้ (อาจเปิดใช้ตัวเลือกเพิ่มเติมบางอย่าง) ในสคริปต์ของคุณ เนื่องจากคำสั่งเหล่านี้รักษาความเข้ากันได้แบบย้อนหลังไว้ให้มากที่สุด

คุณกำลังใช้เครื่องมือที่ไม่ถูกต้อง วิธีที่ดีกว่าคือการใช้ dpkg ตัวเอง:

dpkg -l | awk '$1 == "ii" {พิมพ์ $2}' > ติดตั้งแล้ว
sudo apt-get install $(ติดตั้ง cat)

รายละเอียด:

โดยวิธีการนี้ดูใจแคบ (เหมือนในคู่มือดีๆ นี้ บนชุมชน). คุณกำลังสูญเสียข้อมูลจำนวนมาก - ต้นกำเนิดของแพ็คเกจและคีย์ GPG
ยิ่งไปกว่านั้น วิธีการนี้จะล้มเหลวในการเกิดขึ้นครั้งแรกของแพ็คเกจที่ติดตั้งในเครื่องหรือแพ็คเกจที่ติดตั้งจาก PPA บางตัวที่ไม่มีอยู่ในเครื่องที่สอง


หากคุณต้องการบริการแบบรวมทุกอย่าง - ลองของฉัน สคริปต์หลาม ชื่อ srssud (บันทึก/กู้คืนสคริปต์รายการซอฟต์แวร์สำหรับ Ubuntu และทรัพยากรหัวข้อ Debian)
มันจะบันทึกที่เก็บ APT ทั้งหมด, คีย์ GPG ของพวกเขา; รายการ Snaps, Flatpaks และ Ubuntu สร้างแอพเป็นไฟล์ JSON ตั้งแต่เครื่องแรก
จากนั้นคุณสามารถกู้คืนรายการนี้โดยใช้ไฟล์ JSON เดียวกันในเครื่องที่สอง

marcelm avatar
cn flag
ฉันชอบที่คุณพูดว่าการใช้ `apt` ไม่ได้มีไว้สำหรับการแยกวิเคราะห์เครื่องโดยตรง จากนั้นคุณใช้การเรียก `dpkg` ที่ต้องใช้ตัวกรองสองขั้นตอนก่อนที่จะแยกวิเคราะห์ได้ :P - คุณลองพิจารณา `dpkg --get-selections ` / `dpkg --set-selections`?
Nate T avatar
it flag
ฉันไปกับ apt เพื่อแก้ไขข้อผิดพลาดในกรณีของแพ็คเกจที่ติดตั้งแล้ว ฉันจำไม่ได้ว่าการเรียกใช้ `dpkg` โดยตรงในอินสแตนซ์เหล่านี้จะเกิดข้อผิดพลาดหรือไม่ แต่ฉันรู้แน่นอนว่า apt จะเพิกเฉยต่อสิ่งเหล่านี้ พูดตามตรง คำเตือนของ Apt ไม่เคยสมเหตุสมผลสำหรับฉันเลย พวกเขาบ่นว่าการอัปเดตอาจทำลายการใช้งานปัจจุบัน แต่นั่นก็เป็นความจริงสำหรับซอฟต์แวร์ใดๆ นี่คือเหตุผลทั้งหมดที่ทำให้ระบบการกำหนดเวอร์ชัน `X.X.XX` ของเราแยกความแตกต่างระหว่างการเปลี่ยนแปลงที่หยุดและการเปลี่ยนแปลงที่ไม่หยุด
bac0n avatar
cn flag
@NateT เอาต์พุตจาก `apt ' นั้นไวต่อโลแคล
Nate T avatar
it flag
@bac0n ฉันเข้าใจ นั่นสมเหตุสมผลแล้ว ดีแล้วที่รู้. ฟังก์ชันตามโลแคลถูกรวมเข้ากับตรรกะ apt-get หรือเพียงแค่ส่วนต่อประสาน
Score:1
ธง it

เมื่อเร็ว ๆ นี้ฉันได้เขียนสคริปต์ในเครื่องของฉันเองซึ่งโดยหลักแล้วทำอย่างนั้น ฉันทำได้โดยท่อแรกไปที่ sed 's/\/.*//g' เพื่อลบทุกอย่างหลังจากเครื่องหมายทับ จากนั้นเอาต์พุตจะถูกส่งต่อไปยัง xargs /usr/bin/sudo apt ติดตั้ง.

ตามที่ @N0rbert กล่าวถึงวิธีแก้ปัญหาของเขา/เธอ จุดอ่อนหลักที่นี่คือมันใช้กรณีข้อผิดพลาดเพียงกรณีเดียว (เช่น repo ที่ขาดหายไปใน source.list) เพื่อหยุดการทำงานทั้งหมด ดังนั้น หากคุณกำลังใช้ไฟล์ต้นทางที่แตกต่างจากระบบที่สร้างอินพุต โซลูชันที่คุณใช้จะต้องตรวจสอบก่อนว่า pkg นั้นพร้อมใช้งานกับระบบของคุณหรือไม่ โดยทั่วไป ทางเลือกของคุณจะขึ้นอยู่กับกรณีการใช้งานที่คุณต้องการ

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

หมายเหตุสองสามข้อ: คุณไม่จำเป็นต้องกังวลเกี่ยวกับการตรวจสอบว่ามีการติดตั้งแพ็คเกจในเครื่องของคุณแล้วหรือไม่ ถ้าเป็นเช่นนั้น apt ก็จะข้ามมันไป นอกจากนี้ เนื่องจากคุณมักจะติดตั้งแพ็คเกจไม่กี่ชุดเมื่อใช้งาน จึงเป็นความคิดที่ดีที่จะเริ่มต้นด้วย อัปเดต sudo apt && อัปเกรด sudo apt สั่งการ. วิธีนี้จะช่วยให้คุณไม่ต้องดาวน์โหลดแพ็คเกจจำนวนมากเพื่อลงเอยด้วยการดาวน์โหลดเวอร์ชันที่ใหม่กว่าเล็กน้อยสำหรับหลาย ๆ แพ็คเกจในภายหลัง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา