ฉันจะรับรายการแพ็คเกจ (เช่นถอนการติดตั้ง) ใน Debian ได้อย่างไร


19

โดยพื้นฐานแล้วสิ่งที่ฉันกำลังค้นหาคือ Debian ที่เทียบเท่าของ:

yum list available

เพื่อแสดงให้ฉันเห็นว่ามีแพ็คเกจใดบ้าง (แม้ว่าจะยังไม่ได้ติดตั้งในปัจจุบัน) ฉันต้องการสิ่งที่สามารถเรียกใช้จากคอนโซลเนื่องจากอยู่บนเซิร์ฟเวอร์ระยะไกล ขอบคุณ

คำตอบ:


7

grep-dctrlและอนุพันธ์ของมันเป็นวิธีที่ดีในการสืบค้นไฟล์แคช apt (คุณสามารถติดตั้งเครื่องมือเหล่านี้บน Ubuntu ด้วย sudo apt-get install dctrl-tools)

ในกรณีของแพคเกจใช้ได้ ( แต่ไม่ได้ติดตั้งจำเป็น) grep-availableคุณสามารถใช้ ตัวอย่างเช่นในการแสดงรายการแพ็คเกจทั้งหมดที่มี:

grep-available  -s Package .

แก้ไข:

aptitude สามารถแสดงรายการของแพ็คเกจที่ไม่ได้ติดตั้งโดยเพียงแค่เปิดใช้งาน

คุณยังสามารถรับรายการแพคเกจที่ไม่ได้ติดตั้งด้วยaptitudeโดยใช้:

aptitude -F "%p" search "?not(?installed)"

โปรดทราบว่าด้วยแพ็คเกจ multi-arch ใหม่คุณจะได้รับแพ็คเกจสำหรับสถาปัตยกรรมอื่น ๆ ที่ระบุไว้ในผลลัพธ์นี้ ตัวอย่างเช่นฉันจะได้รับ:

aptitude -F "%p" search "?not(?installed)"  | grep "^bash:"
bash:i386

ฉันbashติดตั้งแพคเกจแล้ว แต่เป็นรุ่น amd64 เนื่องจากระบบปฏิบัติการของฉันได้รับการติดตั้งด้วย Ubuntu รุ่นที่แม่นยำ หากคุณไม่ต้องการเห็นแพ็คเกจเหล่านี้สำหรับสถาปัตยกรรมอื่น ๆ คุณสามารถยกเว้นบรรทัดที่มี::

aptitude -F "%p" search "?not(?installed)"  | grep -v ':'

ขอบคุณ แต่ปัญหาเกี่ยวกับสิ่งนี้คือฉันต้องลากผ่านรายการแพ็กเกจทั้งหมดสำหรับที่เก็บที่ฉันเลือก อาจเป็นวิธีที่ดีกว่าในการมองเห็นปัญหาที่เกิดขึ้น: ลองนึกภาพ X การเป็นชุดสากลของแพ็คเกจทั้งหมดในที่เก็บแพคเกจ Debian เซิร์ฟเวอร์ของฉันชี้ไปที่และ Y เป็นชุดของแพ็คเกจที่ฉันติดตั้งบนเซิร์ฟเวอร์ดังกล่าว สิ่งที่สำคัญคือฉันค้นหาคือ X - Y ตอนนี้ฉันรู้ว่าฉันสามารถทำสิ่งนี้ได้โดยทางโปรแกรม แต่ฉันหวังว่าจะมีคำสั่งที่ค่อนข้างง่ายเพื่อให้ได้ผลลัพธ์เดียวกันในระบบ Debian
freakwincy

เพิ่งเห็นคำตอบที่แก้ไขของคุณ มันคือสิ่งที่ฉันกำลังมองหา! ขอบคุณ
freakwincy

ป.ล. ฉันได้คะแนนโหวตคำตอบของคุณแล้ว แต่ยังไม่ได้คะแนนชื่อเสียงเพียงพอ
freakwincy

ไม่มีปัญหา. ยินดีต้อนรับสู่ SU โดยวิธี ;-)
ℝaphink

16

apt-cache ใช้สำหรับการสอบถามแคชแพ็กเกจ:

apt-cache pkgnames | ประเภท
ค้นหา apt-แคชสิ่ง
apt-แคชค้นหา --names เท่านั้นสิ่งที่

ขอบคุณ แต่ฉันเกรงว่าจะไม่ทำงาน ฉันเปรียบเทียบรายการที่สร้างโดยคำสั่งแรกกับรายการที่สร้างขึ้นก่อนหน้านี้ของแพ็คเกจที่ติดตั้งซึ่งฉันได้รับ: code"dpkg --get-selections | grep '[[: พื้นที่:]] ติดตั้ง $' | awk '{พิมพ์ $ 1}' > installed.txt "และพบข้อมูลซ้ำกัน อีกสองคำสั่งคุณให้จะไม่ทำงานเพราะผมไม่ได้มองหาแพคเกจโดยเฉพาะอย่างยิ่ง แต่ใด ๆแพคเกจที่ไม่ได้ติดตั้งในปัจจุบัน
freakwincy

2

ใช้apt-cacheเพื่อจุดประสงค์นี้:

apt-cache search package

เนื่องจากapt-cacheใช้เฉพาะแพ็คเกจแคชบนระบบตรวจสอบให้แน่ใจว่าแคชนี้เป็นข้อมูลล่าสุด:

apt-get update

คุณยังสามารถใช้ยูทิลิตีนี้ได้apt-fileหากคุณทราบชื่อไฟล์ที่คุณต้องการค้นหา นี้จะต้องมีการเพิ่มระบบ ตัวอย่างเช่น:

apt-file search somefilename

ฉันมักจะใช้apt-cacheวิธีใดวิธีหนึ่งต่อไปนี้:

apt-cache search package | sort | grep item

(สิ่งนี้แสดงให้คุณเห็นสิ่งที่มีรายการจริง ๆ ในการสรุปหรือชื่อ)

apt-cache search thing | sort | less

(การค้นหาสิ่งนี้จะเรียงลำดับเพื่อให้ได้รับชมอย่างเพลิดเพลินless)


2

มุมมองของฉันคือการทำงานกับคำสั่งที่ติดตั้งโดยค่าเริ่มต้นและหลีกเลี่ยงแพ็กเกจพิเศษหากไม่มีเหตุผลเฉพาะใด ๆ

ใน Debian ของฉันกับ GNU ทุบตีคำสั่งง่ายๆเหล่านี้

apt list
apt list --all-versions

ให้รายการสิ่งใด ๆ (ติดตั้งและไม่ได้ติดตั้ง) ฉันสามารถ จำกัด ผลลัพธ์ด้วยการ grep "ติดตั้ง" หรือ grep -v "ติดตั้ง" นอกจากนี้ยังสามารถใช้ร่วมกับชื่อแพคเกจอย่างน้อยหนึ่งชื่อ (ยอมรับได้เครื่องหมายไวด์)

สลับ "-all-versions" ให้ในบรรทัดแยกเอาท์พุทสำหรับแต่ละรุ่นแพคเกจ (มั่นคง, การทดสอบ, ไม่เสถียร, การทดลอง)

"รายการ apt" แบบง่ายให้เพียงหนึ่งเวอร์ชัน (ลำดับความสำคัญสูงสุด)


0

คำถามของคุณอย่างเคร่งครัด (คุณต้องการแสดงรายการแพคเกจที่ไม่ได้ติดตั้ง) ลองใช้

(แก้ไขตามความคิดเห็นด้านล่าง)

# apt-get update
# dpkg -l '*' | egrep --invert-match '^i'

ไม่แน่ใจเกี่ยวกับไวยากรณ์ที่แน่นอนเนื่องจากฉันกำลังเขียนสิ่งนี้ในกล่องหน้าต่างและไม่มีวิธีตรวจสอบ อาจลองเปลี่ยนสิ่งที่คุณ grep


รายการนี้ติดตั้งแพคเกจไม่ได้ถอนการติดตั้ง
inkaphink

@Raphink: ขออภัยฉันแก้ไขโพสต์เพื่อแก้ไขปัญหานี้
PPC

ไม่มีปัญหา แต่คุณยังคงไม่ได้แสดงรายการแพ็คเกจที่ไม่ได้ติดตั้ง ด้วยการยกเว้นแพ็คเกจ 'ii' (ซึ่งจริงๆแล้วไม่ใช่สิ่งที่นิพจน์ของคุณทำคุณควรใช้'^ii'แทน'[ii]') คุณจะหายไปจากแพ็คเกจที่ติดตั้ง แต่ไม่ได้กำหนดค่าตัวอย่าง (เช่นiFหรือiHตัวอย่าง)
inkaphink

@PPC: อนิจจาสิ่งนี้ไม่ได้ผลเนื่องจาก dpkg -l จะแสดงรายการแพ็คเกจที่ติดตั้งเท่านั้นเช่นแพ็คเกจทั้งหมดจะถูกนำหน้าด้วย "ii" ดังนั้นการบีบอัดผลลัพธ์เพื่อ grep โดยใช้แฟล็ก --invert-match หรือ -v จะให้เท่านั้น ชุดของขีดกลางซึ่งเป็นตัวคั่นส่วนหัวของรายการ ขอบคุณอยู่ดี
freakwincy

@ freakwincy: ถูกต้อง! ขออภัยที่ไม่ได้ทดสอบก่อนที่จะส่ง (ทำงานบน windows) ตาม manpage คุณควรใช้ "dpkg -l '*'" เพื่อแสดงรายการแพ็คเกจทั้งหมด
PPC
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.