ฉันไม่เห็นวิธีแก้ปัญหาใด ๆ ที่นี่ใช้ได้สำหรับฉันฉันได้ติดตั้งแพ็กเกจ deb จำนวนมากด้วย dpkg และบางรายการที่ฉันกำลังมองหาโดยเฉพาะนั้นขาดหายไป
ซับที่ค่อนข้างยาว แต่สะดวกในการคัดลอกและวาง:
export DPKG_INITIAL=$(mktemp) DPKG_INSTALLED=$(mktemp) DPKG_CUSTOM=$(mktemp) DPKG_DEPS=$(mktemp) zgrep -E '^Package' /var/log/installer/initial-status.gz | awk '{ print $2 }' > $DPKG_INITIAL ; awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -u > $DPKG_INSTALLED ; comm -23 installed initial > $DPKG_CUSTOM ; function rdep() { apt-cache rdepends $1 | tail -n +3 | sed -e 's/^ //' -e '/^ /d' | cut -d':' -f1 | sort -u; } ; echo "$(for i in $(cat custom) ; do rdep $i ; done)" | sort -u > $DPKG_DEPS ; comm -23 custom deps > my-packages ; rm $DPKG_INITIAL $DPKG_INSTALLED $DPKG_CUSTOM $DPKG_DEPS
my-packages
คำสั่งดังกล่าวจะบันทึกรายการของแพคเกจไปยังแฟ้มในไดเรกทอรีที่ทำงานปัจจุบันของคุณชื่อ
คำอธิบาย
ฉันแรกสร้างรายการของแพคเกจที่ประกอบด้วยพื้นฐานของแพคเกจที่เลือกระหว่างการติดตั้ง
zgrep -E '^Package' /var/log/installer/initial-status.gz | awk '{ print $2 }' > initial
ตามด้วยรายการยาว ๆ ที่ติดตั้งโดยทั่วไป
awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -u > installed
ฉันเปรียบเทียบทั้งสองไฟล์initial
แล้วและinstalled
แสดงเฉพาะรายการที่ไม่ซ้ำกับที่ติดตั้ง
comm -23 installed initial > custom
จากที่นั่นฉันต้องการกรองการพึ่งพานี่คือที่วิธีนี้อาจพลาดแพ็คเกจที่ต้องการบางอย่างมันไม่รู้การพึ่งพาที่ติดตั้งไว้อย่างชัดเจนด้วย
ฉันเขียนฟังก์ชันทุบตีด่วนเพื่อย่อขั้นตอนนี้ในการประมวลผลรายการเหล่านี้
function rdep() { apt-cache rdepends $1 | tail -n +3 | sed -e 's/^ //' -e '/^ /d' | cut -d':' -f1 | sort -u; }
หลังจากนั้นฉันผ่านแต่ละบรรทัดจากแฟ้มของฉันในการทำงานนี้กับcustom
xargs
echo "$(for i in $(cat custom) ; do rdep $i ; done)" | sort -u > deps
เมื่อฉันมีรายการที่ยาวนานของการพึ่งพาที่เป็นไปได้ทุกอย่าง (ไม่แน่ใจในคำสั่งที่เป็นไปได้ทั้งหมด) ฉันจะได้บรรทัดที่ไม่ซ้ำกับไฟล์เดี่ยวอีกครั้ง
comm -23 custom deps > manual
และรายการแพคเกจที่เสร็จสมบูรณ์ของฉันตอนนี้อยู่ในไฟล์ชื่อmanual
พร้อมให้ฉันตรวจสอบแล้ว
something
และไม่something-common
เช่นกัน