ใน Gentoo มีไฟล์/var/lib/portage/world
ที่มีแพ็คเกจที่ฉันติดตั้งไว้อย่างชัดเจน โดยชัดแจ้งฉันหมายถึงแพ็คเกจที่ฉันเลือกไม่รวมสิ่งที่ติดตั้งเป็นค่าเริ่มต้นหรือถูกอ้างอิงโดยการอ้างอิง
มีไฟล์ที่คล้ายกันหรือคำสั่งเพื่อค้นหาข้อมูลใน Ubuntu หรือไม่?
ใน Gentoo มีไฟล์/var/lib/portage/world
ที่มีแพ็คเกจที่ฉันติดตั้งไว้อย่างชัดเจน โดยชัดแจ้งฉันหมายถึงแพ็คเกจที่ฉันเลือกไม่รวมสิ่งที่ติดตั้งเป็นค่าเริ่มต้นหรือถูกอ้างอิงโดยการอ้างอิง
มีไฟล์ที่คล้ายกันหรือคำสั่งเพื่อค้นหาข้อมูลใน Ubuntu หรือไม่?
คำตอบ:
aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \
| cut -f1 | sort -u > defaultinstalled.txt
comm -23 currentlyinstalled.txt defaultinstalled.txt
วิธีหนึ่งที่จะคิดเกี่ยวกับปัญหานี้คือการแบ่งสิ่งนี้ออกเป็นสามส่วน:
ดูเหมือนว่าคำสั่งต่อไปนี้จะทำงานบนระบบของฉัน:
$ aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
วิธีการที่คล้ายกันสามารถพบได้ในลิงค์ที่ Gilles โพสต์เป็นความคิดเห็นคำถาม บางแหล่งอ้างว่ามันใช้งานได้เฉพาะเมื่อคุณใช้ความสามารถในการติดตั้งแพ็คเกจเท่านั้น อย่างไรก็ตามฉันแทบไม่เคยใช้ความสามารถในการติดตั้งแพ็คเกจและพบว่ายังใช้งานได้ การ--disable-columns
ป้องกันความถนัดจากการขยายของชื่อแพ็กเกจด้วยช่องว่างที่จะขัดขวางการเปรียบเทียบด้านล่าง | sort -u
ประเภทไฟล์และลบที่ซ้ำกัน ทำให้ขั้นตอนสุดท้ายง่ายขึ้นมาก
หมายเหตุ:ส่วนนี้เริ่มต้นด้วย 'เส้นทางที่ผิด' ที่ฉันคิดว่าเป็นตัวอย่าง รหัสชิ้นที่สองคือรหัสที่ใช้งานได้
นี่มันช่างค่อนข้างหลอกลวง ฉันเริ่มคิดว่าการประมาณที่ดีจะเป็นแพ็คเกจทั้งหมดที่ขึ้นอยู่กับ meta-packages ubuntu-minimal, ubuntu-standard, ubuntu-desktop, และ linux kernel ที่เกี่ยวข้องกับแพ็คเกจต่างๆ ผลลัพธ์เล็กน้อยในการค้นหาของ Google ดูเหมือนจะใช้วิธีนี้ ในการรับรายการการขึ้นต่อกันเหล่านี้ฉันลองทำสิ่งต่อไปนี้ก่อน (ซึ่งไม่ได้ผล):
$ apt-cache depends ubuntu-desktop ubuntu-minimal ubuntu-standard linux-* | awk '/Depends:/ {print $2}' | sort -u
ดูเหมือนว่าจะไม่ใช้แพ็คเกจที่ฉันรู้ว่าต้องมาตามค่าเริ่มต้น ฉันยังเชื่อว่าวิธีนี้ควรใช้งานได้หากมีการสร้างรายการ metapackages ที่ถูกต้อง
อย่างไรก็ตามดูเหมือนว่ามิร์เรอร์ของ Ubuntu จะมีไฟล์ "manifest" ที่มีแพ็คเกจทั้งหมดในการติดตั้งเริ่มต้น รายการสำหรับ Ubuntu 12.04.3 อยู่ที่นี่:
http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest
หากคุณค้นหาผ่านหน้านี้ (หรือหน้ากระจกใกล้กับคุณ):
http://mirror.pnl.gov/releases/precise/
คุณควรจะสามารถค้นหาไฟล์ ".manifest" ที่สอดคล้องกับรุ่นและสถาปัตยกรรมที่คุณใช้ เพื่อแยกชื่อแพคเกจฉันทำสิ่งนี้:
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f1 | sort -u > defaultinstalled.txt
รายการน่าจะเรียงแล้วและไม่ซ้ำกัน แต่ฉันต้องการให้แน่ใจว่าเรียงลำดับอย่างถูกต้องเพื่อทำให้ขั้นตอนต่อไปง่ายขึ้น defaultinstalled.txt
จากนั้นผมก็ใส่เอาท์พุทใน
นี่เป็นส่วนที่ง่ายที่สุดเนื่องจากระบบที่เหมือน Unix ส่วนใหญ่มีเครื่องมือมากมายในการทำเช่นนี้ comm
เครื่องมือที่เป็นหนึ่งในหลายวิธีที่จะทำเช่นนี้:
comm -23 currentlyinstalled.txt defaultinstalled.txt
นี่ควรพิมพ์รายการของบรรทัดที่ไม่ซ้ำกับไฟล์แรก ดังนั้นจึงควรพิมพ์รายการแพคเกจที่ติดตั้งไม่ได้อยู่ในการติดตั้งเริ่มต้น
http://releases.ubuntu.com/releases/trusty/ubuntu-14.04-desktop-amd64.manifest
และเพิ่มเติม| sed "s/ *$//"
แต่ก็ยังไม่มีลูกเต๋า
apt-mark showmanual | sort -u
ดังแสดงในคำตอบอื่น ๆ เรียบง่ายและไม่พึ่งพาaptitude
ซึ่งไม่ได้ติดตั้งไว้ตามค่าเริ่มต้น
คุณสามารถใช้หนึ่งในสอง liners อย่างใดอย่างหนึ่ง ทั้งคู่ให้ผลลัพธ์ที่เหมือนกันบนเครื่องของฉันและแม่นยำกว่าโซลูชันทั้งหมดที่เสนอจนถึงตอนนี้ (กรกฎาคม 2014) ในคำถามนี้ พวกเขามีการรวมกันของสองคำตอบ(1)และ(2) โปรดทราบว่าฉันเดิมโพสต์คำตอบนี้ที่นี่
การใช้apt-mark
:
comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
การใช้aptitude
:
comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
แพคเกจน้อยมากยังคงตกอยู่ในรอยแตกแม้ว่าฉันจะสงสัยว่ามีการติดตั้งโดยผู้ใช้จริง ๆ ไม่ว่าหลังจากติดตั้งผ่านการตั้งค่าการแปลภาษาหรือเช่นผ่านตัวติดตั้งตัวแปลงสัญญาณ Totem นอกจากนี้เวอร์ชันลินุกซ์ส่วนหัวก็ดูเหมือนจะสะสมแม้ว่าฉันจะติดตั้ง metapackage ที่ไม่เฉพาะเจาะจงกับรุ่นเท่านั้น ตัวอย่าง:
libreoffice-help-en-gb
openoffice.org-hyphenation
gstreamer0.10-fluendo-mp3
linux-headers-3.13.0-29
มันทำงานยังไง
sed
แถบเพิ่มเติมจะเหลือพื้นที่ว่างที่ท้ายบรรทัดความเป็นไปได้อื่น ๆ ก็ใช้งานไม่ได้เช่นกัน:
ubuntu-14.04-desktop-amd64.manifest
ไฟล์ ( ที่นี่สำหรับ Ubuntu 14.04) /var/log/installer/initial-status.gz
แทน แพคเกจเพิ่มเติมจะแสดงเป็นติดตั้งด้วยตนเองแม้ว่าจะไม่apt-mark showauto
ตัวอย่างเช่นไม่มีแพ็คเกจ xserver-xorg ในขณะที่ไฟล์อื่นทำ/var/log/installer/initial-status.gz
apt-mark
แสดงรายการแพ็กเกจมากกว่าโซลูชันด้านบน
นี่คือตัวอย่างผลลัพธ์ของcat /var/log/apt/history.log
:
Start-Date: 2011-01-22 00:43:38
Commandline: apt-get --target-release experimental install libdbus-1-dev
Upgrade: libdbus-1-3:i386 (1.4.0-1, 1.4.1-1), libdbus-1-dev:i386 (1.4.0-1, 1.4.1-1)
End-Date: 2011-01-22 00:43:48
Start-Date: 2011-01-23 01:16:13
Commandline: apt-get --auto-remove purge webcheck
Purge: python-utidylib:i386 (0.2-6), python-beautifulsoup:i386 (3.1.0.1-2), libtidy-0.99-0:i386 (20091223cvs-1), webcheck:i386 (1.10.3)
End-Date: 2011-01-23 01:16:31
สำหรับคำถามของคุณให้กรองข้อมูลด้วย grep ( cat /var/log/apt/history.log | grep Commandline
)
โปรดทราบว่าไฟล์เหล่านี้หมุนได้ดังนั้นโปรดตรวจสอบไฟล์อื่น ๆ เพื่อไม่ให้คุณพลาดอะไร:
$ ls /var/log/apt/history.log*
-rw-r--r-- 1 root root 69120 2011-01-23 18:58 /var/log/apt/history.log
-rw-r--r-- 1 root root 19594 2011-01-01 02:48 /var/log/apt/history.log.1.gz
หมายเหตุ :
Commandline
ดังนั้นgrep
เคล็ดลับจะไม่ทำงานกับพวกเขาaptitude
และผู้จัดการแพ็คเกจอื่น ๆ หากบันทึกของคุณหมุนไปแล้วคุณก็จะโชคไม่ดี
ฉันเจอผู้เผยแพร่รายนี้ที่สวยงามในขณะที่กำลังค้นหาข้อความค้นหานี้
ซับเดียวคือ
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) \
)`
oneliner นี้กรองแพ็กเกจที่ติดตั้งโดยระบบโดยใช้บันทึกจาก /var/log/installer/initial-status.gz
ฉันจะโพสต์ลิงก์ไปยังเธรดเดิมเมื่อฉันพบมันเนื่องจากผู้เผยแพร่รายนี้ไม่ใช่ของฉันและฉันไม่สามารถจำตำแหน่งที่ฉันเห็นได้
คุณต้องการที่จะมีลักษณะที่เกี่ยวข้องในบทความนี้
ในตอนท้ายของบทความมีสคริปต์ python ที่ควรทำในสิ่งที่คุณต้องการ
มันถูกเขียนขึ้นสำหรับ(k) อูบุนตู แต่ควรทำงานกับUbuntuเช่นกัน
/var/lib/apt/extended_states
นอกจากนี้คุณยังอาจดูไฟล์
cat /var/lib/apt/extended_states | grep -B2 'Auto-Installed: 0'
สิ่งนี้มีประโยชน์หากคุณต้องการทราบว่าติดตั้งอะไรในพาร์ติชั่นเก่า
ขอบคุณมากและขอแสดงความยินดีกับผู้ที่ได้รับอัญมณีแห่งสคริปต์ !!!
ฉันต้องการเพิ่ม 2 ¢ของฉันและฉันติดวันที่ติดตั้งที่ฉันอนุมานจาก $ info
ฉันไม่เข้าใจรายละเอียดว่าเหตุใดไฟล์ $ info จึงถูกอัปเดตหรือไม่และเมื่อใด แต่ใช้งานได้จริง
สคริปต์ของฉันแสดงรายการอัปเดตล่าสุดของแพคเกจไม่ขึ้นต่อกันที่เพิ่มหลังจากการติดตั้ง
ให้มันตรวจสอบเป็นระยะฉันเห็นสิ่งที่ฉันจะเข้าสู่ระบบด้วยตนเองโดยไม่พลาดเดียว
นั่นคือชุดของแพ็กเก็ตที่ติดตั้งด้วยเหตุผลเดียวกัน น่าเสียดายที่การอัปเดตทำให้คำสั่งนั้นหยุดชะงัก
หลังจากอัปเกรดระบบฉันมีรายการแพ็กเกจที่เพิ่มซึ่งการอัปเกรดไม่ได้อัปเดตตามด้วยแพ็กเกจที่ทำ
เรียบร้อย! สนุก.
info='/var/lib/dpkg/info/'
comm -13 > /tmp/packages \
<(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) \
)
while read n; do
echo $(ls -ltr --time-style=long-iso $info$n.* $info$n:i386.* $info$n:amd64.* 2>/dev/null \
| tail -n 1 | perl -pe 's/.*([0-9]{4}?-.*:[0-9]{2}?).*/\1/') $n
done < /tmp/packages | sort
aptitude search '~i!~M' -F %p
ไม่ได้?