ฉันกำลังค้นหาสิ่งที่คล้ายคลึงกับคำถามนี้: Zypper: ฉันจะแสดงแพคเกจทั้งหมดจากพื้นที่เก็บข้อมูลที่แน่นอนได้อย่างไร
ตั้งแต่ฉันอยู่บน Ubuntu ฉันต้องการโซลูชันที่ใช้ความถนัด: ฉันจะรับรายการแพคเกจที่ติดตั้งจากที่เก็บบางแห่งได้อย่างไร
ฉันกำลังค้นหาสิ่งที่คล้ายคลึงกับคำถามนี้: Zypper: ฉันจะแสดงแพคเกจทั้งหมดจากพื้นที่เก็บข้อมูลที่แน่นอนได้อย่างไร
ตั้งแต่ฉันอยู่บน Ubuntu ฉันต้องการโซลูชันที่ใช้ความถนัด: ฉันจะรับรายการแพคเกจที่ติดตั้งจากที่เก็บบางแห่งได้อย่างไร
คำตอบ:
การใช้ความถนัดเพื่อที่จะมองหาแพ็คเกจที่ติดตั้งอยู่นอกสาขาที่มั่นคงคุณสามารถใช้:
aptitude search "?narrow(?installed,?not(?archive(stable)))"
หากต้องการดูเวอร์ชันรวมถึงชื่อแพ็คเกจ (และแทนที่จะเป็นคำอธิบาย) คุณสามารถใช้คำสั่งพร้อมตัวเลือกการจัดรูปแบบ ( -F
สั้น ๆ ) ดังนี้
aptitude search -F "%p %V %v" "?narrow(?installed,?not(?archive(stable)))"
สำหรับรูปแบบเพิ่มเติมโปรดดูmanpage (เอกสารคู่มือพร้อมตัวเลือกที่มีประโยชน์ )
ที่ทำงานตัวอย่างเช่นใน Debian หากคุณติดตั้งแพคเกจนอกบีบ (โดย runing apt-get install -t sid package-name
ยกตัวอย่างเช่น
คุณสามารถดูว่าแพคเกจที่ติดตั้งมาจากผ่านapt-cache policy
การใช้งานเป็นดังนี้:
apt-cache policy <package-name>
ตัวอย่างเช่นแพคเกจหลาม -numpy ของฉันแสดงผลต่อไปนี้:
$ LANG=C apt-cache policy python-numpy
python-numpy:
Installed: 1:1.6.2-1
Candidate: 1:1.6.2-1.2
Version table:
1:1.7.0-1 0
1 http://ftp.es.debian.org/debian/ experimental/main amd64 Packages
1:1.6.2-1.2 0
500 http://ftp.es.debian.org/debian/ sid/main amd64 Packages
*** 1:1.6.2-1 0
100 /var/lib/dpkg/status
1:1.4.1-5 0
990 http://ftp.es.debian.org/debian/ squeeze/main amd64 Packages
990 http://ftp.de.debian.org/debian/ squeeze/main amd64 Packages
นั่นหมายความว่าฉันเป็นรุ่นหนึ่งที่อยู่ด้านหลัง sid / main ของสาขาดังนั้นฉันจึงติดตั้งเวอร์ชันเก่า ฉันเห็นฉันไม่ได้มีเสถียรภาพหนึ่งเพราะมันเป็นยังและฉันปัจจุบันอยู่ที่1.4.1-5
1.6.2-1
เมื่อส่งแพคเกจนี้ได้รับการปรับปรุงแล้ว:)
หลังจากอ่านหน้าข้อมูลความถนัดและความพยายามหลายสิบครั้งในที่สุดฉันก็ได้รับสิ่งนี้:
aptitude search '?narrow(?installed,?not(?archive(testing)) ?archive(unstable))'
หรือเทียบเท่า) :
aptitude search '~S ~i (!~Atesting ~Aunstable)'
มันจะค้นหาแพ็คเกจที่ติดตั้งจากที่เก็บถาวรของที่เก็บใด ๆ คุณต้องกรองแพ็กเกจจากไฟล์เก็บถาวรเริ่มต้นของคุณ (ทดสอบในตัวอย่างด้านบน)
หากคุณต้องการกรองแพ็คเกจที่ติดตั้งจาก www.debian-multimedia.org/unstable:
aptitude search '~S ~i (!~Atesting ~Aunstable ?origin("Unofficial Multimedia Packages"))
แก้ไข: "เก็บถาวร", "จุดเริ่มต้น" ฯลฯ จะถูกหักออกจากRelease
ไฟล์ของที่เก็บ น่าเสียดายที่เครื่องมือบางอย่างนั้นไม่สามารถดูบรรทัดเหล่านั้นทั้งหมดและพวกเขาใช้ไวยากรณ์ที่แตกต่างกันสำหรับพวกเขา /var/lib/apt/lists/*Release
คุณสามารถค้นหาไฟล์เหล่านั้นเป็น หรือเพียงพิมพ์apt-cache policy
เพื่อดูภาพรวม apt-cache เปลี่ยนรูปแบบผลลัพธ์: รุ่นที่ใหม่กว่าใช้สไตล์ apt_preferences
Suite:
หรือArchive:
(ชื่อเก่า!)
?archive(___)
หรือ~A___
%t
release a=___
natty-backports
, trusty-security
,stable
Origin:
?origin(___)
หรือ~O___
release o=___
Canonical
, Google, Inc.
, LP-PPA-dockbar-main
,Ubuntu
ตรวจสอบแท็กต้นทาง (เช่นo = Debian ) สำหรับที่เก็บปัจจุบันของคุณแต่ละแห่ง:
apt-cache policy | sed -n 's/.*o=\([^,]\+\).*/\1/p' | uniq
จากนั้นค้นหาแพ็คเกจจาก (หรือไม่จาก) ที่มาเฉพาะ:
aptitude search "?installed?origin(Debian)"
aptitude search "?installed?not(?origin(Debian))"
สิ่งนี้ไม่เหมาะสำหรับการตรวจสอบความปลอดภัยเนื่องจากต้องอาศัยที่เก็บข้อมูลแต่ละแห่งเพื่อให้ข้อมูลต้นทางของตนเอง แต่อาจเป็นประโยชน์สำหรับการแก้ไขปัญหาที่มาของแพ็กเกจที่มีอยู่ในที่เก็บหลายแห่ง
aptitude search
รูปแบบของคุณไม่ดี - พวกเขาเลือกเช่น“ แพ็คเกจรายการที่ติดตั้งรุ่นหนึ่งและรุ่นอื่น ๆ ที่มีอยู่ใน Debian” หรือ“ ติดตั้งบางรุ่นและอย่างน้อยหนึ่งรุ่นของแพคเกจนั้นมีให้บริการสำหรับผู้ที่ไม่ใช่เดเบียน” - สิ่งที่เรามองหาคือ“ เวอร์ชั่นที่ติดตั้งมาจาก Debian (หรือไม่)” นี้จะต้องมีการทำด้วยหรือ?narrow()
?any-version()
nemo-fileroller
จากlinuxmint
แต่มันมีอยู่ในDebian
มากเกินไป ดังนั้นจึงปรากฏในรายการเพราะติดตั้งแล้วและอยู่ที่ไหนสักแห่งจาก Debian
เพื่อความสมบูรณ์: สำหรับระบบ Ubuntu คุณสามารถใช้ Synaptic สำหรับงานนี้ได้เช่นกัน ในคอลัมน์ด้านซ้ายคุณสามารถกรองแพ็คเกจตามที่มาของแพ็คเกจ
ฉันพบสิ่งนี้:
aptitude search "?origin (<repository>) ?installed"
นอกจากนี้คุณยังสามารถหารายชื่อของคำค้นหาที่ได้รับการสนับสนุนจาก "ค้นหาความถนัดเป็น" ที่นี่
sudo
? ดูเหมือนว่าฉันจะทำงานได้โดยไม่ต้องใช้มันในฐานะที่เป็นราก
ก่อนอื่นให้ค้นหาไฟล์ที่เหมาะสมสำหรับพื้นที่เก็บข้อมูลที่น่าสนใจใน / var / lib / apt / list มันเป็นไปได้ที่จะทำสิ่งนี้โดยทางโปรแกรม แต่ฉันไม่จำเป็นต้องทำ
ตัวอย่างการใช้ google chrome ลองทำสิ่งนี้:
SEARCH_PATTERN=dl.google.com_linux_chrome # adjust to suit your needs
for PKG in $( grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages | sed 's/^Package: //' )
do
if dpkg -s "${PKG}" 2> /dev/null 1> /dev/null
then
echo ${PKG}
fi
done
และฉันได้รับผลลัพธ์:
google-chrome-stable
dpkg -s ส่งคืนค่า 0 หากแพ็กเกจถูกติดตั้งและไม่ใช่ศูนย์มิฉะนั้น สำหรับวัตถุประสงค์ในการอ้างอิงในอนาคตผลลัพธ์ของ
grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages
เป็น
Package: google-chrome-beta
Package: google-chrome-stable
Package: google-chrome-unstable
คำตอบอื่น ๆ นั้นไม่ถูกต้องจริง ๆ เพราะพารามิเตอร์?archive()
เป็นนิพจน์ทั่วไป ดังนั้น?archive(stable)
ตรงกับทั้งสองและstable
unstable
หากต้องการยกเว้นเพียงstable
คุณต้องยึดรูปแบบ regex:
aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^stable$")))'
หากต้องการยกเว้นที่เก็บหลายรายการ:
aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^(xenial|xenial-updates)$")))'
xenial-security,xenial-updates
นอกจากนี้ทราบว่าบางแพคเกจเป็นที่เก็บหลายเช่น ?archive()
ประเมินรูปแบบ regex กับที่เก็บแต่ละรายการแยกกันดังนั้น?archive("^xenial-updates$")
จะจับคู่แพ็กเกจใด ๆ ที่เป็นของxenial-updates
แม้ว่าจะเป็นของที่เก็บอื่น ๆ ด้วย
?any-version()
เพราะ~narrow(pat1, pat2)
มันเหมือนกัน?any-version(pat1 pat2)
และรองรับได้?any-version(pat1 pat2 pat3)
โดยไม่ต้องมองโง่