ดูรายละเอียดแพ็คเกจที่ไม่ได้ติดตั้งในขณะนี้เมื่อใช้“ apt-get remove”


13

ฉันมีสถานการณ์ที่ฉันต้องการลบชุดของแพคเกจที่อาจติดตั้งหรือไม่ติดตั้งและฉันต้องการ apt-get เพื่อลบแพ็กเกจที่ไม่สนใจ สิ่งที่ต้องการ:

apt-get remove foo bar baz

ซึ่งถ้าติดตั้ง foo และ bar แต่ไม่ใช่ baz จะลบ foo และ bar โดยไม่บ่นเกี่ยวกับ baz มีวิธีทำเช่นนี้หรือไม่?

สิ่งที่ฉันพยายามที่ไม่ได้ทำงานกับ cups-dbg เป็นแพคเกจแพะรับบาปที่ติดตั้งจริงของฉันที่จะลบ:

jcp@a-boyd:~$ sudo apt-get remove -y cups-dbg bogus-package
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package bogus-package

jcp@a-boyd:~$ sudo apt-get remove --ignore-missing cups-dbg bogus-package
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package bogus-package

jcp@a-boyd:~$ sudo apt-get remove --fix-broken cups-dbg bogus-package
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package bogus-package

ฉันรู้ว่าฉันสามารถทำสิ่งนี้ได้ด้วยสคริปต์เชลล์และdpkg --listเวทมนตร์ แต่ฉันต้องการหลีกเลี่ยงความซับซ้อนที่ไม่จำเป็นอย่างยิ่ง


คำตอบนี้ใช้ได้สำหรับฉันในที่สุด แก้ไขปัญหาโง่สำหรับปัญหาโง่ โปรดทราบว่ามีข้อบกพร่องบน Launchpadเกี่ยวกับเรื่องนี้ดังนั้นโปรดอย่าลังเลที่จะมีส่วนร่วม
เจฟฟ์

คำตอบ:


7

กลับไปใช้เครื่องมือระดับล่างเช่นdpkgหรือไม่?

dpkg --remove foo bar libperl-dev
dpkg: warning: ignoring request to remove foo which isn't installed
dpkg: warning: ignoring request to remove bar which isn't installed
(Reading database ... 169132 files and directories currently installed.)
Removing libperl-dev ...

ในการลบไฟล์กำหนดค่าแพคเกจใช้การล้างข้อมูลด้านล่าง

dpkg --purge foo bar libperl-dev

1
ฉันควรจะกล่าวว่าแพคเกจที่จะลบสามารถมีการอ้างอิงย้อนกลับและฉันต้องการที่จะถูกลบออกด้วย Apt-get นั้นดีกว่า dpkg มาก แต่ฉันจะยอมรับคำตอบของคุณเพราะดูเหมือนว่าไม่มีวิธีที่ดีกว่าในการทำเช่นนี้
javawizard

7

ฉันใช้apt-get remove --purge(aka apt-get purge) สำหรับการพึ่งพาต่อไปนี้กับรายการแพคเกจ เพื่อจัดการแพ็คเกจที่ไม่มีอยู่ฉันกรองแพ็กเกจที่ไม่ได้ติดตั้งด้วยสคริปต์ต่อไปนี้

pkgToRemoveListFull="cups-dbg bogus-package"
pkgToRemoveList=""
for pkgToRemove in $(echo $pkgToRemoveListFull); do
  $(dpkg --status $pkgToRemove &> /dev/null)
  if [[ $? -eq 0 ]]; then
    pkgToRemoveList="$pkgToRemoveList $pkgToRemove"
  fi
done
apt-get --yes --purge remove $pkgToRemoveList

3

เพียงใช้aptitudeแทนapt-get:

sudo aptitude remove -y cups-dbg bogus-package

ความถนัดพิมพ์คำเตือน แต่ยังคงเอาแพ็คเกจของคุณออกไป:

Couldn't find any package whose name or description matched "bogus-package"
...
Removing cups-dbg ...
...

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

apt-get -y purge $(dpkg -l | grep ^rc | awk '{print $2}')

ตกลง. บางครั้งคนที่bogus-packageเพิ่งมีชื่อผิด ดังนั้นในกรณีที่เรามี 500 แพ็คเกจมันจะเป็นการดีกว่าที่จะวิเคราะห์แพคเกจปลอมด้วยและทำเทคนิคบางอย่าง (ตัวอย่างเช่นตัวเลขหลังชื่อที่ไม่มีชื่อ ฯลฯ ) ดังนั้นคุณช่วยแนะนำวิธีทำสิ่งนี้ได้ไหม ..
nyxee

@nyxee ฉันขอเสนอเป็นคำถามใหม่ชี้ให้เห็นว่าสิ่งที่คุณต้องการที่จะบรรลุ
vog

1
นี่จะเป็นวิธีแก้ปัญหาที่ดียกเว้น 1) ความถนัดไม่ได้ติดตั้งตามค่าเริ่มต้นบน Ubuntu 18.04 และ 2) ความถนัดมีวิธีการที่แตกต่างออกไป
เจฟฟ์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.