มีวิธีใดบ้างที่จะรับรายการแพ็คเกจทั้งหมดที่ผู้ใช้ติดตั้งบนระบบ Ubuntu เช่นแพ็คเกจที่ติดตั้งไว้ด้านบนของแพ็คเกจเริ่มต้นที่ติดตั้งไว้หรือไม่
(ความคิดคือการได้รับรายการที่ครอบคลุมที่สามารถใช้ในการติดตั้งแพคเกจเดียวกันในการติดตั้ง Ubuntu สะอาด)
มีวิธีใดบ้างที่จะรับรายการแพ็คเกจทั้งหมดที่ผู้ใช้ติดตั้งบนระบบ Ubuntu เช่นแพ็คเกจที่ติดตั้งไว้ด้านบนของแพ็คเกจเริ่มต้นที่ติดตั้งไว้หรือไม่
(ความคิดคือการได้รับรายการที่ครอบคลุมที่สามารถใช้ในการติดตั้งแพคเกจเดียวกันในการติดตั้ง Ubuntu สะอาด)
คำตอบ:
ดูไฟล์เหล่านี้
/var/log/installer/initial-status.gz
' - การติดตั้งหลักของคุณ
/var/log/dpkg.log
' ระยะเวลาการปรับปรุง (นี้คือสิ่งที่คุณต้องการ)/var/log/apt/term.log
' - สิ่งต่าง ๆ ได้apt
รับการปรับปรุงในระบบของคุณ/var/cache/apt/archives/'
จะมีdeb
แพ็คเกจที่ดาวน์โหลดมาเพื่อติดตั้งอัปเดต: ใช้สองขั้นตอนต่อไปนี้สำหรับรายการการติดตั้งใหม่ที่แน่นอน:
grep -w install /var/log/dpkg.log > full-list.log
/var/log/installer/initial-status.gz
เวลาประทับเนื่องจากคุณต้องการติดตั้งใหม่ทั้งหมดในระบบอื่นด้วยแพ็คเกจเหล่านี้คุณสามารถคัดลอกไฟล์ 'deb' จากเส้นทาง 'cache / apt / archives' ไปยังการติดตั้งใหม่และติดตั้งในภาพเดียว (โดยไม่ต้องดาวน์โหลด พวกเขาอีกครั้ง)
สำหรับรอยยิ้มฉันได้รวบรวมหนึ่งซับ (ที่นี่แยกเพื่อความชัดเจน) ที่คิดออกแพคเกจติดตั้งด้วยตนเองไม่รวมที่ติดตั้งครั้งแรกและแพคเกจใด ๆ ที่ติดตั้งโดยอัตโนมัติ:
comm -13 \
<(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
<(comm -23 \
<(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
<(apt-mark showauto | sort) \
)
นี้ทำงานได้ทั้งในและbash
zsh
libtiff
, libxcb
ฯลฯ ซึ่งผมไม่ได้ติดตั้งตัวเอง คำตอบนี้: superuser.com/a/105000/24349ดูแลโดยการเรียงลำดับตามเวลาการติดตั้งและลบทุกอย่างก่อนเวลาติดตั้งระบบ ยอดเยี่ยม (ab) ใช้เปลือก!
จากข้อมูลข้างต้นฉันเขียนสคริปต์ Python สั้น ๆ เพื่อแสดงรายการแพ็คเกจที่ติดตั้งด้วยตนเอง ดูลิงค์นี้
อย่าลังเลที่จะใช้มันแม้ว่าฉันจะไม่รับผิดชอบมัน อย่างไรก็ตามข้อเสนอแนะและข้อเสนอแนะยินดีต้อนรับเสมอ
ตรวจสอบคำตอบของฉันที่นี่สำหรับคำถามที่เกี่ยวข้อง: ฉันจะแสดงรายการของแพ็คเกจทั้งหมดที่ติดตั้งในระบบ Debian ของฉันได้อย่างไร . คำตอบอื่น ๆ ของคำถามประกอบด้วยคำแนะนำที่ดีในการรับรายการดังกล่าว
คำถามนี้ควรถูกทำเครื่องหมายซ้ำเนื่องจากคำถามก่อนหน้านี้ครอบคลุมคำถามนี้ด้วยเช่นกัน แต่อาจมีประโยชน์หากมีคำถามนี้อยู่ด้วยตนเองเพื่อให้ง่ายต่อการค้นหา
สมมติว่าคุณมีประวัติที่สอดคล้องและใช้ความถนัด:
history | grep -e "^..... aptitude install"
จะแสดงเฉพาะแพ็คเกจที่คุณติดตั้งด้วย aptitude install ... duh
นี่เป็นงานแฮ็ค แต่ใช้ได้ดี
ก่อนอื่นให้ไปที่http://releases.ubuntu.com/maverick/ (หรือ Ubuntu รุ่นใดก็ได้ที่คุณใช้) และคว้าส่วน*.manifest file
ที่เกี่ยวข้องกับรุ่นของ Ubuntu ที่คุณใช้อยู่
จากนั้นรันสคริปต์ต่อไปนี้ (แทนที่<manifest file>
วงเล็บมุมและทั้งหมดด้วยพา ธ ไปยังไฟล์ที่คุณดาวน์โหลดคุณสามารถผนวก> output
ท้ายเพื่อทำการดัมพ์ไฟล์ได้ตลอดเวลา
diff --suppress-common-lines <(sed 's/ .*//' <manifest file>) <(dpkg --get-selections | sed 's/[ \t].*//') | grep '>' | sed 's/[>] //'
ขอบคุณ geekosaur รหัสที่ดี ฉันใช้มัน แต่ใช้เวลาสักครู่กว่าจะหาวิธีทำให้มันใช้งานได้ นี่คือวิธีที่ฉันทำใน Ubuntu 11.10— ทำงานได้ใน bash terminal:
comm -13 \
<(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
<(comm -23 \
<(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
<(apt-mark showauto | sort) \
) > user-installed-packages
จากนั้นเพิ่มแท็บ\t
- และinstall
แต่ละบรรทัด:
sed 's/$/\tinstall/' user-installed-packages >uip
จากนั้นในเครื่องใหม่:
sudo dpkg --set-selections < uip
และเพื่อติดตั้งแพ็คเกจ:
sudo apt-get dselect-upgrade
อีกวิธีหนึ่งในการทำเช่นนี้คือการพิจารณาว่ามีการติดตั้งอะไรตาม "งาน" ของคุณซึ่งจะกำหนดแพ็คเกจพื้นฐานที่จะติดตั้งตามความต้องการเริ่มแรกของคุณ
tasksel --list-tasks
server
อย่างน้อยที่สุดคุณจะต้อง อย่างไรก็ตามคุณอาจเลือกที่จะมีมากขึ้น สำหรับแต่ละภารกิจที่คุณติดตั้งคุณสามารถรับรายการแพ็กเกจที่ติดตั้งคำสั่งต่อไปนี้ทำได้ทั้งหมดในหนึ่งบรรทัด (แยกย่อยเพื่อความชัดเจน) สำหรับงานที่ฉันเลือกในการติดตั้ง:
(tasksel --task-packages server ; \
tasksel --task-packages openssh-server ; \
tasksel --task-packages lamp-server) | sort | uniq
วิธีการทั่วไปด้านบนจะเป็น:
(for a in $( tasksel --list-tasks | grep "^i" | awk '{ print $2 }' ) ; \
do tasksel --task-packages $a; done) | sort | uniq
ตอนนี้ใช้apt-cache depends --installed -i --recurse <packagename> | grep -v "^ "
เพื่อรับรายการการขึ้นต่อกันที่ใช้โดยแพ็คเกจทั้งหมดที่กำหนดไว้ในงาน สามารถทำได้ในหนึ่งบรรทัดดังนี้
apt-cache depends --installed -i --recurse \
$(for a in $( tasksel --list-tasks | \
grep "^i" | \
awk '{ print $2 }' ) ; \
do tasksel --task-packages $a; done) | grep -v "^ " | sort | uniq
รายการต่อไปนี้แสดงรายการแพ็กเกจทั้งหมดที่ติดตั้งในระบบของคุณ (ไม่รวมถึงการขึ้นต่อกัน)
dpkg --get-selections | grep "[[:space:]]install" | awk '{print $1}'
ตอนนี้ใช้comm
คำสั่งเพื่อค้นหาสิ่งที่อยู่ในรายการที่สองเท่านั้น (เช่นไม่สนใจคำสั่งที่อยู่ในไฟล์ทั้งสองและแค่ไฟล์แรก)
comm -13 <(apt-cache depends --installed -i --recurse \
$(for a in $( tasksel --list-tasks | \
grep "^i" | \
awk '{ print $2 }' ) ; \
do tasksel --task-packages $a; done) | grep -v "^ " | sort ) \
<( dpkg --get-selections | grep "[[:space:]]install" | \
awk '{print $1}' | sort)