จะติดตั้งแพ็คเกจใหม่โดยใช้ 'apt-get' ได้อย่างไร?


186

ดูเหมือนว่าฉันaptitudeจะแตกหัก:

sudo aptitude update
0% [Working]Segmentation fault

dmesg
[223282.616599] aptitude[30972]: segfault at 67707f ip 7f954dcfae5d sp 7ffff5a5f950 error 4 in libapt-pkg-libc6.7-6.so.4.6.0[7f954dca5000+bd000]

ดังนั้นผมจึงอยากจะติดตั้งโดยใช้aptitudeapt-get

น่าเสียดายที่ดูเหมือนว่าapt-getไม่มีตัวเลือกการติดตั้งใหม่

ฉันaptitudeจะทำงานอีกครั้งได้อย่างไร

เป็นไปได้ว่าฉันได้ค้นพบต้นเหตุของ segfault ของความถนัด นี่คือวิธีที่ฉันสามารถทำซ้ำได้:

  1. 'ssh' ล็อกอินระยะไกลไปยังเครื่อง Debian ผ่านทางเทอร์มินัล rxvt ของ Cygwin (จาก Windows 7 รุ่น 64 บิตภาษาเยอรมัน)
  2. ขยายหน้าต่าง rxvt เพื่อขยายข้ามจอภาพสองจอ (ใช่ฉันมีสองจอภาพ)
  3. aptitude updateวิ่ง หมายเหตุ: เมื่อฉันปรับขนาดเทอร์มินัล rxvt เป็นปกติแล้วฉันไม่มีข้อผิดพลาดการแบ่งกลุ่มเหล่านี้!

คำตอบ:


320
$ man apt-get | grep reinsta -A2
       --reinstall
           Re-Install packages that are already installed and at the newest
           version. Configuration Item: APT::Get::ReInstall.

ดังนั้นหากต้องการใช้เพื่อติดตั้งใหม่ให้aptitudeใช้:

sudo apt-get install --reinstall aptitude

14
ว่ามีอะไรที่-A5คุณกำลัง grepping?
Vokuhila-Oliba

86
คน grep grep - "-A"
grawity

34
สิ่งที่--คุณกำลัง grepping?
ทำลาย

13
man getoptดูใต้PARSING
Tino

28
-A5แสดงบรรทัดที่จับคู่บวก 5 บรรทัดต่อไปนี้ --หยุดการแยกวิเคราะห์ตัวเลือกดังนั้นตีความสิ่งใด ๆ ที่เกิดขึ้นหลังจากนั้นในฐานะอาร์กิวเมนต์ที่มีตำแหน่งหลีกเลี่ยงการหลบหนีจากเส้นประในนิพจน์-Aซึ่งอาจตีความได้ว่าเป็นตัวเลือกในการ grep ตัวเอง
jjmontes

115

sudo apt-get install --reinstall packagenameคุณสามารถติดตั้งแพคเกจกับ สิ่งนี้จะลบแพ็กเกจทั้งหมด (แต่ไม่ใช่แพ็กเกจที่ขึ้นอยู่กับมัน) จากนั้นติดตั้งแพ็กเกจใหม่

สิ่งนี้จะสะดวกเมื่อแพ็คเกจมีการพึ่งพาย้อนกลับมากมาย


10
ขอขอบคุณที่เป็นคำตอบที่ถูกต้องครบถ้วนและไม่ใช่คำตอบเท่านั้น
Cerin

6
@Cerin: ฉันจะไม่เรียกคำตอบอื่น ๆ ที่น่ารังเกียจมากเกินไป: แม้แต่ "อ่านหน้าคน" ที่จริงก็ให้คำตอบเช่นเดียวกับวิธีการค้นหา
David Spillett

45
@ DavidSpillett ฉันไม่เห็นด้วยอย่างยิ่ง หน้าคนมักจะเขียนไม่ดีมากและไม่เป็นมิตรกับมือใหม่ ตัวอย่างเช่นย่อหน้าในตัวเลือก "- ติดตั้งใหม่" ไม่ได้กล่าวถึงว่าคุณต้องใช้มันพร้อมกับอาร์กิวเมนต์ "ติดตั้ง" มือใหม่อาจถามว่า "ทำไมฉันต้องบอกให้ติดตั้งและติดตั้งใหม่?" คำตอบที่บอกใครบางคนให้ RTFM เป็นคำตอบที่แย่ที่สุดและทำให้ฉันต้องเห็นด้วยคะแนนมากที่สุดโดยเฉพาะอย่างยิ่งเมื่อคำตอบที่สมบูรณ์และเป็นประโยชน์จริง ๆ อยู่ใกล้ด้านล่าง
Cerin

20

บางครั้งคุณต้องกู้คืนไฟล์กำหนดค่าด้วย! ไม่เพียงแค่ติดตั้งใหม่

sudo apt-get install --reinstall xxxx

ติดตั้งแอปพลิเคชั่นอีกครั้งและเก็บไฟล์ปรับแต่ง

นี่อาจเป็นประโยชน์ แต่บางครั้งคุณต้องเริ่มต้นใหม่ดังนั้นสิ่งที่ฉันใช้คือ:

sudo dpkg -r xxxx //to remove that xxxx package
sudo dpkg -P xxxx //to purge all related files

แล้วก็

sudo apt-get install xxxx

6
และถ้าคุณต้องการที่จะเรียกคืน config ไฟล์เท่านั้นในบางกรณี (ถ้าพวกเขามีการจัดการโดย UCF) UCF_FORCE_CONFFMISS=1 apt-get --reinstall install [pkgname]คุณควรใช้
Skippy le Grand Gourou

2
คำตอบนี้สมควรได้รับการโหวตครั้งใหญ่นี่คือสิ่งที่คุณต้องการเมื่อคุณต้องการ "ติดตั้งใหม่ทั้งหมด" แพ็คเกจ เช่นง่าย ๆ - การติดตั้ง vsftpd ไม่ได้สร้างไฟล์ปรับแต่งใหม่อีกครั้งแม้ว่าไฟล์จะไม่มีอยู่อีกต่อไป การติดตั้ง "Remove + Purge + (Re)" จะทำงานแทน
Kar.ma

13

คุณควรจะปลอดภัยในการลบความถนัดและติดตั้งใหม่เนื่องจากจะไม่มีผลต่อโปรแกรมอรรถประโยชน์ apt อื่น ๆ ดังนั้น: apt-get remove aptitudeตามด้วยapt-get install aptitudeหรือถ้ายังคงล้มเหลวลองตามมาด้วยapt-get purge aptitudeapt-get install aptitude

ก่อนที่จะทำอย่างใดอย่างหนึ่งข้างต้นฉันแนะนำให้ใช้ระบบไฟล์แบบเต็มและการตรวจสอบบล็อกที่ไม่ดีในกรณีที่มีปัญหาที่ทำให้เกิดปัญหา (ขึ้นอยู่กับปัญหาหากมีหนึ่งกิจกรรมเพิ่มเติมอาจทำให้สิ่งเลวร้ายลง) นอกจากนี้ตรวจสอบให้แน่ใจว่าคุณได้ตรวจสอบสิ่งที่จะถูกลบในขั้นตอนการลบ / ล้างออกก่อนที่จะให้ดำเนินการต่อ (ควรหยุดขออนุญาตหากมีการเปลี่ยนแปลงอะไรพิเศษซึ่งเป็นผลมาจากการลบแพคเกจนั้น) มีความปลอดภัย.


ขอบคุณมาก! apt-get removeตามมาด้วยapt-get installการหลอกลวง!
Vokuhila-Oliba

นานมาแล้วที่ฉันทำสิ่งที่คล้ายa full filesystem checkหรือคล้ายกัน คุณช่วยบอกฉันสั้น ๆ เกี่ยวกับการทำเช่นนั้นได้ไหม
Vokuhila-Oliba

1
fsck -f <block_device>fsck /dev/sda1เช่น ระบบไฟล์จะต้องถูกถอดออกหรือติดตั้งแบบอ่านอย่างเดียวในเวลานี้เนื่องจากเป็นไปได้ว่าระบบไฟล์รูทของคุณคุณควรทำการบูทใหม่ในโหมดผู้ใช้คนเดียวหรือการบูตจากสิ่งอื่นเช่นซีดีสด
David Spillett

2
คุณสามารถใช้tune2fsเพื่อทำเครื่องหมายระบบไฟล์ว่ามีการเมาท์ครั้งกว่าขีด จำกัด ที่กำหนดซึ่งควรบังคับให้ตรวจสอบการบูตครั้งถัดไป สมมติว่าระบบแฟ้มเป็น ext2 / 3/4: tune2fs -C 99 <device>หรือในกรณีที่คุณมีติดนับ based tune2fs -c 17 -C 99 <device>ตรวจสอบปิดเปิดในเวลาเดียวกันกับสิ่งที่ต้องการ
David Spillett

2
touch / forcefsck; reboot
user23307

1
sudo apt remove --purge package
sudo apt install package

เหมือนกับที่คุณไม่เคยติดตั้งแพ็คเกจมาก่อน ฉันทำสิ่งนี้บ่อย ๆ ด้วยท่าทางและสิ่งต่าง ๆ

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