มีคำสั่ง apt เพื่อดาวน์โหลดไฟล์ deb จากที่เก็บไปยังไดเรกทอรีปัจจุบันหรือไม่?


45

ฉันมักจะสนใจทริกเกอร์การติดตั้ง (postinst, postrm) หรือบางส่วนของแพ็คเกจ (เช่น/usr/shareและ/etc) ขณะนี้ฉันกำลังเรียกใช้คำสั่งถัดไปเพื่อดึงรหัสต้นฉบับ:

apt-get source [package-name]

ข้อเสียคือไฟล์นี้มักจะมีขนาดใหญ่กว่าแพคเกจไบนารีและไม่สะท้อนถึงต้นไม้การติดตั้ง

ตอนนี้ฉันกำลังดาวน์โหลดแพ็คเกจผ่านhttp://packages.ubuntu.com/ :

  1. ค้นหา [package-name]
  2. เลือกแพ็คเกจ
  3. คลิกที่ amd64 / i386 เพื่อดาวน์โหลด
  4. ดาวน์โหลดไฟล์จริง

สิ่งนี้ใช้เวลานานเกินไปสำหรับฉันและในฐานะคนที่ชอบเปลือกหอยจริงๆฉันต้องการทำบางสิ่งเช่นคำสั่ง( จินตภาพ ) ถัดไป:

apt-get get-deb-file [package-name]

ฉันไม่สามารถหาอะไรเช่นนี้ในapt-get หน้าคู่มือ สิ่งที่ฉันพบมากที่สุดคือ--download-onlyสวิตช์ แต่สิ่งนี้ทำให้แพ็คเกจ/var/cache/apt/archives(ซึ่งต้องมีการอนุญาตรูท) และไม่ได้อยู่ในไดเรกทอรีปัจจุบัน


ความแตกต่างของเครื่องที่ไม่มีการบันทึกไฟล์: ssh debianmachine1 "dpkg --get-selections" | diff - <(dpkg - get-selections)
Scott Robert Schreckengaust

คุณสามารถใช้จากแพคเกจdebget debian-goodies
Shayan

คำตอบ:


58

คุณสามารถใช้downloadคำสั่งย่อยของapt, หรือapt-get aptitudeตัวอย่างเช่นถ้า$ PKGเป็นแพ็คเกจที่คุณต้องการสิ่งเหล่านี้จะทำ:

apt-get download $PKG
apt download $PKG
aptitude download $PKG

สิ่งนี้ไม่ต้องการสิทธิ์พิเศษ เดียวกันสามารถประมาณการใช้apt-getและwget:

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2)

อย่างไรก็ตามสิ่งนี้จะดึงแพคเกจทั้งหมดที่จำเป็นในการติดตั้งแพคเกจดังนั้นคุณสามารถลอง จำกัด ได้:

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2 | grep "/${PKG}_")

คุณยังสามารถใส่บรรทัด wget ลงในฟังก์ชันเพื่อใช้เป็นคำสั่ง apt-download พร้อมชื่อแพ็คเกจเป็นพารามิเตอร์:

function apt-download { wget -c $(apt-get install --reinstall --print-uris -qq $1 | cut -d"'" -f2); }

หมายเหตุการแก้ไข: $ PKG จะถูกแทนที่ด้วย $ 1 และพารามิเตอร์ -c ช่วยให้การดาวน์โหลดขัดจังหวะอย่างต่อเนื่อง


1
ยอดเยี่ยมนี่คือสิ่งที่ฉันกำลังมองหา อีกเหตุผลหนึ่งที่จะให้ความถนัดในระบบของฉันคำสั่งมีประโยชน์อื่น ๆ ที่ไม่ได้จัดไว้ให้โดยมีapt aptitude changelog $PKG
Lekensteyn

4
ปรับปรุง: จาก Natty (เวอร์ชั่น 0.8.11 ฉลาดจะแม่นยำ) ที่aptitude downloadมีคุณลักษณะที่มีอยู่ในเช่นกัน:apt apt-get download $PKG
Lekensteyn

อ่อนหวานทำงานได้แม้จะเป็น apt โบราณของฉัน v0.8.10
rogerdpack

ดูเหมือนว่าพวกเขาจะออกไปพร้อมกับตัวเลือก
--print

ตัวเลือก
--print

8
sudo apt-get -o dir::cache::archives="/path/to/folder/" -d install package

บันทึก:

คุณต้องสร้างโฟลเดอร์ชื่อบางส่วนในโฟลเดอร์ปลายทาง


ไม่ฟังดูแย่ขนาดนั้น man apt.confตัวเลือกที่ดูเหมือนว่าจะอธิบายได้ด้วย ฉันต้องการหลีกเลี่ยงการสร้างโฟลเดอร์
Lekensteyn

ฉันแค่อยากรู้อยากเห็นทำไมคุณจะหลีกเลี่ยงการสร้างโฟลเดอร์?
mount.cifs

ฉันไม่จำเป็นต้องจัดเก็บแพคเกจตลอดไปและหลีกเลี่ยงการสร้างโฟลเดอร์ประหยัดเวลาด้วย
Lekensteyn

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

5

ใน Ubuntu 14.04 ( aptเวอร์ชั่นแพคเกจ1.0.1ubuntu2ผมเชื่อว่า) apt-getรวมถึงdownloadคำสั่งในการดาวน์โหลดแพคเกจที่กำหนดเช่นเดียวกับ.debในไดเรกทอรีปัจจุบัน

ตัวอย่างเช่นสมมติว่าเราต้องการดาวน์โหลดตัวจัดการไฟล์Ranger:

$ apt-get download ranger

ผลลัพธ์ใน:

$ ls . | grep ranger
ranger_1.6.0-1_all.deb

มันสมบูรณ์แบบ โซลูชันอื่น ๆ ทั้งหมดที่ฉันพยายามใช้ไม่ทำงานหากapt installไม่สามารถปฏิบัติตามข้อกำหนดการพึ่งพาทั้งหมดได้ ฉันแค่ต้องการไฟล์. deb สำหรับการซ่อมแซม!
Raziel

3

หากคุณต้องการดาวน์โหลดแพ็คเกจ deb ทั้งหมดจากรายการคุณสามารถทำได้:

cat path/to/text/file.txt | xargs apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2 | xargs wget

เพียงใส่ชื่อแพ็คเกจหนึ่งชื่อต่อบรรทัด กดไลค์ในไฟล์ requirements.txt ตัวอย่างเช่นมีเนื้อหาเช่นนี้:

apache2-mpm-event
curl
dmidecode
ethtool
libapache2-mod-wsgi
libapache2-mod-python

หวังว่านี่จะช่วยได้ ;)


2

sudo apt-get install devscripts

dget [package-name]


สิ่งนี้ไม่ได้ให้คำตอบสำหรับคำถาม หากต้องการวิจารณ์หรือขอคำชี้แจงจากผู้แต่งโปรดแสดงความคิดเห็นใต้โพสต์ของพวกเขา
s3lph

มันไม่ได้ให้คำตอบอย่างไร นี่เป็นการดาวน์โหลด deb จากไฟล์เก็บถาวรไปยังไดเรกทอรีปัจจุบัน นั่นไม่ใช่คำถามที่ถูกต้องใช่ไหม
Michael Terry

รายละเอียดเพิ่มเติมเล็กน้อยอาจมีประโยชน์ ในขณะที่เทคนิคนี้มีคุณสมบัติเป็นคำตอบคุณอาจต้องการให้มากกว่าสองคำสั่ง
s3lph

:: ยักไหล่ :: ต่างจากคำตอบอื่น ๆ ตรงนี้อันนี้ไม่มีคำแนะนำหรือคำเตือน มันเป็นคำตอบง่ายๆสำหรับคำถามที่ตรงไปตรงมา
Michael Terry

0

/var/cache/apt/archivesเป็นโลกที่อ่านได้ หลังจากนั้นapt-get -dให้แยกจากที่นั่นไปยังไดเรกทอรีบ้านของคุณ ทำงานdpkg -e /var/cache/apt/archives/foo_version.deb fooในขณะที่อยู่ในโฮมไดเร็กตอรี่ของคุณและไฟล์ควบคุมจะถูกเททิ้งfoo/.


ฉันคิดว่าปัญหาของวิธีนี้คือการดาวน์โหลดยังต้องการสิทธิ์ระดับผู้ดูแล ดูเหมือนว่าโง่ไปสุดขั้วเพียงเพื่อรับไฟล์ในไดเรกทอรีบ้านของคุณ
ændrük

การเปิดไฟล์. deb นั้นไม่ใช่ปัญหา อาจเป็นข้อผิดพลาดหรือไม่ แต่แพ็คเกจใน / var / cache / apt / archives` ได้รับผลกระทบจาก umask ด้วย ฉันได้ตั้งค่า umask เป็น 027 ดังนั้นจึง/var/cache/apt/archivesไม่สามารถอ่านแพ็คเกจใน /tmpขณะที่ผมต้องการเพียงเพื่อตรวจสอบเนื้อหาแพคเกจผมก็ต้องดาวน์โหลดครั้งเดียวที่จะ
Lekensteyn

0

คุณสามารถใช้คำสั่งซึ่งรวมอยู่ในแพคเกจdebgetdebian-goodies

ติดตั้งด้วย:

sudo apt install debian-goodies

ดาวน์โหลดแพ็คเกจโดยใช้:

debget <package_name>

ตัวอย่างเช่น:

debget debian-goodies

ซึ่งจะดาวน์โหลดdebian-goodies_0.79_all.debในไดเรกทอรีปัจจุบันของคุณ (ทำpwdเพื่อพิมพ์ไดเรกทอรีทำงานปัจจุบันของคุณ)


debian-goodiesมาพร้อมกับคำสั่งที่มีประโยชน์มากมายดูเพิ่มเติมที่: askubuntu.com/a/1170001/777279
Shayan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.